[llvm-commits] CVS: llvm/include/llvm/ADT/APInt.h

Chris Lattner clattner at apple.com
Sat Mar 24 16:42:02 PDT 2007


On Mar 24, 2007, at 4:37 PM, Reid Spencer wrote:

> On Sat, 2007-03-24 at 16:31 -0700, Chris Lattner wrote:
>>>    /// @param loBit the index of the lowest bit set.
>>>    /// @returns An APInt value with the requested bits set.
>>>    /// @brief Get a value with a block of bits set.
>>> -  static APInt getBitsSet(uint32_t numBits, uint32_t hiBit,
>>> uint32_t loBit = 0);
>>> +  static APInt getBitsSet(uint32_t numBits, uint32_t hiBit,
>>> uint32_t loBit = 0){
>>> +    assert(hiBit < numBits && "hiBit out of range");
>>> +    assert(loBit < numBits && "loBit out of range");
>>> +    if (hiBit < loBit)
>>
>> Hrm?  Why would you allow hiBit < loBit?  This seems like something
>> that should be asserted against.
>
> Read the definition of the function in the documentation. It allows  
> you
> to construct things like:
> 0xFF0000FF with getBitsSet(32, 8, 24);

Ah, ok, makes sense!

>>> +      return getLowBitsSet(numBits, hiBit+1) |
>>> +             getHighBitsSet(numBits, numBits-loBit+1);
>>> +    else if (loBit == 0)
>>> +      return getLowBitsSet(numBits, hiBit+1);
>>
>> Do you need this special case for correctness?
>
> No, I was trying to saves a rather expensive shl for a common case.
> However, I decided that before I wrote getLowBitsSet (which is the
> equivalent). I'll remove that case and the default parameter.

Thanks,

-Chris



More information about the llvm-commits mailing list