[llvm] [DemandedBits] Support non-constant shift amounts (PR #148880)
Panagiotis Karouzakis via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 5 10:21:48 PDT 2025
================
@@ -76,6 +76,19 @@ void DemandedBits::determineLiveOperandBits(
computeKnownBits(V2, Known2, DL, &AC, UserI, &DT);
}
};
+ auto GetShiftedRange = [&](uint64_t Min, uint64_t Max, bool ShiftLeft) {
+ auto ShiftF = [ShiftLeft](const APInt &Mask, unsigned ShiftAmnt) {
+ return ShiftLeft ? Mask.shl(ShiftAmnt) : Mask.lshr(ShiftAmnt);
+ };
+ AB = APInt::getZero(BitWidth);
+ uint64_t LoopRange = Max - Min;
+ APInt Mask = AOut;
+ for (unsigned ShiftAmnt = 1; ShiftAmnt <= LoopRange; ShiftAmnt <<= 1) {
----------------
karouzakisp wrote:
If the ShiftAmount of the Shift Inst isn't known,
Then what Min and Max would be?
`Min = 0`?
`Max = BitWidth - 1`?
` unsigned Min = Known.getMinValue().getLimitedValue(BitWidth - 1);
unsigned Max = Known.getMaxValue().getLimitedValue(BitWidth - 1);`
https://github.com/llvm/llvm-project/pull/148880
More information about the llvm-commits
mailing list