[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