diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h index 5fa3620791856..58bde3e927466 100644 --- a/llvm/include/llvm/IR/IRBuilder.h +++ b/llvm/include/llvm/IR/IRBuilder.h @@ -2431,6 +2431,13 @@ class IRBuilderBase { return Insert(new ShuffleVectorInst(V1, V2, Mask), Name); } + /// Create a unary shuffle. The second vector operand of the IR instruction + /// is undefined. + Value *CreateShuffleVector(Value *V, ArrayRef Mask, + const Twine &Name = "") { + return CreateShuffleVector(V, UndefValue::get(V->getType()), Mask, Name); + } + Value *CreateExtractValue(Value *Agg, ArrayRef Idxs, const Twine &Name = "") { diff --git a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp index 1bac16b92a9d9..816d44fb2cb17 100644 --- a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp +++ b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp @@ -154,7 +154,7 @@ bool VectorCombine::vectorizeLoadInsert(Instruction &I) { SmallVector Mask(OutputNumElts, UndefMaskElem); for (unsigned i = 0; i < OutputNumElts && i < MinVecNumElts; ++i) Mask[i] = i; - VecLd = Builder.CreateShuffleVector(VecLd, UndefValue::get(MinVecTy), Mask); + VecLd = Builder.CreateShuffleVector(VecLd, Mask); } replaceValue(I, *VecLd); ++NumVecLoad; @@ -304,8 +304,7 @@ static Value *createShiftShuffle(Value *Vec, unsigned OldIndex, auto *VecTy = cast(Vec->getType()); SmallVector ShufMask(VecTy->getNumElements(), UndefMaskElem); ShufMask[NewIndex] = OldIndex; - Value *Undef = UndefValue::get(VecTy); - return Builder.CreateShuffleVector(Vec, Undef, ShufMask, "shift"); + return Builder.CreateShuffleVector(Vec, ShufMask, "shift"); } /// Given an extract element instruction with constant index operand, shuffle @@ -475,8 +474,7 @@ bool VectorCombine::foldBitcastShuf(Instruction &I) { // bitcast (shuf V, MaskC) --> shuf (bitcast V), MaskC' ++NumShufOfBitcast; Value *CastV = Builder.CreateBitCast(V, DestTy); - Value *Shuf = - Builder.CreateShuffleVector(CastV, UndefValue::get(DestTy), NewMask); + Value *Shuf = Builder.CreateShuffleVector(CastV, NewMask); replaceValue(I, *Shuf); return true; }