diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2011-06-22 21:13:46 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2011-06-22 21:13:46 +0000 |
commit | e6240e8b83e9bd60e622650e9e801ebc957172b4 (patch) | |
tree | 0df58ebda06bf4ac235f9598dc73c8771d85cdaa | |
parent | f78b5952c30b69c764ff48270eb56540a3fa56f3 (diff) | |
download | external_llvm-e6240e8b83e9bd60e622650e9e801ebc957172b4.zip external_llvm-e6240e8b83e9bd60e622650e9e801ebc957172b4.tar.gz external_llvm-e6240e8b83e9bd60e622650e9e801ebc957172b4.tar.bz2 |
Fix the implementation of ConstantRange::sub(ConstantRange). Patch by Xi Wang!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133648 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Support/ConstantRange.cpp | 4 | ||||
-rw-r--r-- | unittests/Support/ConstantRangeTest.cpp | 2 |
2 files changed, 4 insertions, 2 deletions
diff --git a/lib/Support/ConstantRange.cpp b/lib/Support/ConstantRange.cpp index 493f708..81382d0 100644 --- a/lib/Support/ConstantRange.cpp +++ b/lib/Support/ConstantRange.cpp @@ -529,8 +529,8 @@ ConstantRange::sub(const ConstantRange &Other) const { return ConstantRange(getBitWidth(), /*isFullSet=*/true); APInt Spread_X = getSetSize(), Spread_Y = Other.getSetSize(); - APInt NewLower = getLower() - Other.getLower(); - APInt NewUpper = getUpper() - Other.getUpper() + 1; + APInt NewLower = getLower() - Other.getUpper() + 1; + APInt NewUpper = getUpper() - Other.getLower(); if (NewLower == NewUpper) return ConstantRange(getBitWidth(), /*isFullSet=*/true); diff --git a/unittests/Support/ConstantRangeTest.cpp b/unittests/Support/ConstantRangeTest.cpp index 161e2cf..742bcb4 100644 --- a/unittests/Support/ConstantRangeTest.cpp +++ b/unittests/Support/ConstantRangeTest.cpp @@ -299,6 +299,8 @@ TEST_F(ConstantRangeTest, Sub) { EXPECT_EQ(Empty.sub(APInt(16, 4)), Empty); EXPECT_EQ(Some.sub(APInt(16, 4)), ConstantRange(APInt(16, 0x6), APInt(16, 0xaa6))); + EXPECT_EQ(Some.sub(Some), + ConstantRange(APInt(16, 0xf561), APInt(16, 0xaa0))); EXPECT_EQ(Wrap.sub(APInt(16, 4)), ConstantRange(APInt(16, 0xaa6), APInt(16, 0x6))); EXPECT_EQ(One.sub(APInt(16, 4)), |