diff options
author | Pavel Chupin <pavel.v.chupin@intel.com> | 2014-09-17 07:09:23 +0000 |
---|---|---|
committer | Pavel Chupin <pavel.v.chupin@intel.com> | 2014-09-17 07:09:23 +0000 |
commit | 37b65d81ddd3cae43af4777e41bc5e873944cc0e (patch) | |
tree | ef0232249aec79e6651342f786b60022b261ddf6 /llvm/test/CodeGen/X86/x32-function_pointer-1.ll | |
parent | 99e9518751b837d3f073d30155aacdbc8fa0a3c1 (diff) | |
download | bcm5719-llvm-37b65d81ddd3cae43af4777e41bc5e873944cc0e.tar.gz bcm5719-llvm-37b65d81ddd3cae43af4777e41bc5e873944cc0e.zip |
[x32] Fix function indirect calls
Summary: Zero-extend register to 64-bit for callq/jmpq.
Test Plan: 3 tests added
Reviewers: nadav, dschuff
Subscribers: llvm-commits, zinovy.nis
Differential Revision: http://reviews.llvm.org/D5355
llvm-svn: 217942
Diffstat (limited to 'llvm/test/CodeGen/X86/x32-function_pointer-1.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/x32-function_pointer-1.ll | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/x32-function_pointer-1.ll b/llvm/test/CodeGen/X86/x32-function_pointer-1.ll new file mode 100644 index 00000000000..2baf92a9979 --- /dev/null +++ b/llvm/test/CodeGen/X86/x32-function_pointer-1.ll @@ -0,0 +1,20 @@ +; RUN: llc < %s -mtriple=x86_64-linux-gnux32 | FileCheck %s +; RUN: llc < %s -mtriple=x86_64-linux-gnux32 -fast-isel | FileCheck %s + +; Test for x32 function pointer tail call + +@foo1 = external global void (i8*)* +@foo2 = external global void (i8*)* + +define void @bar(i8* %h) nounwind uwtable { +entry: + %0 = load void (i8*)** @foo1, align 4 +; CHECK: movl foo1(%rip), %e{{[^,]*}} + tail call void %0(i8* %h) nounwind +; CHECK: callq *%r{{[^,]*}} + %1 = load void (i8*)** @foo2, align 4 +; CHECK: movl foo2(%rip), %e{{[^,]*}} + tail call void %1(i8* %h) nounwind +; CHECK: jmpq *%r{{[^,]*}} + ret void +} |