mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 13:11:39 +01:00
[APInt] Make clearUnusedBits branch free.
This makes the WordBits calculation calculate a value between 1 and 64 for the number of bits in the last word. Previously if the BitWidth was a multiple of 64 bits the WordBits value was 0 and we had to bail out early to avoid an undefined shift. Now with a value of 64 we no longer have an undefined shift issue. This shows a 15-16k reduction in the size of the opt binary on my local x86-64 build. llvm-svn: 301134
This commit is contained in:
parent
976b7b2cf5
commit
72d61a457f
@ -138,15 +138,10 @@ private:
|
||||
/// zero'd out.
|
||||
APInt &clearUnusedBits() {
|
||||
// Compute how many bits are used in the final word
|
||||
unsigned wordBits = BitWidth % APINT_BITS_PER_WORD;
|
||||
if (wordBits == 0)
|
||||
// If all bits are used, we want to leave the value alone. This also
|
||||
// avoids the undefined behavior of >> when the shift is the same size as
|
||||
// the word size (64).
|
||||
return *this;
|
||||
unsigned WordBits = ((BitWidth-1) % APINT_BITS_PER_WORD) + 1;
|
||||
|
||||
// Mask out the high bits.
|
||||
uint64_t mask = WORD_MAX >> (APINT_BITS_PER_WORD - wordBits);
|
||||
uint64_t mask = WORD_MAX >> (APINT_BITS_PER_WORD - WordBits);
|
||||
if (isSingleWord())
|
||||
VAL &= mask;
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user