mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 22:04:55 +00:00
Fix PR20087 by using the source index when changing the vector load
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211472 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fe755c57f8
commit
7798d5992a
@ -7805,12 +7805,13 @@ static SDValue getINSERTPS(ShuffleVectorSDNode *SVOp, SDLoc &dl,
|
||||
std::find_if(Mask.begin(), Mask.end(), FromV2Predicate) - Mask.begin();
|
||||
}
|
||||
|
||||
unsigned SrcIndex = Mask[DestIndex] % 4;
|
||||
if (MayFoldLoad(From)) {
|
||||
// Trivial case, when From comes from a load and is only used by the
|
||||
// shuffle. Make it use insertps from the vector that we need from that
|
||||
// load.
|
||||
SDValue NewLoad =
|
||||
NarrowVectorLoadToElement(cast<LoadSDNode>(From), DestIndex, DAG);
|
||||
NarrowVectorLoadToElement(cast<LoadSDNode>(From), SrcIndex, DAG);
|
||||
if (!NewLoad.getNode())
|
||||
return SDValue();
|
||||
|
||||
@ -7831,7 +7832,6 @@ static SDValue getINSERTPS(ShuffleVectorSDNode *SVOp, SDLoc &dl,
|
||||
}
|
||||
|
||||
// Vector-element-to-vector
|
||||
unsigned SrcIndex = Mask[DestIndex] % 4;
|
||||
SDValue InsertpsMask = DAG.getIntPtrConstant(DestIndex << 4 | SrcIndex << 6);
|
||||
return DAG.getNode(X86ISD::INSERTPS, dl, VT, To, From, InsertpsMask);
|
||||
}
|
||||
|
@ -703,3 +703,14 @@ define <4 x float> @insertps_with_undefs(<4 x float> %a, float* %b) {
|
||||
%result = shufflevector <4 x float> %a, <4 x float> %2, <4 x i32> <i32 4, i32 undef, i32 0, i32 7>
|
||||
ret <4 x float> %result
|
||||
}
|
||||
|
||||
; Test for a bug in X86ISelLowering.cpp:getINSERTPS where we were using
|
||||
; the destination index to change the load, instead of the source index.
|
||||
define <4 x float> @pr20087(<4 x float> %a, <4 x float> *%ptr) {
|
||||
; CHECK-LABEL: pr20087:
|
||||
; CHECK: insertps $48
|
||||
; CHECK: ret
|
||||
%load = load <4 x float> *%ptr
|
||||
%ret = shufflevector <4 x float> %load, <4 x float> %a, <4 x i32> <i32 4, i32 undef, i32 6, i32 2>
|
||||
ret <4 x float> %ret
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user