[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