[llvm] [LAA][NFC] Refactor deref no-wrap check; expose broken reverse-loop bounds (PR #211960)
Aleksandr Popov via llvm-commits
llvm-commits at lists.llvm.org
Sun Aug 2 14:14:10 PDT 2026
================
@@ -277,45 +281,51 @@ static bool evaluatePtrAddRecAtMaxBTCWillNotWrap(
LoopGuards.emplace(ScalarEvolution::LoopGuards::collect(AR->getLoop(), SE));
MaxBTC = SE.applyLoopGuards(MaxBTC, *LoopGuards);
- const SCEV *OffsetAtLastIter =
- mulSCEVNoOverflow(MaxBTC, SE.getAbsExpr(Step, /*IsNSW=*/false), SE);
- if (!OffsetAtLastIter) {
+ const SCEV *AbsStep = SE.getAbsExpr(Step, /*IsNSW=*/false);
+ // Total distance (in bytes) walked between the first and the last
+ // accessed pointer; MaxBTC * |Step|.
+ const SCEV *WalkBytes = mulSCEVNoOverflow(MaxBTC, AbsStep, SE);
----------------
aleks-tmb wrote:
Agreed, though `OffsetAtLastIter` wouldn't be quite accurate for a negative-step loop. Renamed to `DistToLastIter` - hopefully that fits both directions.
https://github.com/llvm/llvm-project/pull/211960
More information about the llvm-commits
mailing list