forked from OSchip/llvm-project
[ConstantRange] Optimize APInt creation in getSignedMax/getSignedMin.
We were creating an APInt at the top of these methods that isn't always returned. For ranges wider than 64-bits this results in an allocation and deallocation when its not used. In getSignedMax we were creating Upper-1 to use in a compare and then creating it again for a return value. The compiler is unable to determine that these can be shared. So help it out and create the Upper-1 in a temporary that can be reused. This provides a little compile time improvement. llvm-svn: 300621
This commit is contained in:
parent
6a470bcb6d
commit
88c64f324f
|
@ -281,25 +281,25 @@ APInt ConstantRange::getUnsignedMin() const {
|
|||
APInt ConstantRange::getSignedMax() const {
|
||||
APInt SignedMax(APInt::getSignedMaxValue(getBitWidth()));
|
||||
if (!isWrappedSet()) {
|
||||
if (getLower().sle(getUpper() - 1))
|
||||
return getUpper() - 1;
|
||||
return SignedMax;
|
||||
APInt UpperMinusOne = getUpper() - 1;
|
||||
if (getLower().sle(UpperMinusOne))
|
||||
return UpperMinusOne;
|
||||
return APInt::getSignedMaxValue(getBitWidth());
|
||||
}
|
||||
if (getLower().isNegative() == getUpper().isNegative())
|
||||
return SignedMax;
|
||||
return APInt::getSignedMaxValue(getBitWidth());
|
||||
return getUpper() - 1;
|
||||
}
|
||||
|
||||
APInt ConstantRange::getSignedMin() const {
|
||||
APInt SignedMin(APInt::getSignedMinValue(getBitWidth()));
|
||||
if (!isWrappedSet()) {
|
||||
if (getLower().sle(getUpper() - 1))
|
||||
return getLower();
|
||||
return SignedMin;
|
||||
return APInt::getSignedMinValue(getBitWidth());
|
||||
}
|
||||
if ((getUpper() - 1).slt(getLower())) {
|
||||
if (getUpper() != SignedMin)
|
||||
return SignedMin;
|
||||
if (!getUpper().isMinSignedValue())
|
||||
return APInt::getSignedMinValue(getBitWidth());
|
||||
}
|
||||
return getLower();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue