Fix PR2296. Do not transform x86_sse2_storel_dq into a full-width store.
authorEvan Cheng <evan.cheng@apple.com>
Wed, 16 Jul 2008 07:28:14 +0000 (07:28 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 16 Jul 2008 07:28:14 +0000 (07:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53666 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp
test/Transforms/InstCombine/2008-07-16-sse2_storel_dq.ll [new file with mode: 0644]

index 743c0c1a302fbcc40b0178b57e969c95c07290a6..c35d92c28f07c3cf12208882f06b52f172d3cfde 100644 (file)
@@ -8646,7 +8646,6 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
   case Intrinsic::x86_sse_storeu_ps:
   case Intrinsic::x86_sse2_storeu_pd:
   case Intrinsic::x86_sse2_storeu_dq:
-  case Intrinsic::x86_sse2_storel_dq:
     // Turn X86 storeu -> store if the pointer is known aligned.
     if (GetOrEnforceKnownAlignment(II->getOperand(1), 16) >= 16) {
       const Type *OpPtrTy = 
diff --git a/test/Transforms/InstCombine/2008-07-16-sse2_storel_dq.ll b/test/Transforms/InstCombine/2008-07-16-sse2_storel_dq.ll
new file mode 100644 (file)
index 0000000..49e6cdd
--- /dev/null
@@ -0,0 +1,13 @@
+; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep {store }
+; PR2296
+
+@G = common global double 0.000000e+00, align 16
+
+define void @x(<2 x i64> %y) nounwind  {
+entry:
+       bitcast <2 x i64> %y to <4 x i32>
+       call void @llvm.x86.sse2.storel.dq( i8* bitcast (double* @G to i8*), <4 x i32> %0 ) nounwind 
+       ret void
+}
+
+declare void @llvm.x86.sse2.storel.dq(i8*, <4 x i32>) nounwind