Fix PR2296. Do not transform x86_sse2_storel_dq into a full-width store.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53666 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng 2008-07-16 07:28:14 +00:00
parent 817a6a9eaa
commit be8efa54b6
2 changed files with 13 additions and 1 deletions

View File

@ -8646,7 +8646,6 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
case Intrinsic::x86_sse_storeu_ps: case Intrinsic::x86_sse_storeu_ps:
case Intrinsic::x86_sse2_storeu_pd: case Intrinsic::x86_sse2_storeu_pd:
case Intrinsic::x86_sse2_storeu_dq: case Intrinsic::x86_sse2_storeu_dq:
case Intrinsic::x86_sse2_storel_dq:
// Turn X86 storeu -> store if the pointer is known aligned. // Turn X86 storeu -> store if the pointer is known aligned.
if (GetOrEnforceKnownAlignment(II->getOperand(1), 16) >= 16) { if (GetOrEnforceKnownAlignment(II->getOperand(1), 16) >= 16) {
const Type *OpPtrTy = const Type *OpPtrTy =

View File

@ -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