Fixed shuffle optimizations to handle non power of 2 vectors
authorMon P Wang <wangmp@apple.com>
Wed, 20 Aug 2008 02:23:25 +0000 (02:23 +0000)
committerMon P Wang <wangmp@apple.com>
Wed, 20 Aug 2008 02:23:25 +0000 (02:23 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55035 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index a517d941c9a9614dc7aaa63cc3d9ffed371ec545..403d6aad3b164d80076e68e04cbcf9eb0ac7744e 100644 (file)
@@ -11106,11 +11106,11 @@ static bool CollectSingleShuffleElements(Value *V, Value *LHS, Value *RHS,
           if (CollectSingleShuffleElements(VecOp, LHS, RHS, Mask)) {
             // If so, update the mask to reflect the inserted value.
             if (EI->getOperand(0) == LHS) {
-              Mask[InsertedIdx & (NumElts-1)] = 
+              Mask[InsertedIdx % NumElts] = 
                  ConstantInt::get(Type::Int32Ty, ExtractedIdx);
             } else {
               assert(EI->getOperand(0) == RHS);
-              Mask[InsertedIdx & (NumElts-1)] = 
+              Mask[InsertedIdx % NumElts] = 
                 ConstantInt::get(Type::Int32Ty, ExtractedIdx+NumElts);
               
             }
@@ -11159,7 +11159,7 @@ static Value *CollectShuffleElements(Value *V, std::vector<Constant*> &Mask,
         if (EI->getOperand(0) == RHS || RHS == 0) {
           RHS = EI->getOperand(0);
           Value *V = CollectShuffleElements(VecOp, Mask, RHS);
-          Mask[InsertedIdx & (NumElts-1)] = 
+          Mask[InsertedIdx % NumElts] = 
             ConstantInt::get(Type::Int32Ty, NumElts+ExtractedIdx);
           return V;
         }
@@ -11313,7 +11313,7 @@ Instruction *InstCombiner::visitShuffleVectorInst(ShuffleVectorInst &SVI) {
           Mask[i] = 2*e;     // Turn into undef.
           Elts.push_back(UndefValue::get(Type::Int32Ty));
         } else {
-          Mask[i] &= (e-1);  // Force to LHS.
+          Mask[i] = Mask[i] % e;  // Force to LHS.
           Elts.push_back(ConstantInt::get(Type::Int32Ty, Mask[i]));
         }
       }