[llvm-commits] CVS: llvm/lib/Transforms/Scalar/LoopUnroll.cpp

Chris Lattner clattner at apple.com
Fri Mar 2 15:53:40 PST 2007


On Mar 2, 2007, at 3:40 PM, Reid Spencer wrote:

> On Fri, 2007-03-02 at 15:35 -0800, Chris Lattner wrote:
>> On Mar 2, 2007, at 3:31 PM, Reid Spencer wrote:
>>
>>
>>> +  // Guard against huge trip counts. This also guards against
>>> assertions in
>>> +  // APInt from the use of getZExtValue, below.
>>> +  if (TripCountC->getValue().getActiveBits() > 32)
>>>      return Changed; // More than 2^32 iterations???
>>>
>>> +  uint64_t TripCountFull = TripCountC->getZExtValue();
>>> +  if (TripCountFull == 0)
>>> +    return Changed; // Zero iteraitons?
>>> +
>>
>> Won't this still assert on 'i128 16' ?
>
> No. getZExtValue() doesn't look at the bit width, it looks at the
> precision of the value. Regardless of the bit width, if the value fits
> in 64 bits, it allows it. If not, it asserts. Which is why I check
> "getActiveBits() > 32" to limit trip counts to < 2^32. This makes the
> getZExtValue() safe.

Ok, nifty.

> That precision check is another reason why I'm changing things like:
>
> if (CI->getZExtValue() == 1)
>
> into
>
> if (CI->isOne())
>
> because its cheaper :)

Woot!

-Chris



More information about the llvm-commits mailing list