[llvm] [InstCombineCompares] Try to "strengthen" compares based on known bits. (PR #79405)
Mikhail Gudim via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 5 22:14:59 PST 2024
================
@@ -6100,6 +6100,95 @@ bool InstCombinerImpl::replacedSelectWithOperand(SelectInst *SI,
return false;
}
+// Try to "strengthen" the RHS of compare based on known bits.
+// For example, replace `icmp ugt %x, 14` with `icmp ugt %x, 15` when
+// it is known that the two least significant bits of `%x` is zero.
+static Instruction *strengthenICmpUsingKnownBits(ICmpInst &I,
+ KnownBits Op0Known,
+ KnownBits Op1Known,
+ unsigned BitWidth) {
+ if (!BitWidth)
+ return nullptr;
+ if (!(Op1Known.isConstant() && Op0Known.Zero.isMask()))
+ return nullptr;
+
+ Value *Op0 = I.getOperand(0);
+ ICmpInst::Predicate Pred = I.getPredicate();
+ Type *Ty = Op0->getType();
+ APInt RHSConst = Op1Known.getConstant();
+ bool TrueIfSigned = false;
+ // Don't break the SignBitCheck pattern;
+ if (InstCombiner::isSignBitCheck(Pred, RHSConst, TrueIfSigned))
+ return nullptr;
+
----------------
mgudim wrote:
I see, the `select` can only be simplified after inlining and combining it with `load`.
https://github.com/llvm/llvm-project/pull/79405
More information about the llvm-commits
mailing list