aboutsummaryrefslogtreecommitdiffstats
path: root/test/CodeGen/X86/2008-10-27-StackRealignment.ll
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-10-28 05:49:35 +0000
committerChris Lattner <sabre@nondot.org>2008-10-28 05:49:35 +0000
commit4002a1b6f1cb7c7db7965bd281fb29664fd6c816 (patch)
tree5a7bf8429810a521d763dda969ce626d9f382e3f /test/CodeGen/X86/2008-10-27-StackRealignment.ll
parentb3696d865e70c0153f82092d51999e5e55505427 (diff)
downloadexternal_llvm-4002a1b6f1cb7c7db7965bd281fb29664fd6c816.zip
external_llvm-4002a1b6f1cb7c7db7965bd281fb29664fd6c816.tar.gz
external_llvm-4002a1b6f1cb7c7db7965bd281fb29664fd6c816.tar.bz2
Fix a nasty miscompilation of 176.gcc on linux/x86 where we synthesized
a memset using 16-byte XMM stores, but where the stack realignment code didn't work. Until it does (PR2962) disable use of xmm regs in memcpy and memset formation for linux and other targets with insufficiently aligned stacks. This is part of PR2888 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58317 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86/2008-10-27-StackRealignment.ll')
-rw-r--r--test/CodeGen/X86/2008-10-27-StackRealignment.ll22
1 files changed, 22 insertions, 0 deletions
diff --git a/test/CodeGen/X86/2008-10-27-StackRealignment.ll b/test/CodeGen/X86/2008-10-27-StackRealignment.ll
new file mode 100644
index 0000000..d8b0e70
--- /dev/null
+++ b/test/CodeGen/X86/2008-10-27-StackRealignment.ll
@@ -0,0 +1,22 @@
+; Linux doesn't support stack realignment for functions with allocas (PR2888).
+; Until it does, we shouldn't use movaps to access the stack. On targets with
+; sufficiently aligned stack (e.g. darwin) we should.
+
+; RUN: llvm-as < %s | llc -mtriple=i386-pc-linux-gnu -mcpu=yonah | not grep movaps
+; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin9 -mcpu=yonah | grep movaps | count 2
+
+
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
+target triple = "i386-pc-linux-gnu"
+
+define void @foo(i32 %t) nounwind {
+ %tmp1210 = alloca i8, i32 32, align 4
+ call void @llvm.memset.i64(i8* %tmp1210, i8 0, i64 32, i32 4)
+
+ %x = alloca i8, i32 %t
+ call void @dummy(i8* %x)
+ ret void
+}
+
+declare void @dummy(i8* %x)
+declare void @llvm.memset.i64(i8*, i8, i64, i32) nounwind