diff options
author | Filipe Cabecinhas <me@filcab.net> | 2014-06-22 17:21:37 +0000 |
---|---|---|
committer | Filipe Cabecinhas <me@filcab.net> | 2014-06-22 17:21:37 +0000 |
commit | 1af2dfd2744e04b4c85137f85c2a9d26e25533e8 (patch) | |
tree | b36f1050da7d5a5cde569f9e68db4044b5069fe0 /llvm/lib/Target | |
parent | 707e3ba37c858efcb67f5e8121ab46a028388c3a (diff) | |
download | bcm5719-llvm-1af2dfd2744e04b4c85137f85c2a9d26e25533e8.tar.gz bcm5719-llvm-1af2dfd2744e04b4c85137f85c2a9d26e25533e8.zip |
Fix PR20087 by using the source index when changing the vector load
llvm-svn: 211472
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 5cabd14064e..bc4168b20a7 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -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); } |