[llvm] [VPlan] Support VPReverseVectorPointer in DataWithEVL vectorization (PR #113667)

Shih-Po Hung via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 18 02:34:47 PST 2024


================
@@ -1462,15 +1462,22 @@ static void transformRecipestoEVLRecipes(VPlan &Plan, VPValue &EVL) {
         assert(OrigMask && "Unmasked recipe when folding tail");
         return HeaderMask == OrigMask ? nullptr : OrigMask;
       };
+      auto SetEVLForReversePointer = [&EVL](VPValue *V) -> void {
+        if (auto *R = dyn_cast_if_present<VPReverseVectorPointerRecipe>(
+                V->getDefiningRecipe()))
+          R->setOperand(1, &EVL);
+      };
 
       VPRecipeBase *NewRecipe =
           TypeSwitch<VPRecipeBase *, VPRecipeBase *>(CurRecipe)
               .Case<VPWidenLoadRecipe>([&](VPWidenLoadRecipe *L) {
                 VPValue *NewMask = GetNewMask(L->getMask());
+                SetEVLForReversePointer(L->getAddr());
----------------
arcbbb wrote:

Updated, instead I traverse each user of VF to find all `VPReverseVectorPointerRecipe`.

https://github.com/llvm/llvm-project/pull/113667


More information about the llvm-commits mailing list