Fix for wrong instcombine on vector insert/extract
[oota-llvm.git] / lib / Transforms / InstCombine / InstCombineVectorOps.cpp
index 4f71db1a4b097cf363e197459b61c707ee5185d0..bbfad8693ebc3b3ed8ccd0c030fc07f9005de93c 100644 (file)
@@ -336,6 +336,10 @@ static Value *CollectShuffleElements(Value *V, SmallVectorImpl<Constant*> &Mask,
 
         if (VecOp == RHS) {
           Value *V = CollectShuffleElements(EI->getOperand(0), Mask, RHS);
+          // Update Mask to reflect that `ScalarOp' has been inserted at
+          // position `InsertedIdx' within the vector returned by IEI.
+          Mask[InsertedIdx % NumElts] = Mask[ExtractedIdx];
+
           // Everything but the extracted element is replaced with the RHS.
           for (unsigned i = 0; i != NumElts; ++i) {
             if (i != InsertedIdx)