1; RUN: llc < %s -march=x86 -asm-verbose=false | FileCheck %s -check-prefix=FP-ELIM 2; RUN: llc < %s -march=x86 -asm-verbose=false -disable-fp-elim | FileCheck %s -check-prefix=NO-ELIM 3 4; Implement -momit-leaf-frame-pointer 5; rdar://7886181 6 7define i32 @t1() nounwind readnone { 8entry: 9; FP-ELIM-LABEL: t1: 10; FP-ELIM-NEXT: movl 11; FP-ELIM-NEXT: ret 12 13; NO-ELIM-LABEL: t1: 14; NO-ELIM-NEXT: pushl %ebp 15; NO-ELIM: popl %ebp 16; NO-ELIM-NEXT: ret 17 ret i32 10 18} 19 20define void @t2() nounwind { 21entry: 22; FP-ELIM-LABEL: t2: 23; FP-ELIM-NOT: pushl %ebp 24; FP-ELIM: ret 25 26; NO-ELIM-LABEL: t2: 27; NO-ELIM-NEXT: pushl %ebp 28; NO-ELIM: popl %ebp 29; NO-ELIM-NEXT: ret 30 tail call void @foo(i32 0) nounwind 31 ret void 32} 33 34define i32 @t3() "no-frame-pointer-elim-non-leaf" nounwind readnone { 35entry: 36; FP-ELIM-LABEL: t3: 37; FP-ELIM-NEXT: movl 38; FP-ELIM-NEXT: ret 39 40; NO-ELIM-LABEL: t3: 41; NO-ELIM-NEXT: pushl %ebp 42; NO-ELIM: popl %ebp 43; NO-ELIM-NEXT: ret 44 ret i32 10 45} 46 47define void @t4() "no-frame-pointer-elim-non-leaf" nounwind { 48entry: 49; FP-ELIM-LABEL: t4: 50; FP-ELIM-NEXT: pushl %ebp 51; FP-ELIM: popl %ebp 52; FP-ELIM-NEXT: ret 53 54; NO-ELIM-LABEL: t4: 55; NO-ELIM-NEXT: pushl %ebp 56; NO-ELIM: popl %ebp 57; NO-ELIM-NEXT: ret 58 tail call void @foo(i32 0) nounwind 59 ret void 60} 61 62declare void @foo(i32) 63