[PATCH] D147944: [LV][NFC] Improve complexity of fixing users of reductions

Michael Maitland via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 11 18:00:11 PDT 2023


michaelmaitland updated this revision to Diff 512633.
michaelmaitland added a comment.

Use BCBlockPhi instead of PhiR


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D147944/new/

https://reviews.llvm.org/D147944

Files:
  llvm/lib/Transforms/Vectorize/LoopVectorize.cpp


Index: llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
===================================================================
--- llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -4100,12 +4100,17 @@
   // We know that the loop is in LCSSA form. We need to update the PHI nodes
   // in the exit blocks.  See comment on analogous loop in
   // fixFixedOrderRecurrence for a more complete explaination of the logic.
-  if (!Cost->requiresScalarEpilogue(VF))
-    for (PHINode &LCSSAPhi : LoopExitBlock->phis())
-      if (llvm::is_contained(LCSSAPhi.incoming_values(), LoopExitInst)) {
-        LCSSAPhi.addIncoming(ReducedPartRdx, LoopMiddleBlock);
-        State.Plan->removeLiveOut(&LCSSAPhi);
-      }
+  if (!Cost->requiresScalarEpilogue(VF)) {
+    SmallPtrSet<PHINode *, 2> ToFix;
+    for (User *U : BCBlockPhi->users())
+      if (auto *UPhi = dyn_cast<PHINode>(U);
+          UPhi && UPhi->getParent() == LoopExitBlock)
+        ToFix.insert(UPhi);
+    for (PHINode *LCSSAPhi : ToFix) {
+      LCSSAPhi->addIncoming(ReducedPartRdx, LoopMiddleBlock);
+      State.Plan->removeLiveOut(LCSSAPhi);
+    }
+  }
 
   // Fix the scalar loop reduction variable with the incoming reduction sum
   // from the vector body and from the backedge value.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D147944.512633.patch
Type: text/x-patch
Size: 1302 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230412/d4bceec1/attachment.bin>


More information about the llvm-commits mailing list