forked from OSchip/llvm-project
[ConstantRange] Implement getSignedMin/Max in a less complicated and faster way
Summary: As far as I can tell we should be able to implement these almost the same way we do unsigned, but using signed comparisons and checks for min signed value instead of min unsigned value. Reviewers: pete, davide, sanjoy Reviewed By: davide Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D33815 llvm-svn: 305607
This commit is contained in:
parent
288b3c9e69
commit
61e684adcc
|
@ -284,27 +284,14 @@ APInt ConstantRange::getUnsignedMin() const {
|
|||
}
|
||||
|
||||
APInt ConstantRange::getSignedMax() const {
|
||||
if (!isWrappedSet()) {
|
||||
APInt UpperMinusOne = getUpper() - 1;
|
||||
if (getLower().sle(UpperMinusOne))
|
||||
return UpperMinusOne;
|
||||
return APInt::getSignedMaxValue(getBitWidth());
|
||||
}
|
||||
if (getLower().isNegative() == getUpper().isNegative())
|
||||
if (isFullSet() || Lower.sgt(Upper))
|
||||
return APInt::getSignedMaxValue(getBitWidth());
|
||||
return getUpper() - 1;
|
||||
}
|
||||
|
||||
APInt ConstantRange::getSignedMin() const {
|
||||
if (!isWrappedSet()) {
|
||||
if (getLower().sle(getUpper() - 1))
|
||||
return getLower();
|
||||
if (isFullSet() || (Lower.sgt(Upper) && !getUpper().isMinSignedValue()))
|
||||
return APInt::getSignedMinValue(getBitWidth());
|
||||
}
|
||||
if ((getUpper() - 1).slt(getLower())) {
|
||||
if (!getUpper().isMinSignedValue())
|
||||
return APInt::getSignedMinValue(getBitWidth());
|
||||
}
|
||||
return getLower();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue