[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