[x86] Improve frameaddress test from r210709.
[oota-llvm.git] / test / CodeGen / X86 / frameaddr.ll
1 ; RUN: llc < %s -march=x86                                | FileCheck %s --check-prefix=CHECK-32
2 ; RUN: llc < %s -march=x86    -fast-isel -fast-isel-abort | FileCheck %s --check-prefix=CHECK-32
3 ; RUN: llc < %s -march=x86-64                             | FileCheck %s --check-prefix=CHECK-64
4 ; RUN: llc < %s -march=x86-64 -fast-isel -fast-isel-abort | FileCheck %s --check-prefix=CHECK-64
5
6 define i8* @test1() nounwind {
7 entry:
8 ; CHECK-32-LABEL: test1
9 ; CHECK-32:       push
10 ; CHECK-32-NEXT:  movl %esp, %ebp
11 ; CHECK-32-NEXT:  movl %ebp, %eax
12 ; CHECK-32-NEXT:  pop
13 ; CHECK-32-NEXT:  ret
14 ; CHECK-64-LABEL: test1
15 ; CHECK-64:       push
16 ; CHECK-64-NEXT:  movq %rsp, %rbp
17 ; CHECK-64-NEXT:  movq %rbp, %rax
18 ; CHECK-64-NEXT:  pop
19 ; CHECK-64-NEXT:  ret
20   %0 = tail call i8* @llvm.frameaddress(i32 0)
21   ret i8* %0
22 }
23
24 define i8* @test2() nounwind {
25 entry:
26 ; CHECK-32-LABEL: test2
27 ; CHECK-32:       push
28 ; CHECK-32-NEXT:  movl %esp, %ebp
29 ; CHECK-32-NEXT:  movl (%ebp), %eax
30 ; CHECK-32-NEXT:  movl (%eax), %eax
31 ; CHECK-32-NEXT:  pop
32 ; CHECK-32-NEXT:  ret
33 ; CHECK-64-LABEL: test2
34 ; CHECK-64:       push
35 ; CHECK-64-NEXT:  movq %rsp, %rbp
36 ; CHECK-64-NEXT:  movq (%rbp), %rax
37 ; CHECK-64-NEXT:  movq (%rax), %rax
38 ; CHECK-64-NEXT:  pop
39 ; CHECK-64-NEXT:  ret
40   %0 = tail call i8* @llvm.frameaddress(i32 2)
41   ret i8* %0
42 }
43
44 declare i8* @llvm.frameaddress(i32) nounwind readnone