[llvm] [VPlan] Handle loads feeding memops in makeMemOpWideningDecisions (NFC) (PR #196842)
Andrei Elovikov via llvm-commits
llvm-commits at lists.llvm.org
Mon May 11 13:52:45 PDT 2026
================
@@ -6465,6 +6467,29 @@ void VPlanTransforms::makeMemOpWideningDecisions(
continue;
}
+ Instruction *I = VPI->getUnderlyingInstr();
+ bool IsLoad = VPI->getOpcode() == Instruction::Load;
+ VPValue *Ptr = VPI->getOperand(!IsLoad);
+ if (!RecipeBuilder.isMaskRequired(I)) {
+ // Scalarize loads used as addresses. Mark the load single-scalar only
+ // when the pointer is provably loop-invariant per SCEV; otherwise
+ // replicate per-lane so each iteration re-reads the (possibly varying)
+ // value, matching the legacy CM's conservative behavior for loaded
+ // pointers.
+ if (IsLoad && !RecipeBuilder.prefersVectorizedAddressing() &&
----------------
eas wrote:
`RecipeBuilder.prefersVectorizedAddressing()` would also integrate nicely with a "subpass" - we'd skip this entire processing depending on the target.
https://github.com/llvm/llvm-project/pull/196842
More information about the llvm-commits
mailing list