mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 17:32:19 +00:00
make ConstantRange::zeroExtend() optimal
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160643 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5e31044e11
commit
b42729b53a
@ -427,9 +427,13 @@ ConstantRange ConstantRange::zeroExtend(uint32_t DstTySize) const {
|
||||
|
||||
unsigned SrcTySize = getBitWidth();
|
||||
assert(SrcTySize < DstTySize && "Not a value extension");
|
||||
if (isFullSet() || isWrappedSet())
|
||||
if (isFullSet() || isWrappedSet()) {
|
||||
// Change into [0, 1 << src bit width)
|
||||
return ConstantRange(APInt(DstTySize,0), APInt(DstTySize,1).shl(SrcTySize));
|
||||
APInt LowerExt(DstTySize, 0);
|
||||
if (!Upper) // special case: [X, 0) -- not really wrapping around
|
||||
LowerExt = Lower.zext(DstTySize);
|
||||
return ConstantRange(LowerExt, APInt(DstTySize, 1).shl(SrcTySize));
|
||||
}
|
||||
|
||||
return ConstantRange(Lower.zext(DstTySize), Upper.zext(DstTySize));
|
||||
}
|
||||
|
@ -193,6 +193,10 @@ TEST_F(ConstantRangeTest, ZExt) {
|
||||
EXPECT_EQ(ZSome, ConstantRange(Some.getLower().zext(20),
|
||||
Some.getUpper().zext(20)));
|
||||
EXPECT_EQ(ZWrap, ConstantRange(APInt(20, 0), APInt(20, 0x10000)));
|
||||
|
||||
// zext([5, 0), 3->7) = [5, 8)
|
||||
ConstantRange FiveZero(APInt(3, 5), APInt(3, 0));
|
||||
EXPECT_EQ(FiveZero.zeroExtend(7), ConstantRange(APInt(7, 5), APInt(7, 8)));
|
||||
}
|
||||
|
||||
TEST_F(ConstantRangeTest, SExt) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user