[llvm] 0d821b2 - [InstSimplify] Generalize fold for icmp ugt/ule (pow2 << X), signmask
Yingwei Zheng via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 24 09:08:05 PDT 2023
Author: Yingwei Zheng
Date: 2023-09-25T00:07:20+08:00
New Revision: 0d821b22e01b8205b680ca302caeb6516611ecf8
URL: https://github.com/llvm/llvm-project/commit/0d821b22e01b8205b680ca302caeb6516611ecf8
DIFF: https://github.com/llvm/llvm-project/commit/0d821b22e01b8205b680ca302caeb6516611ecf8.diff
LOG: [InstSimplify] Generalize fold for icmp ugt/ule (pow2 << X), signmask
Alive2: https://alive2.llvm.org/ce/z/wZ41t7
Added:
Modified:
llvm/lib/Analysis/InstructionSimplify.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index d8aa614cae53b10..552c0824713139a 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -3410,10 +3410,10 @@ static Value *simplifyICmpWithBinOp(CmpInst::Predicate Pred, Value *LHS,
}
}
- // TODO: This is overly constrained. LHS can be any power-of-2.
- // (1 << X) >u 0x8000 --> false
- // (1 << X) <=u 0x8000 --> true
- if (match(LHS, m_Shl(m_One(), m_Value())) && match(RHS, m_SignMask())) {
+ // If C is a power-of-2:
+ // (C << X) >u 0x8000 --> false
+ // (C << X) <=u 0x8000 --> true
+ if (match(LHS, m_Shl(m_Power2(), m_Value())) && match(RHS, m_SignMask())) {
if (Pred == ICmpInst::ICMP_UGT)
return ConstantInt::getFalse(getCompareTy(RHS));
if (Pred == ICmpInst::ICMP_ULE)
More information about the llvm-commits
mailing list