diff options
| author | Albert Gutowski <agutowski@google.com> | 2016-10-12 22:13:19 +0000 |
|---|---|---|
| committer | Albert Gutowski <agutowski@google.com> | 2016-10-12 22:13:19 +0000 |
| commit | 795d7d63810619af504ca1330aaa967c6e1c976d (patch) | |
| tree | 4eebf0989b7ec2c007d25a9366eab6f76e90f18d /llvm/test | |
| parent | 2a0621e58a3929a0e1662c67ae59bfbb11b3b08f (diff) | |
| download | bcm5719-llvm-795d7d63810619af504ca1330aaa967c6e1c976d.tar.gz bcm5719-llvm-795d7d63810619af504ca1330aaa967c6e1c976d.zip | |
Create llvm.addressofreturnaddress intrinsic
Summary: We need a new LLVM intrinsic to implement MS _AddressOfReturnAddress builtin on 64-bit Windows.
Reviewers: majnemer, rnk
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D25293
llvm-svn: 284061
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/X86/addr-of-ret-addr.ll | 19 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/win64_frame.ll | 19 |
2 files changed, 38 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/addr-of-ret-addr.ll b/llvm/test/CodeGen/X86/addr-of-ret-addr.ll new file mode 100644 index 00000000000..0d4a3e38fc6 --- /dev/null +++ b/llvm/test/CodeGen/X86/addr-of-ret-addr.ll @@ -0,0 +1,19 @@ +; RUN: llc < %s -disable-fp-elim -march=x86 | FileCheck %s --check-prefix=CHECK-X86 +; RUN: llc < %s -disable-fp-elim -march=x86-64 | FileCheck %s --check-prefix=CHECK-X64 + +define i8* @f() nounwind readnone optsize { +entry: + %0 = tail call i8* @llvm.addressofreturnaddress() ; <i8*> [#uses=1] + ret i8* %0 + ; CHECK-X86-LABEL: _f: + ; CHECK-X86: pushl %ebp + ; CHECK-X86: movl %esp, %ebp + ; CHECK-X86: leal 4(%ebp), %eax + + ; CHECK-X64-LABEL: f: + ; CHECK-X64: pushq %rbp + ; CHECK-X64: movq %rsp, %rbp + ; CHECK-X64: leaq 8(%rbp), %rax +} + +declare i8* @llvm.addressofreturnaddress() nounwind readnone diff --git a/llvm/test/CodeGen/X86/win64_frame.ll b/llvm/test/CodeGen/X86/win64_frame.ll index 2a8095bde7c..34f78ad0ac2 100644 --- a/llvm/test/CodeGen/X86/win64_frame.ll +++ b/llvm/test/CodeGen/X86/win64_frame.ll @@ -184,7 +184,26 @@ define i64 @f10(i64* %foo, i64 %bar, i64 %baz) { ; CHECK-NEXT: popq %rbp } +define i8* @f11() "no-frame-pointer-elim"="true" { + ; CHECK-LABEL: f11: + ; CHECK: pushq %rbp + ; CHECK: movq %rsp, %rbp + ; CHECK: .seh_setframe 5, 0 + ; CHECK: leaq 8(%rbp), %rax + %aora = call i8* @llvm.addressofreturnaddress() + ret i8* %aora +} + +define i8* @f12() { + ; CHECK-LABEL: f12: + ; CHECK-NOT: push + ; CHECK: movq %rsp, %rax + %aora = call i8* @llvm.addressofreturnaddress() + ret i8* %aora +} + declare i8* @llvm.returnaddress(i32) nounwind readnone +declare i8* @llvm.addressofreturnaddress() nounwind readnone declare i64 @llvm.x86.flags.read.u64() declare void @llvm.va_start(i8*) nounwind |

