[llvm] 0b5e0fb - [InstCombine] Avoid some uses of ConstantExpr::getIntegerCast() (NFC)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 1 03:42:15 PDT 2023
Author: Nikita Popov
Date: 2023-11-01T11:41:50+01:00
New Revision: 0b5e0fb62df05ecf3f803e128b1cda3fa23061b0
URL: https://github.com/llvm/llvm-project/commit/0b5e0fb62df05ecf3f803e128b1cda3fa23061b0
DIFF: https://github.com/llvm/llvm-project/commit/0b5e0fb62df05ecf3f803e128b1cda3fa23061b0.diff
LOG: [InstCombine] Avoid some uses of ConstantExpr::getIntegerCast() (NFC)
Use IRBuilder or ConstantFolding instead.
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
index 8acdb7ef4545b3c..7e585e9166247cd 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
@@ -2539,10 +2539,9 @@ Instruction *InstCombinerImpl::visitCallInst(CallInst &CI) {
VectorType *NewVT = cast<VectorType>(II->getType());
if (Constant *CV0 = dyn_cast<Constant>(Arg0)) {
if (Constant *CV1 = dyn_cast<Constant>(Arg1)) {
- CV0 = ConstantExpr::getIntegerCast(CV0, NewVT, /*isSigned=*/!Zext);
- CV1 = ConstantExpr::getIntegerCast(CV1, NewVT, /*isSigned=*/!Zext);
-
- return replaceInstUsesWith(CI, ConstantExpr::getMul(CV0, CV1));
+ Value *V0 = Builder.CreateIntCast(CV0, NewVT, /*isSigned=*/!Zext);
+ Value *V1 = Builder.CreateIntCast(CV1, NewVT, /*isSigned=*/!Zext);
+ return replaceInstUsesWith(CI, Builder.CreateMul(V0, V1));
}
// Couldn't simplify - canonicalize constant to the RHS.
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
index 2127000c4b780b2..55f410155e46a99 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
@@ -582,13 +582,15 @@ Instruction *InstCombinerImpl::narrowBinOp(TruncInst &Trunc) {
APInt(SrcWidth, MaxShiftAmt)))) {
auto *OldShift = cast<Instruction>(Trunc.getOperand(0));
bool IsExact = OldShift->isExact();
- auto *ShAmt = ConstantExpr::getIntegerCast(C, A->getType(), true);
- ShAmt = Constant::mergeUndefsWith(ShAmt, C);
- Value *Shift =
- OldShift->getOpcode() == Instruction::AShr
- ? Builder.CreateAShr(A, ShAmt, OldShift->getName(), IsExact)
- : Builder.CreateLShr(A, ShAmt, OldShift->getName(), IsExact);
- return CastInst::CreateTruncOrBitCast(Shift, DestTy);
+ if (Constant *ShAmt = ConstantFoldIntegerCast(C, A->getType(),
+ /*IsSigned*/ true, DL)) {
+ ShAmt = Constant::mergeUndefsWith(ShAmt, C);
+ Value *Shift =
+ OldShift->getOpcode() == Instruction::AShr
+ ? Builder.CreateAShr(A, ShAmt, OldShift->getName(), IsExact)
+ : Builder.CreateLShr(A, ShAmt, OldShift->getName(), IsExact);
+ return CastInst::CreateTruncOrBitCast(Shift, DestTy);
+ }
}
}
break;
More information about the llvm-commits
mailing list