[llvm] b35f294 - [InstSimplify] Avoid use of ConstantExpr::getCast()
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 29 01:27:13 PDT 2023
Author: Nikita Popov
Date: 2023-09-29T10:23:40+02:00
New Revision: b35f2940e9315dd6f5e49a6fa49e4418d4e1b56e
URL: https://github.com/llvm/llvm-project/commit/b35f2940e9315dd6f5e49a6fa49e4418d4e1b56e
DIFF: https://github.com/llvm/llvm-project/commit/b35f2940e9315dd6f5e49a6fa49e4418d4e1b56e.diff
LOG: [InstSimplify] Avoid use of ConstantExpr::getCast()
Use the constant folding API instead.
One of these uses actually improves results, because the bitcast
expression gets folded away.
Added:
Modified:
llvm/lib/Analysis/InstructionSimplify.cpp
llvm/test/Transforms/InstSimplify/AndOrXor.ll
Removed:
################################################################################
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index 2a1218a683ca83e..bcecab1525b9912 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -2019,7 +2019,8 @@ static Value *simplifyAndOrOfCmps(const SimplifyQuery &Q, Value *Op0,
// If we looked through casts, we can only handle a constant simplification
// because we are not allowed to create a cast instruction here.
if (auto *C = dyn_cast<Constant>(V))
- return ConstantExpr::getCast(Cast0->getOpcode(), C, Cast0->getType());
+ return ConstantFoldCastOperand(Cast0->getOpcode(), C, Cast0->getType(),
+ Q.DL);
return nullptr;
}
@@ -3876,9 +3877,15 @@ static Value *simplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS,
// Compute the constant that would happen if we truncated to SrcTy then
// reextended to DstTy.
- Constant *Trunc = ConstantExpr::getTrunc(C, SrcTy);
- Constant *RExt = ConstantExpr::getCast(CastInst::ZExt, Trunc, DstTy);
- Constant *AnyEq = ConstantExpr::getICmp(ICmpInst::ICMP_EQ, RExt, C);
+ Constant *Trunc =
+ ConstantFoldCastOperand(Instruction::Trunc, C, SrcTy, Q.DL);
+ assert(Trunc && "Constant-fold of ImmConstant should not fail");
+ Constant *RExt =
+ ConstantFoldCastOperand(CastInst::ZExt, Trunc, DstTy, Q.DL);
+ assert(RExt && "Constant-fold of ImmConstant should not fail");
+ Constant *AnyEq =
+ ConstantFoldCompareInstOperands(ICmpInst::ICMP_EQ, RExt, C, Q.DL);
+ assert(AnyEq && "Constant-fold of ImmConstant should not fail");
// If the re-extended constant didn't change any of the elements then
// this is effectively also a case of comparing two zero-extended
@@ -3947,9 +3954,15 @@ static Value *simplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS,
// Compute the constant that would happen if we truncated to SrcTy then
// reextended to DstTy.
- Constant *Trunc = ConstantExpr::getTrunc(C, SrcTy);
- Constant *RExt = ConstantExpr::getCast(CastInst::SExt, Trunc, DstTy);
- Constant *AnyEq = ConstantExpr::getICmp(ICmpInst::ICMP_EQ, RExt, C);
+ Constant *Trunc =
+ ConstantFoldCastOperand(Instruction::Trunc, C, SrcTy, Q.DL);
+ assert(Trunc && "Constant-fold of ImmConstant should not fail");
+ Constant *RExt =
+ ConstantFoldCastOperand(CastInst::SExt, Trunc, DstTy, Q.DL);
+ assert(RExt && "Constant-fold of ImmConstant should not fail");
+ Constant *AnyEq =
+ ConstantFoldCompareInstOperands(ICmpInst::ICMP_EQ, RExt, C, Q.DL);
+ assert(AnyEq && "Constant-fold of ImmConstant should not fail");
// If the re-extended constant didn't change then this is effectively
// also a case of comparing two sign-extended values.
diff --git a/llvm/test/Transforms/InstSimplify/AndOrXor.ll b/llvm/test/Transforms/InstSimplify/AndOrXor.ll
index 1c700e3c2c3070e..494b6bcd2b66d54 100644
--- a/llvm/test/Transforms/InstSimplify/AndOrXor.ll
+++ b/llvm/test/Transforms/InstSimplify/AndOrXor.ll
@@ -523,7 +523,7 @@ define i32 @or_of_zexted_icmps(i32 %i) {
define i3 @or_of_bitcast_icmps_vec(<3 x i65> %i) {
; CHECK-LABEL: @or_of_bitcast_icmps_vec(
-; CHECK-NEXT: ret i3 bitcast (<3 x i1> <i1 true, i1 true, i1 true> to i3)
+; CHECK-NEXT: ret i3 -1
;
%cmp0 = icmp sge <3 x i65> %i, zeroinitializer
%conv0 = bitcast <3 x i1> %cmp0 to i3
More information about the llvm-commits
mailing list