[llvm] 507ff08 - [VPlan] Move runtime check blocks to correct position during exec (NFC).
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 1 08:15:46 PDT 2025
Author: Florian Hahn
Date: 2025-09-01T16:15:02+01:00
New Revision: 507ff082c2a301d63615695083cf209ec89ef253
URL: https://github.com/llvm/llvm-project/commit/507ff082c2a301d63615695083cf209ec89ef253
DIFF: https://github.com/llvm/llvm-project/commit/507ff082c2a301d63615695083cf209ec89ef253.diff
LOG: [VPlan] Move runtime check blocks to correct position during exec (NFC).
Move adjusting the position of completely disconnected IR blocks to
VPIRBasicBlock::execute.
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 96bc3e9b5ffc9..6658938313b36 100644
--- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -7268,8 +7268,6 @@ DenseMap<const SCEV *, Value *> LoopVectorizationPlanner::executePlan(
// 1. Set up the skeleton for vectorization, including vector pre-header and
// middle block. The vector loop is created during VPlan execution.
- BasicBlock *EntryBB =
- cast<VPIRBasicBlock>(BestVPlan.getEntry())->getIRBasicBlock();
State.CFG.PrevBB = ILV.createVectorizedLoopSkeleton();
replaceVPBBWithIRVPBB(BestVPlan.getScalarPreheader(),
State.CFG.PrevBB->getSingleSuccessor());
@@ -7303,13 +7301,6 @@ DenseMap<const SCEV *, Value *> LoopVectorizationPlanner::executePlan(
//
//===------------------------------------------------===//
- // Move check blocks to their final position.
- // TODO: Move as part of VPIRBB execute and update impacted tests.
- if (BasicBlock *MemCheckBlock = ILV.RTChecks.getMemRuntimeChecks().second)
- MemCheckBlock->moveAfter(EntryBB);
- if (BasicBlock *SCEVCheckBlock = ILV.RTChecks.getSCEVChecks().second)
- SCEVCheckBlock->moveAfter(EntryBB);
-
BestVPlan.execute(&State);
// 2.5 When vectorizing the epilogue, fix reduction resume values from the
diff --git a/llvm/lib/Transforms/Vectorize/VPlan.cpp b/llvm/lib/Transforms/Vectorize/VPlan.cpp
index 6af7de7b7f632..334dc9e20c58f 100644
--- a/llvm/lib/Transforms/Vectorize/VPlan.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlan.cpp
@@ -493,6 +493,9 @@ void VPBasicBlock::connectToPredecessors(VPTransformState &State) {
void VPIRBasicBlock::execute(VPTransformState *State) {
assert(getHierarchicalSuccessors().size() <= 2 &&
"VPIRBasicBlock can have at most two successors at the moment!");
+ // Move completely disconnected blocks to their final position.
+ if (IRBB->hasNPredecessors(0) && succ_begin(IRBB) == succ_end(IRBB))
+ IRBB->moveAfter(State->CFG.PrevBB);
State->Builder.SetInsertPoint(IRBB->getTerminator());
State->CFG.PrevBB = IRBB;
State->CFG.VPBB2IRBB[this] = IRBB;
More information about the llvm-commits
mailing list