Skip to content

Commit 56c7d9d

Browse files
committed
[InstCombine] Convert to using ConstantRange API
1 parent 3688da5 commit 56c7d9d

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3169,22 +3169,27 @@ Instruction *InstCombinerImpl::foldICmpAddConstant(ICmpInst &Cmp,
31693169
Builder.CreateAdd(X, ConstantInt::get(Ty, *C2 - C - 1)),
31703170
ConstantInt::get(Ty, ~C));
31713171

3172-
// zext(V) + C2 <u C -> V + trunc(C2) <u trunc(C) iff C2 s<0 && C s>0
3172+
// zext(V) + C2 pred C -> V + C3 pred' C4
31733173
Value *V;
3174-
if (Pred == ICmpInst::ICMP_ULT && match(X, m_ZExt(m_Value(V)))) {
3174+
if (match(X, m_ZExt(m_Value(V)))) {
31753175
Type *NewCmpTy = V->getType();
3176+
unsigned CmpBW = Ty->getScalarSizeInBits();
31763177
unsigned NewCmpBW = NewCmpTy->getScalarSizeInBits();
3177-
if (shouldChangeType(Ty, NewCmpTy) &&
3178-
C2->getSignificantBits() <= NewCmpBW &&
3179-
C.getSignificantBits() <= NewCmpBW) {
3180-
APInt TruncatedOffset = C2->trunc(NewCmpBW);
3181-
APInt TruncatedRHS = C.trunc(NewCmpBW);
3182-
if (TruncatedOffset.isNegative() && TruncatedRHS.isNonNegative()) {
3183-
Value *TruncatedOffsetV = ConstantInt::get(NewCmpTy, TruncatedOffset);
3184-
Value *TruncatedRV = ConstantInt::get(NewCmpTy, TruncatedRHS);
3185-
return new ICmpInst(ICmpInst::ICMP_ULT,
3186-
Builder.CreateAdd(V, TruncatedOffsetV),
3187-
TruncatedRV);
3178+
if (shouldChangeType(Ty, NewCmpTy)) {
3179+
if (auto ZExtCR = CR.exactIntersectWith(ConstantRange(
3180+
APInt::getZero(CmpBW), APInt::getOneBitSet(CmpBW, NewCmpBW)))) {
3181+
ConstantRange SrcCR = ZExtCR->truncate(NewCmpBW);
3182+
CmpInst::Predicate EquivPred;
3183+
APInt EquivInt;
3184+
APInt EquivOffset;
3185+
3186+
SrcCR.getEquivalentICmp(EquivPred, EquivInt, EquivOffset);
3187+
return new ICmpInst(
3188+
EquivPred,
3189+
EquivOffset.isZero()
3190+
? V
3191+
: Builder.CreateAdd(V, ConstantInt::get(NewCmpTy, EquivOffset)),
3192+
ConstantInt::get(NewCmpTy, EquivInt));
31883193
}
31893194
}
31903195
}

0 commit comments

Comments
 (0)