On Mar 24, 2007, at 4:36 PM, Reid Spencer wrote: > /// @brief Get a value with high bits set > static APInt getHighBitsSet(uint32_t numBits, uint32_t hiBitsSet) { > assert(hiBitsSet <= numBits && "Too many bits to set!"); > - uint32_t mvBits = numBits - hiBitsSet; > + uint32_t shiftAmt = numBits - hiBitsSet; > // For small values, return quickly > if (numBits <= APINT_BITS_PER_WORD) > + return APInt(numBits, ~0ULL << shiftAmt);
Now we get undefined behavior if hibitsset = 0, no? -Chris > + return (~APInt(numBits, 0)).shl(shiftAmt); > } > > /// Constructs an APInt value that has the bottom loBitsSet bits > set. > @@ -371,10 +370,11 @@ > /// @brief Get a value with low bits set > static APInt getLowBitsSet(uint32_t numBits, uint32_t loBitsSet) { > assert(loBitsSet <= numBits && "Too many bits to set!"); > + uint32_t shiftAmt = numBits - loBitsSet; > // For small values, return quickly > if (numBits <= APINT_BITS_PER_WORD) > - return APInt(numBits, (1ULL << loBitsSet) - 1ULL); > - return APInt(numBits, 1).shl(loBitsSet) - APInt(numBits, 1); > + return APInt(numBits, ~0ULL >> shiftAmt); > + return (~APInt(numBits, 0)).lshr(shiftAmt); > } > > /// The hash value is computed as the sum of the words and the > bit width. > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits