forked from OSchip/llvm-project
[ConstantRange] Support zero size in isSizeLargerThan()
From an API perspective, it does not make a lot of sense that 0 is not a valid argument to this function. Add the exact check needed to support it.
This commit is contained in:
parent
d09a21a0b3
commit
cf71a5ea8f
|
@ -381,11 +381,10 @@ ConstantRange::isSizeStrictlySmallerThan(const ConstantRange &Other) const {
|
|||
|
||||
bool
|
||||
ConstantRange::isSizeLargerThan(uint64_t MaxSize) const {
|
||||
assert(MaxSize && "MaxSize can't be 0.");
|
||||
// If this a full set, we need special handling to avoid needing an extra bit
|
||||
// to represent the size.
|
||||
if (isFullSet())
|
||||
return APInt::getMaxValue(getBitWidth()).ugt(MaxSize - 1);
|
||||
return MaxSize == 0 || APInt::getMaxValue(getBitWidth()).ugt(MaxSize - 1);
|
||||
|
||||
return (Upper - Lower).ugt(MaxSize);
|
||||
}
|
||||
|
|
|
@ -2594,4 +2594,15 @@ TEST_F(ConstantRangeTest, getEquivalentPredWithFlippedSignedness) {
|
|||
}
|
||||
}
|
||||
|
||||
TEST_F(ConstantRangeTest, isSizeLargerThan) {
|
||||
EXPECT_FALSE(Empty.isSizeLargerThan(0));
|
||||
|
||||
EXPECT_TRUE(Full.isSizeLargerThan(0));
|
||||
EXPECT_TRUE(Full.isSizeLargerThan(65535));
|
||||
EXPECT_FALSE(Full.isSizeLargerThan(65536));
|
||||
|
||||
EXPECT_TRUE(One.isSizeLargerThan(0));
|
||||
EXPECT_FALSE(One.isSizeLargerThan(1));
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
|
Loading…
Reference in New Issue