[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