[llvm] 1e6b240 - [IRBuilder][VectorCombine] make and use a convenience function for unary shuffle; NFC
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 21 10:49:13 PDT 2020
Author: Sanjay Patel
Date: 2020-09-21T13:47:01-04:00
New Revision: 1e6b240d7d336a36856268db5349468560e28a0e
URL: https://github.com/llvm/llvm-project/commit/1e6b240d7d336a36856268db5349468560e28a0e
DIFF: https://github.com/llvm/llvm-project/commit/1e6b240d7d336a36856268db5349468560e28a0e.diff
LOG: [IRBuilder][VectorCombine] make and use a convenience function for unary shuffle; NFC
This reduces code duplication for common construct.
Follow-ups can use this in SLP, LoopVectorizer, and other passes.
Added:
Modified:
llvm/include/llvm/IR/IRBuilder.h
llvm/lib/Transforms/Vectorize/VectorCombine.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h
index 5fa362079185..58bde3e92746 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<int> Mask,
+ const Twine &Name = "") {
+ return CreateShuffleVector(V, UndefValue::get(V->getType()), Mask, Name);
+ }
+
Value *CreateExtractValue(Value *Agg,
ArrayRef<unsigned> Idxs,
const Twine &Name = "") {
diff --git a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
index 1bac16b92a9d..816d44fb2cb1 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<int, 16> 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<FixedVectorType>(Vec->getType());
SmallVector<int, 32> 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;
}
More information about the llvm-commits
mailing list