summaryrefslogtreecommitdiff
path: root/test/CodeGen/X86/x86-64-gv-offset.ll
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2008-02-07 08:53:49 +0000
committerEvan Cheng <evan.cheng@apple.com>2008-02-07 08:53:49 +0000
commitbe3bf423315394f15f0c71afdaed26e5cfbcad4a (patch)
tree781ebfc62c878741f13ed48ea718b559797a9948 /test/CodeGen/X86/x86-64-gv-offset.ll
parent15246738f2db3f63a20c1f2b9b19b08e21acffd9 (diff)
downloadllvm-be3bf423315394f15f0c71afdaed26e5cfbcad4a.tar.gz
llvm-be3bf423315394f15f0c71afdaed26e5cfbcad4a.tar.bz2
llvm-be3bf423315394f15f0c71afdaed26e5cfbcad4a.tar.xz
Fix a x86-64 codegen deficiency. Allow gv + offset when using rip addressing mode.
Before: _main: subq $8, %rsp leaq _X(%rip), %rax movsd 8(%rax), %xmm1 movss _X(%rip), %xmm0 call _t xorl %ecx, %ecx movl %ecx, %eax addq $8, %rsp ret Now: _main: subq $8, %rsp movsd _X+8(%rip), %xmm1 movss _X(%rip), %xmm0 call _t xorl %ecx, %ecx movl %ecx, %eax addq $8, %rsp ret Notice there is another idiotic codegen issue that needs to be fixed asap: xorl %ecx, %ecx movl %ecx, %eax git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46850 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86/x86-64-gv-offset.ll')
-rw-r--r--test/CodeGen/X86/x86-64-gv-offset.ll14
1 files changed, 14 insertions, 0 deletions
diff --git a/test/CodeGen/X86/x86-64-gv-offset.ll b/test/CodeGen/X86/x86-64-gv-offset.ll
new file mode 100644
index 0000000000..b89e1b9536
--- /dev/null
+++ b/test/CodeGen/X86/x86-64-gv-offset.ll
@@ -0,0 +1,14 @@
+; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin | not grep lea
+
+ %struct.x = type { float, double }
+@X = global %struct.x { float 1.000000e+00, double 2.000000e+00 }, align 16 ; <%struct.x*> [#uses=2]
+
+define i32 @main() nounwind {
+entry:
+ %tmp2 = load float* getelementptr (%struct.x* @X, i32 0, i32 0), align 16 ; <float> [#uses=1]
+ %tmp4 = load double* getelementptr (%struct.x* @X, i32 0, i32 1), align 8 ; <double> [#uses=1]
+ tail call void @t( float %tmp2, double %tmp4 ) nounwind
+ ret i32 0
+}
+
+declare void @t(float, double)