blob: 452c8e5a21af9cfc22944e6bb0b2f82796269358 [file] [log] [blame]
Juergen Ributzka4dc95872014-06-11 21:44:44 +00001; 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
Pavel Chupinf55eb452014-08-07 09:41:19 +00005; RUN: llc < %s -mtriple=x86_64-gnux32 | FileCheck %s --check-prefix=CHECK-X32ABI
6; RUN: llc < %s -mtriple=x86_64-gnux32 -fast-isel -fast-isel-abort | FileCheck %s --check-prefix=CHECK-X32ABI
Juergen Ributzka4dc95872014-06-11 21:44:44 +00007
8define i8* @test1() nounwind {
9entry:
Juergen Ributzka7eac9292014-06-12 03:29:29 +000010; CHECK-32-LABEL: test1
11; CHECK-32: push
12; CHECK-32-NEXT: movl %esp, %ebp
13; CHECK-32-NEXT: movl %ebp, %eax
14; CHECK-32-NEXT: pop
15; CHECK-32-NEXT: ret
16; CHECK-64-LABEL: test1
17; CHECK-64: push
18; CHECK-64-NEXT: movq %rsp, %rbp
19; CHECK-64-NEXT: movq %rbp, %rax
20; CHECK-64-NEXT: pop
21; CHECK-64-NEXT: ret
Pavel Chupinf55eb452014-08-07 09:41:19 +000022; CHECK-X32ABI-LABEL: test1
23; CHECK-X32ABI: pushq %rbp
24; CHECK-X32ABI-NEXT: movl %esp, %ebp
25; CHECK-X32ABI-NEXT: movl %ebp, %eax
26; CHECK-X32ABI-NEXT: popq %rbp
27; CHECK-X32ABI-NEXT: ret
Juergen Ributzka4dc95872014-06-11 21:44:44 +000028 %0 = tail call i8* @llvm.frameaddress(i32 0)
29 ret i8* %0
30}
31
32define i8* @test2() nounwind {
33entry:
Juergen Ributzka7eac9292014-06-12 03:29:29 +000034; CHECK-32-LABEL: test2
35; CHECK-32: push
36; CHECK-32-NEXT: movl %esp, %ebp
37; CHECK-32-NEXT: movl (%ebp), %eax
38; CHECK-32-NEXT: movl (%eax), %eax
39; CHECK-32-NEXT: pop
40; CHECK-32-NEXT: ret
41; CHECK-64-LABEL: test2
42; CHECK-64: push
43; CHECK-64-NEXT: movq %rsp, %rbp
44; CHECK-64-NEXT: movq (%rbp), %rax
45; CHECK-64-NEXT: movq (%rax), %rax
46; CHECK-64-NEXT: pop
47; CHECK-64-NEXT: ret
Pavel Chupinf55eb452014-08-07 09:41:19 +000048; CHECK-X32ABI-LABEL: test2
49; CHECK-X32ABI: pushq %rbp
50; CHECK-X32ABI-NEXT: movl %esp, %ebp
51; CHECK-X32ABI-NEXT: movl (%ebp), %eax
52; CHECK-X32ABI-NEXT: movl (%eax), %eax
53; CHECK-X32ABI-NEXT: popq %rbp
54; CHECK-X32ABI-NEXT: ret
Juergen Ributzka4dc95872014-06-11 21:44:44 +000055 %0 = tail call i8* @llvm.frameaddress(i32 2)
56 ret i8* %0
57}
Juergen Ributzka7eac9292014-06-12 03:29:29 +000058
Juergen Ributzka4dc95872014-06-11 21:44:44 +000059declare i8* @llvm.frameaddress(i32) nounwind readnone