[llvm] [LV] Use SCEV to compute final value of complex induction variables (PR #195059)
Mel Chen via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 17 03:34:32 PDT 2026
================
@@ -1157,8 +1157,44 @@ optimizeLatchExitInductionUser(VPlan &Plan, VPValue *Op,
return nullptr;
}
+static VPValue *optimizeLatchExitIVUserViaSCEV(VPlan &Plan, VPValue *Op,
+ PredicatedScalarEvolution &PSE,
+ VPValue *ResumeTC,
+ const Loop *L) {
+ VPValue *Incoming;
+ if (!match(Op, m_ExtractLastLaneOfLastPart(m_VPValue(Incoming))))
+ return nullptr;
+
+ const SCEV *IncomingSCEV = vputils::getSCEVExprForVPValue(Incoming, PSE, L);
+ const SCEV *Start, *Step;
+ if (!match(IncomingSCEV, m_scev_AffineAddRec(m_SCEV(Start), m_SCEV(Step),
+ m_SpecificLoop(L))))
+ return nullptr;
+
+ auto *ExtractR = cast<VPInstruction>(Op);
+ DebugLoc DL = ExtractR->getDebugLoc();
+ VPBuilder Builder(ExtractR);
+ VPSCEVExpander Expander(Builder, *PSE.getSE(), DL);
+ VPValue *StartVPV = Expander.tryToExpand(Start);
----------------
Mel-Chen wrote:
The SCEV expansion occurs in the middle.block rather than inside the vector loop, so it won't cause any verifier failures.
https://github.com/llvm/llvm-project/pull/195059
More information about the llvm-commits
mailing list