[llvm-commits] [llvm] r160294 - in /llvm/trunk: lib/Support/ConstantRange.cpp unittests/Support/ConstantRangeTest.cpp
Nuno Lopes
nunoplopes at sapo.pt
Tue Jul 17 08:44:41 PDT 2012
Quoting Duncan Sands <baldrick at free.fr>:
> Hi Nuno,
>
>> --- llvm/trunk/lib/Support/ConstantRange.cpp (original)
>> +++ llvm/trunk/lib/Support/ConstantRange.cpp Mon Jul 16 13:08:12 2012
>> @@ -143,16 +143,18 @@
>> /// getSetSize - Return the number of elements in this set.
>> ///
>> APInt ConstantRange::getSetSize() const {
>> - if (isEmptySet())
>> - return APInt(getBitWidth(), 0);
>> - if (getBitWidth() == 1) {
>> - if (Lower != Upper) // One of T or F in the set...
>> - return APInt(2, 1);
>> - return APInt(2, 2); // Must be full set...
>> + if (isEmptySet())
>> + return APInt(getBitWidth()+1, 0);
>> +
>> + if (isFullSet())
>> + return APInt::getMaxValue(getBitWidth()).zext(getBitWidth()+1) + 1;
>
> it's probably cheaper to just set the bit.
>
>> +
>> + if (isWrappedSet()) {
>> + APInt Result = Upper + (APInt::getMaxValue(getBitWidth()) - Lower + 1);
>
> This is the same as Upper - Lower.
Ah, nice catch! You're right. Fixed in r160368.
Thanks,
Nuno
> Ciao, Duncan.
>
>
>> + return Result.zext(getBitWidth()+1);
>> }
>>
>> - // Simply subtract the bounds...
>> - return Upper - Lower;
>> + return (Upper - Lower).zext(getBitWidth()+1);
>> }
>>
>> /// getUnsignedMax - Return the largest unsigned value contained in the
>>
>> Modified: llvm/trunk/unittests/Support/ConstantRangeTest.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/ConstantRangeTest.cpp?rev=160294&r1=160293&r2=160294&view=diff
>> ==============================================================================
>> --- llvm/trunk/unittests/Support/ConstantRangeTest.cpp (original)
>> +++ llvm/trunk/unittests/Support/ConstantRangeTest.cpp Mon Jul 16
>> 13:08:12 2012
>> @@ -114,11 +114,15 @@
>> }
>>
>> TEST_F(ConstantRangeTest, GetSetSize) {
>> - EXPECT_EQ(Full.getSetSize(), APInt(16, 0));
>> - EXPECT_EQ(Empty.getSetSize(), APInt(16, 0));
>> - EXPECT_EQ(One.getSetSize(), APInt(16, 1));
>> - EXPECT_EQ(Some.getSetSize(), APInt(16, 0xaa0));
>> - EXPECT_EQ(Wrap.getSetSize(), APInt(16, 0x10000 - 0xaa0));
>> + EXPECT_EQ(Full.getSetSize(), APInt(17, 65536));
>> + EXPECT_EQ(Empty.getSetSize(), APInt(17, 0));
>> + EXPECT_EQ(One.getSetSize(), APInt(17, 1));
>> + EXPECT_EQ(Some.getSetSize(), APInt(17, 0xaa0));
>> +
>> + ConstantRange Wrap(APInt(4, 7), APInt(4, 3));
>> + ConstantRange Wrap2(APInt(4, 8), APInt(4, 7));
>> + EXPECT_EQ(Wrap.getSetSize(), APInt(5, 12));
>> + EXPECT_EQ(Wrap2.getSetSize(), APInt(5, 15));
>> }
>>
>> TEST_F(ConstantRangeTest, GetMinsAndMaxes) {
>>
More information about the llvm-commits
mailing list