[llvm] r357039 - [ConstantRange] Exclude full set from isSignWrappedSet()
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 26 15:37:27 PDT 2019
Author: nikic
Date: Tue Mar 26 15:37:26 2019
New Revision: 357039
URL: http://llvm.org/viewvc/llvm-project?rev=357039&view=rev
Log:
[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
Modified:
llvm/trunk/include/llvm/IR/ConstantRange.h
llvm/trunk/lib/IR/ConstantRange.cpp
llvm/trunk/unittests/IR/ConstantRangeTest.cpp
Modified: llvm/trunk/include/llvm/IR/ConstantRange.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/ConstantRange.h?rev=357039&r1=357038&r2=357039&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/ConstantRange.h (original)
+++ llvm/trunk/include/llvm/IR/ConstantRange.h Tue Mar 26 15:37:26 2019
@@ -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.
Modified: llvm/trunk/lib/IR/ConstantRange.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/ConstantRange.cpp?rev=357039&r1=357038&r2=357039&view=diff
==============================================================================
--- llvm/trunk/lib/IR/ConstantRange.cpp (original)
+++ llvm/trunk/lib/IR/ConstantRange.cpp Tue Mar 26 15:37:26 2019
@@ -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 {
Modified: llvm/trunk/unittests/IR/ConstantRangeTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/IR/ConstantRangeTest.cpp?rev=357039&r1=357038&r2=357039&view=diff
==============================================================================
--- llvm/trunk/unittests/IR/ConstantRangeTest.cpp (original)
+++ llvm/trunk/unittests/IR/ConstantRangeTest.cpp Tue Mar 26 15:37:26 2019
@@ -161,7 +161,7 @@ TEST_F(ConstantRangeTest, GetMinsAndMaxe
}
TEST_F(ConstantRangeTest, SignWrapped) {
- EXPECT_TRUE(Full.isSignWrappedSet());
+ EXPECT_FALSE(Full.isSignWrappedSet());
EXPECT_FALSE(Empty.isSignWrappedSet());
EXPECT_FALSE(One.isSignWrappedSet());
EXPECT_FALSE(Some.isSignWrappedSet());
More information about the llvm-commits
mailing list