[llvm] 283a78a - Reapply "[LV] Don't add blocks to loop in GeneratedRTChecks (NFC)."
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 6 04:18:35 PDT 2025
Author: Florian Hahn
Date: 2025-04-06T12:18:11+01:00
New Revision: 283a78a088bc669f31d8a3567265b1a3ab129487
URL: https://github.com/llvm/llvm-project/commit/283a78a088bc669f31d8a3567265b1a3ab129487
DIFF: https://github.com/llvm/llvm-project/commit/283a78a088bc669f31d8a3567265b1a3ab129487.diff
LOG: Reapply "[LV] Don't add blocks to loop in GeneratedRTChecks (NFC)."
This reverts commit 46a2f4174a051f29a09dbc3844df763571c67309.
Recommits 2fd6f8fb5e3a with corresponding VPlan change to ensure
LoopInfo is updated for all blocks during VPlan execution if needed.
Added:
Modified:
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
llvm/lib/Transforms/Vectorize/VPlan.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
index cc6fd790bc437..585caaffa63da 100644
--- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -2082,9 +2082,6 @@ class GeneratedRTChecks {
auto *Pred = LoopVectorPreHeader->getSinglePredecessor();
BranchInst::Create(LoopVectorPreHeader, SCEVCheckBlock);
- // Create new preheader for vector loop.
- if (OuterLoop)
- OuterLoop->addBasicBlockToLoop(SCEVCheckBlock, *LI);
SCEVCheckBlock->getTerminator()->eraseFromParent();
SCEVCheckBlock->moveBefore(LoopVectorPreHeader);
@@ -2122,9 +2119,6 @@ class GeneratedRTChecks {
DT->changeImmediateDominator(LoopVectorPreHeader, MemCheckBlock);
MemCheckBlock->moveBefore(LoopVectorPreHeader);
- if (OuterLoop)
- OuterLoop->addBasicBlockToLoop(MemCheckBlock, *LI);
-
BranchInst &BI =
*BranchInst::Create(Bypass, LoopVectorPreHeader, MemRuntimeCheckCond);
if (AddBranchWeights) {
diff --git a/llvm/lib/Transforms/Vectorize/VPlan.cpp b/llvm/lib/Transforms/Vectorize/VPlan.cpp
index a6e807b616ce5..bc3957f573d82 100644
--- a/llvm/lib/Transforms/Vectorize/VPlan.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlan.cpp
@@ -432,6 +432,19 @@ BasicBlock *VPBasicBlock::createEmptyBasicBlock(VPTransformState &State) {
void VPBasicBlock::connectToPredecessors(VPTransformState &State) {
auto &CFG = State.CFG;
BasicBlock *NewBB = CFG.VPBB2IRBB[this];
+
+ // Register NewBB in its loop. In innermost loops its the same for all
+ // BB's.
+ Loop *ParentLoop = State.CurrentParentLoop;
+ // If this block has a sole successor that is an exit block then it needs
+ // adding to the same parent loop as the exit block.
+ VPBlockBase *SuccVPBB = getSingleSuccessor();
+ if (SuccVPBB && State.Plan->isExitBlock(SuccVPBB))
+ ParentLoop =
+ State.LI->getLoopFor(cast<VPIRBasicBlock>(SuccVPBB)->getIRBasicBlock());
+ if (ParentLoop && !State.LI->getLoopFor(NewBB))
+ ParentLoop->addBasicBlockToLoop(NewBB, *State.LI);
+
// Hook up the new basic block to its predecessors.
for (VPBlockBase *PredVPBlock : getHierarchicalPredecessors()) {
VPBasicBlock *PredVPBB = PredVPBlock->getExitingBasicBlock();
@@ -517,17 +530,6 @@ void VPBasicBlock::execute(VPTransformState *State) {
State->Builder.SetInsertPoint(NewBB);
// Temporarily terminate with unreachable until CFG is rewired.
UnreachableInst *Terminator = State->Builder.CreateUnreachable();
- // Register NewBB in its loop. In innermost loops its the same for all
- // BB's.
- Loop *ParentLoop = State->CurrentParentLoop;
- // If this block has a sole successor that is an exit block then it needs
- // adding to the same parent loop as the exit block.
- VPBlockBase *SuccVPBB = getSingleSuccessor();
- if (SuccVPBB && State->Plan->isExitBlock(SuccVPBB))
- ParentLoop = State->LI->getLoopFor(
- cast<VPIRBasicBlock>(SuccVPBB)->getIRBasicBlock());
- if (ParentLoop)
- ParentLoop->addBasicBlockToLoop(NewBB, *State->LI);
State->Builder.SetInsertPoint(Terminator);
State->CFG.PrevBB = NewBB;
More information about the llvm-commits
mailing list