[PATCH] D126679: [VPlan] Update vector latch terminator edge to exit block after execution.
Florian Hahn via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue May 31 08:53:30 PDT 2022
fhahn updated this revision to Diff 433103.
fhahn added a comment.
Move code to set branch to ExitBB (aka middle.block) to VPBasicBlock::execute.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D126679/new/
https://reviews.llvm.org/D126679
Files:
llvm/lib/Transforms/Vectorize/VPlan.cpp
Index: llvm/lib/Transforms/Vectorize/VPlan.cpp
===================================================================
--- llvm/lib/Transforms/Vectorize/VPlan.cpp
+++ llvm/lib/Transforms/Vectorize/VPlan.cpp
@@ -274,8 +274,6 @@
assert(this == LoopRegion->getSingleSuccessor() &&
"the current block must be the single successor of the region");
PredBBTerminator->setSuccessor(0, NewBB);
- PredBBTerminator->setSuccessor(
- 1, CFG.VPBB2IRBB[LoopRegion->getEntryBasicBlock()]);
}
}
return NewBB;
@@ -297,6 +295,13 @@
// ExitBB can be re-used for the exit block of the Plan.
NewBB = State->CFG.ExitBB;
State->CFG.PrevBB = NewBB;
+
+ // Update the branch instruction in the predecessor to branch to ExitBB.
+ VPBlockBase *PredVPBB = getSingleHierarchicalPredecessor();
+ VPBasicBlock *ExitingVPBB = PredVPBB->getExitingBasicBlock();
+ assert(PredVPBB->getSuccessors()[0] == this);
+ BasicBlock *ExitingBB = State->CFG.VPBB2IRBB[ExitingVPBB];
+ cast<BranchInst>(ExitingBB->getTerminator())->setSuccessor(0, NewBB);
} else if (PrevVPBB && /* A */
!((SingleHPred = getSingleHierarchicalPredecessor()) &&
SingleHPred->getExitingBasicBlock() == PrevVPBB &&
@@ -783,11 +788,13 @@
"empty entry block only expected in VPlanNativePath");
Header = cast<VPBasicBlock>(Header->getSingleSuccessor());
}
- // TODO: Once the exit block is modeled in VPlan, use it instead of going
- // through State.CFG.ExitBB.
- BasicBlock *Exit = State.CFG.ExitBB;
- Builder.CreateCondBr(Cond, Exit, State.CFG.VPBB2IRBB[Header]);
+ // Replace the temporary unreachable terminator with a new conditional
+ // branch, hooking it up to backward destination now and to forward
+ // destination(s) later when they are created.
+ BranchInst *CondBr = Builder.CreateCondBr(Cond, Builder.GetInsertBlock(),
+ State.CFG.VPBB2IRBB[Header]);
+ CondBr->setSuccessor(0, nullptr);
Builder.GetInsertBlock()->getTerminator()->eraseFromParent();
break;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D126679.433103.patch
Type: text/x-patch
Size: 2130 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220531/e7290b8a/attachment.bin>
More information about the llvm-commits
mailing list