[llvm] 8391f40 - [InstCombine] Avoid uses of ConstantExpr::getLShr()
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 10 06:53:17 PST 2023
Author: Nikita Popov
Date: 2023-11-10T15:50:42+01:00
New Revision: 8391f405cb9cceb32abc76acf2aa47251a0da173
URL: https://github.com/llvm/llvm-project/commit/8391f405cb9cceb32abc76acf2aa47251a0da173
DIFF: https://github.com/llvm/llvm-project/commit/8391f405cb9cceb32abc76acf2aa47251a0da173.diff
LOG: [InstCombine] Avoid uses of ConstantExpr::getLShr()
Use the constant folding API instead.
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
llvm/lib/Transforms/InstCombine/InstCombineShifts.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
index c59cf5a2a86ef44..9f59fb0939a3229 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
@@ -2132,9 +2132,12 @@ static bool collectInsertionElements(Value *V, unsigned Shift,
Type *ElementIntTy = IntegerType::get(C->getContext(), ElementSize);
for (unsigned i = 0; i != NumElts; ++i) {
- unsigned ShiftI = Shift+i*ElementSize;
- Constant *Piece = ConstantExpr::getLShr(C, ConstantInt::get(C->getType(),
- ShiftI));
+ unsigned ShiftI = Shift + i * ElementSize;
+ Constant *Piece = ConstantFoldBinaryInstruction(
+ Instruction::LShr, C, ConstantInt::get(C->getType(), ShiftI));
+ if (!Piece)
+ return false;
+
Piece = ConstantExpr::getTrunc(Piece, ElementIntTy);
if (!collectInsertionElements(Piece, ShiftI, Elements, VecEltTy,
isBigEndian))
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineShifts.cpp b/llvm/lib/Transforms/InstCombine/InstCombineShifts.cpp
index e178f9536b69f21..aa249f63d9e5c44 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineShifts.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineShifts.cpp
@@ -299,8 +299,10 @@ dropRedundantMaskingOfLeftShiftInput(BinaryOperator *OuterShift,
// And compute the mask as usual: (-1 l>> (NumHighBitsToClear))
auto *ExtendedAllOnes = ConstantExpr::getAllOnesValue(ExtendedTy);
- NewMask =
- ConstantExpr::getLShr(ExtendedAllOnes, ExtendedNumHighBitsToClear);
+ NewMask = ConstantFoldBinaryOpOperands(Instruction::LShr, ExtendedAllOnes,
+ ExtendedNumHighBitsToClear, Q.DL);
+ if (!NewMask)
+ return nullptr;
} else
return nullptr; // Don't know anything about this pattern.
More information about the llvm-commits
mailing list