diff options
| author | James Molloy <james.molloy@arm.com> | 2015-10-08 12:40:06 +0000 |
|---|---|---|
| committer | James Molloy <james.molloy@arm.com> | 2015-10-08 12:40:06 +0000 |
| commit | e9d50dc9f72d9aa5741c6fc05eb828448b110c48 (patch) | |
| tree | 59b5b71a1751e83310ddba5e71b7956357d014e8 /llvm/lib/Analysis/DemandedBits.cpp | |
| parent | bcd7f0ac9829fd3bae4ccdead15c40afd6957b4e (diff) | |
| download | bcm5719-llvm-e9d50dc9f72d9aa5741c6fc05eb828448b110c48.tar.gz bcm5719-llvm-e9d50dc9f72d9aa5741c6fc05eb828448b110c48.zip | |
Compute demanded bits for icmp instructions
Instead of bailing out when we see an icmp, we can instead at least
say that if the upper bits of both operands are known zero, they are
not demanded. This doesn't help with signed comparisons, but it's at
least better than bailing out.
llvm-svn: 249687
Diffstat (limited to 'llvm/lib/Analysis/DemandedBits.cpp')
| -rw-r--r-- | llvm/lib/Analysis/DemandedBits.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/DemandedBits.cpp b/llvm/lib/Analysis/DemandedBits.cpp index 6f92ba6289a..912c5ceb754 100644 --- a/llvm/lib/Analysis/DemandedBits.cpp +++ b/llvm/lib/Analysis/DemandedBits.cpp @@ -242,6 +242,13 @@ void DemandedBits::determineLiveOperandBits( if (OperandNo != 0) AB = AOut; break; + case Instruction::ICmp: + // Count the number of leading zeroes in each operand. + ComputeKnownBits(BitWidth, I, UserI->getOperand(1)); + auto NumLeadingZeroes = std::min(KnownZero.countLeadingOnes(), + KnownZero2.countLeadingOnes()); + AB = ~APInt::getHighBitsSet(BitWidth, NumLeadingZeroes); + break; } } |

