mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Add an inverse() method to ConstantRange.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110504 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
dbac071050
commit
9773e45a1e
@ -232,6 +232,9 @@ public:
|
|||||||
/// from a logical right shift of a value in this range by the Amount value.
|
/// from a logical right shift of a value in this range by the Amount value.
|
||||||
ConstantRange lshr(const ConstantRange &Amount) const;
|
ConstantRange lshr(const ConstantRange &Amount) const;
|
||||||
|
|
||||||
|
/// inverse - Return a new range that is the logical not of the current set.
|
||||||
|
ConstantRange inverse() const;
|
||||||
|
|
||||||
/// print - Print out the bounds to a stream...
|
/// print - Print out the bounds to a stream...
|
||||||
///
|
///
|
||||||
void print(raw_ostream &OS) const;
|
void print(raw_ostream &OS) const;
|
||||||
|
@ -655,6 +655,17 @@ ConstantRange::lshr(const ConstantRange &Amount) const {
|
|||||||
return ConstantRange(min, max);
|
return ConstantRange(min, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ConstantRange ConstantRange::inverse() const {
|
||||||
|
if (isFullSet()) {
|
||||||
|
return ConstantRange(APInt::getNullValue(Lower.getBitWidth()),
|
||||||
|
APInt::getNullValue(Lower.getBitWidth()));
|
||||||
|
} else if (isEmptySet()) {
|
||||||
|
return ConstantRange(APInt::getAllOnesValue(Lower.getBitWidth()),
|
||||||
|
APInt::getAllOnesValue(Lower.getBitWidth()));
|
||||||
|
}
|
||||||
|
return ConstantRange(Upper, Lower);
|
||||||
|
}
|
||||||
|
|
||||||
/// print - Print out the bounds to a stream...
|
/// print - Print out the bounds to a stream...
|
||||||
///
|
///
|
||||||
void ConstantRange::print(raw_ostream &OS) const {
|
void ConstantRange::print(raw_ostream &OS) const {
|
||||||
|
@ -33,6 +33,7 @@ ConstantRange ConstantRangeTest::Wrap(APInt(16, 0xaaa), APInt(16, 0xa));
|
|||||||
TEST_F(ConstantRangeTest, Basics) {
|
TEST_F(ConstantRangeTest, Basics) {
|
||||||
EXPECT_TRUE(Full.isFullSet());
|
EXPECT_TRUE(Full.isFullSet());
|
||||||
EXPECT_FALSE(Full.isEmptySet());
|
EXPECT_FALSE(Full.isEmptySet());
|
||||||
|
EXPECT_TRUE(Full.inverse().isEmptySet());
|
||||||
EXPECT_FALSE(Full.isWrappedSet());
|
EXPECT_FALSE(Full.isWrappedSet());
|
||||||
EXPECT_TRUE(Full.contains(APInt(16, 0x0)));
|
EXPECT_TRUE(Full.contains(APInt(16, 0x0)));
|
||||||
EXPECT_TRUE(Full.contains(APInt(16, 0x9)));
|
EXPECT_TRUE(Full.contains(APInt(16, 0x9)));
|
||||||
@ -42,6 +43,7 @@ TEST_F(ConstantRangeTest, Basics) {
|
|||||||
|
|
||||||
EXPECT_FALSE(Empty.isFullSet());
|
EXPECT_FALSE(Empty.isFullSet());
|
||||||
EXPECT_TRUE(Empty.isEmptySet());
|
EXPECT_TRUE(Empty.isEmptySet());
|
||||||
|
EXPECT_TRUE(Empty.inverse().isFullSet());
|
||||||
EXPECT_FALSE(Empty.isWrappedSet());
|
EXPECT_FALSE(Empty.isWrappedSet());
|
||||||
EXPECT_FALSE(Empty.contains(APInt(16, 0x0)));
|
EXPECT_FALSE(Empty.contains(APInt(16, 0x0)));
|
||||||
EXPECT_FALSE(Empty.contains(APInt(16, 0x9)));
|
EXPECT_FALSE(Empty.contains(APInt(16, 0x9)));
|
||||||
@ -57,6 +59,7 @@ TEST_F(ConstantRangeTest, Basics) {
|
|||||||
EXPECT_TRUE(One.contains(APInt(16, 0xa)));
|
EXPECT_TRUE(One.contains(APInt(16, 0xa)));
|
||||||
EXPECT_FALSE(One.contains(APInt(16, 0xaa9)));
|
EXPECT_FALSE(One.contains(APInt(16, 0xaa9)));
|
||||||
EXPECT_FALSE(One.contains(APInt(16, 0xaaa)));
|
EXPECT_FALSE(One.contains(APInt(16, 0xaaa)));
|
||||||
|
EXPECT_FALSE(One.inverse().contains(APInt(16, 0xa)));
|
||||||
|
|
||||||
EXPECT_FALSE(Some.isFullSet());
|
EXPECT_FALSE(Some.isFullSet());
|
||||||
EXPECT_FALSE(Some.isEmptySet());
|
EXPECT_FALSE(Some.isEmptySet());
|
||||||
|
Loading…
Reference in New Issue
Block a user