forked from OSchip/llvm-project
[ConstantRange] Exclude full set from isSignWrappedSet()
Split off from D59749. This uses a simpler and more efficient implementation of isSignWrappedSet(), and considers full sets as non-wrapped, to be consistent with isWrappedSet(). Otherwise the behavior is unchanged. There are currently only two users of this function and both already check for isFullSet() || isSignWrappedSet(), so this is not going to cause a change in overall behavior. Differential Revision: https://reviews.llvm.org/D59848 llvm-svn: 357039
This commit is contained in:
parent
db8a742206
commit
e6eef49f05
|
@ -167,8 +167,10 @@ public:
|
|||
/// For example: [100, 8).
|
||||
bool isWrappedSet() const;
|
||||
|
||||
/// Return true if this set wraps around the INT_MIN of
|
||||
/// its bitwidth. For example: i8 [120, 140).
|
||||
/// Return true if this set wraps around the signed domain. Special cases:
|
||||
/// * Empty set: Not wrapped.
|
||||
/// * Full set: Not wrapped.
|
||||
/// * [X, SignedMin) == [X, SignedMax]: Not wrapped.
|
||||
bool isSignWrappedSet() const;
|
||||
|
||||
/// Return true if the specified value is in the set.
|
||||
|
|
|
@ -349,8 +349,7 @@ bool ConstantRange::isWrappedSet() const {
|
|||
}
|
||||
|
||||
bool ConstantRange::isSignWrappedSet() const {
|
||||
return contains(APInt::getSignedMaxValue(getBitWidth())) &&
|
||||
contains(APInt::getSignedMinValue(getBitWidth()));
|
||||
return Lower.sgt(Upper) && !Upper.isMinSignedValue();
|
||||
}
|
||||
|
||||
APInt ConstantRange::getSetSize() const {
|
||||
|
|
|
@ -161,7 +161,7 @@ TEST_F(ConstantRangeTest, GetMinsAndMaxes) {
|
|||
}
|
||||
|
||||
TEST_F(ConstantRangeTest, SignWrapped) {
|
||||
EXPECT_TRUE(Full.isSignWrappedSet());
|
||||
EXPECT_FALSE(Full.isSignWrappedSet());
|
||||
EXPECT_FALSE(Empty.isSignWrappedSet());
|
||||
EXPECT_FALSE(One.isSignWrappedSet());
|
||||
EXPECT_FALSE(Some.isSignWrappedSet());
|
||||
|
|
Loading…
Reference in New Issue