[llvm] [DemandedBits] Support non-constant shift amounts (PR #148880)
Panagiotis Karouzakis via llvm-commits
llvm-commits at lists.llvm.org
Sun Aug 10 09:33:05 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:
I meant this
` Known = Known.intersectWith(ShiftByConst(LHS, ShiftAmt)); `
Anyway, since we are using APInts if we switch the loop to do increments by 1, even if we employ the same strategy as the KnownBits technique the time complexity is O(n^2) instead of O(nlogn)
https://github.com/llvm/llvm-project/pull/148880
More information about the llvm-commits
mailing list