mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 03:24:09 +00:00
Add a new isSignWrappedSet() method to ConstantRange.
Fix zeroExtend and signExtend to support empty sets, and to return the smallest possible result set which contains the extension of each element in their inputs. For example zext i8 [100, 10) to i16 is now [0, 256), not i16 [100, 10) which contains 63446 members. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113187 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -146,6 +146,22 @@ TEST_F(ConstantRangeTest, GetMinsAndMaxes) {
|
||||
APInt(4, 7));
|
||||
}
|
||||
|
||||
TEST_F(ConstantRangeTest, SignWrapped) {
|
||||
EXPECT_TRUE(Full.isSignWrappedSet());
|
||||
EXPECT_FALSE(Empty.isSignWrappedSet());
|
||||
EXPECT_FALSE(One.isSignWrappedSet());
|
||||
EXPECT_FALSE(Some.isSignWrappedSet());
|
||||
EXPECT_TRUE(Wrap.isSignWrappedSet());
|
||||
|
||||
EXPECT_FALSE(ConstantRange(APInt(8, 127), APInt(8, 128)).isSignWrappedSet());
|
||||
EXPECT_TRUE(ConstantRange(APInt(8, 127), APInt(8, 129)).isSignWrappedSet());
|
||||
EXPECT_FALSE(ConstantRange(APInt(8, 128), APInt(8, 129)).isSignWrappedSet());
|
||||
EXPECT_TRUE(ConstantRange(APInt(8, 10), APInt(8, 9)).isSignWrappedSet());
|
||||
EXPECT_TRUE(ConstantRange(APInt(8, 10), APInt(8, 250)).isSignWrappedSet());
|
||||
EXPECT_FALSE(ConstantRange(APInt(8, 250), APInt(8, 10)).isSignWrappedSet());
|
||||
EXPECT_FALSE(ConstantRange(APInt(8, 250), APInt(8, 251)).isSignWrappedSet());
|
||||
}
|
||||
|
||||
TEST_F(ConstantRangeTest, Trunc) {
|
||||
ConstantRange TFull = Full.truncate(10);
|
||||
ConstantRange TEmpty = Empty.truncate(10);
|
||||
@ -171,8 +187,7 @@ TEST_F(ConstantRangeTest, ZExt) {
|
||||
APInt(One.getUpper()).zext(20)));
|
||||
EXPECT_EQ(ZSome, ConstantRange(APInt(Some.getLower()).zext(20),
|
||||
APInt(Some.getUpper()).zext(20)));
|
||||
EXPECT_EQ(ZWrap, ConstantRange(APInt(Wrap.getLower()).zext(20),
|
||||
APInt(Wrap.getUpper()).zext(20)));
|
||||
EXPECT_EQ(ZWrap, ConstantRange(APInt(20, 0), APInt(20, 0x10000)));
|
||||
}
|
||||
|
||||
TEST_F(ConstantRangeTest, SExt) {
|
||||
@ -188,8 +203,11 @@ TEST_F(ConstantRangeTest, SExt) {
|
||||
APInt(One.getUpper()).sext(20)));
|
||||
EXPECT_EQ(SSome, ConstantRange(APInt(Some.getLower()).sext(20),
|
||||
APInt(Some.getUpper()).sext(20)));
|
||||
EXPECT_EQ(SWrap, ConstantRange(APInt(Wrap.getLower()).sext(20),
|
||||
APInt(Wrap.getUpper()).sext(20)));
|
||||
EXPECT_EQ(SWrap, ConstantRange(APInt(20, (uint64_t)INT16_MIN, true),
|
||||
APInt(20, INT16_MAX + 1, true)));
|
||||
|
||||
EXPECT_EQ(ConstantRange(APInt(8, 120), APInt(8, 140)).signExtend(16),
|
||||
ConstantRange(APInt(16, -128), APInt(16, 128)));
|
||||
}
|
||||
|
||||
TEST_F(ConstantRangeTest, IntersectWith) {
|
||||
|
Reference in New Issue
Block a user