return getEmpty(W);
return ConstantRange(APInt::getSignedMinValue(W), std::move(SMax));
}
- case CmpInst::ICMP_ULE: {
- APInt UMax(CR.getUnsignedMax());
- if (UMax.isMaxValue())
- return getFull(W);
- return ConstantRange(APInt::getMinValue(W), std::move(UMax) + 1);
- }
- case CmpInst::ICMP_SLE: {
- APInt SMax(CR.getSignedMax());
- if (SMax.isMaxSignedValue())
- return getFull(W);
- return ConstantRange(APInt::getSignedMinValue(W), std::move(SMax) + 1);
- }
+ case CmpInst::ICMP_ULE:
+ return getNonEmpty(APInt::getMinValue(W), CR.getUnsignedMax() + 1);
+ case CmpInst::ICMP_SLE:
+ return getNonEmpty(APInt::getSignedMinValue(W), CR.getSignedMax() + 1);
case CmpInst::ICMP_UGT: {
APInt UMin(CR.getUnsignedMin());
if (UMin.isMaxValue())
return getEmpty(W);
return ConstantRange(std::move(SMin) + 1, APInt::getSignedMinValue(W));
}
- case CmpInst::ICMP_UGE: {
- APInt UMin(CR.getUnsignedMin());
- if (UMin.isMinValue())
- return getFull(W);
- return ConstantRange(std::move(UMin), APInt::getNullValue(W));
- }
- case CmpInst::ICMP_SGE: {
- APInt SMin(CR.getSignedMin());
- if (SMin.isMinSignedValue())
- return getFull(W);
- return ConstantRange(std::move(SMin), APInt::getSignedMinValue(W));
- }
+ case CmpInst::ICMP_UGE:
+ return getNonEmpty(CR.getUnsignedMin(), APInt::getNullValue(W));
+ case CmpInst::ICMP_SGE:
+ return getNonEmpty(CR.getSignedMin(), APInt::getSignedMinValue(W));
}
}
return getEmpty();
APInt NewL = APIntOps::smax(getSignedMin(), Other.getSignedMin());
APInt NewU = APIntOps::smax(getSignedMax(), Other.getSignedMax()) + 1;
- if (NewU == NewL)
- return getFull();
- return ConstantRange(std::move(NewL), std::move(NewU));
+ return getNonEmpty(std::move(NewL), std::move(NewU));
}
ConstantRange
return getEmpty();
APInt NewL = APIntOps::umax(getUnsignedMin(), Other.getUnsignedMin());
APInt NewU = APIntOps::umax(getUnsignedMax(), Other.getUnsignedMax()) + 1;
- if (NewU == NewL)
- return getFull();
- return ConstantRange(std::move(NewL), std::move(NewU));
+ return getNonEmpty(std::move(NewL), std::move(NewU));
}
ConstantRange
return getEmpty();
APInt NewL = APIntOps::smin(getSignedMin(), Other.getSignedMin());
APInt NewU = APIntOps::smin(getSignedMax(), Other.getSignedMax()) + 1;
- if (NewU == NewL)
- return getFull();
- return ConstantRange(std::move(NewL), std::move(NewU));
+ return getNonEmpty(std::move(NewL), std::move(NewU));
}
ConstantRange
return getEmpty();
APInt NewL = APIntOps::umin(getUnsignedMin(), Other.getUnsignedMin());
APInt NewU = APIntOps::umin(getUnsignedMax(), Other.getUnsignedMax()) + 1;
- if (NewU == NewL)
- return getFull();
- return ConstantRange(std::move(NewL), std::move(NewU));
+ return getNonEmpty(std::move(NewL), std::move(NewU));
}
ConstantRange
}
APInt Upper = getUnsignedMax().udiv(RHS_umin) + 1;
-
- // If the LHS is Full and the RHS is a wrapped interval containing 1 then
- // this could occur.
- if (Lower == Upper)
- return getFull();
-
- return ConstantRange(std::move(Lower), std::move(Upper));
+ return getNonEmpty(std::move(Lower), std::move(Upper));
}
ConstantRange
// TODO: replace this with something less conservative
APInt umin = APIntOps::umin(Other.getUnsignedMax(), getUnsignedMax());
- if (umin.isAllOnesValue())
- return getFull();
- return ConstantRange(APInt::getNullValue(getBitWidth()), std::move(umin) + 1);
+ return getNonEmpty(APInt::getNullValue(getBitWidth()), std::move(umin) + 1);
}
ConstantRange
// TODO: replace this with something less conservative
APInt umax = APIntOps::umax(getUnsignedMin(), Other.getUnsignedMin());
- if (umax.isNullValue())
- return getFull();
- return ConstantRange(std::move(umax), APInt::getNullValue(getBitWidth()));
+ return getNonEmpty(std::move(umax), APInt::getNullValue(getBitWidth()));
}
ConstantRange
APInt max = getUnsignedMax().lshr(Other.getUnsignedMin()) + 1;
APInt min = getUnsignedMin().lshr(Other.getUnsignedMax());
- if (min == max)
- return getFull();
-
- return ConstantRange(std::move(min), std::move(max));
+ return getNonEmpty(std::move(min), std::move(max));
}
ConstantRange
min = NegMin;
max = PosMax;
}
- if (min == max)
- return getFull();
-
- return ConstantRange(std::move(min), std::move(max));
+ return getNonEmpty(std::move(min), std::move(max));
}
ConstantRange ConstantRange::inverse() const {