[llvm] [VPlan] Hook IR blocks into VPlan during skeleton creation (NFC) (PR #114292)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 13 15:43:56 PST 2024
================
@@ -2429,6 +2429,30 @@ InnerLoopVectorizer::getOrCreateVectorTripCount(BasicBlock *InsertBlock) {
return VectorTripCount;
}
+/// Helper to connect both the vector and scalar preheaders to the Plan's
+/// entry. This is used when adjusting \p Plan during skeleton
+/// creation, i.e. adjusting the plan after introducing an initial runtime
+/// check.
+static void connectScalarPreheaderInVPlan(VPlan &Plan) {
+ VPBlockBase *VectorPH = Plan.getVectorPreheader();
+ VPBlockBase *ScalarPH = Plan.getScalarPreheader();
+ VPBlockBase *PredVPB = Plan.getEntry();
+ VPBlockUtils::connectBlocks(PredVPB, ScalarPH, -1, 0);
+ VPBlockUtils::connectBlocks(PredVPB, VectorPH, 0, -1);
----------------
ayalz wrote:
VPlan starts with createInitialVPlan() producing a disconnected Entry and a predecessor-less vector_PH --> vector_region (with Header --> Latch) --> middle_block --> scalar_PH, plus an optional middle-block --> exit.
Would it be better to connect Entry-->vector_PH at the outset (ah, disregard - this indeed takes place below...), and here connect Entry-->scalar_PH followed by `swapSuccessors(Entry)`? The use of non-negative indices in `connectBlocks()` may be confusing, as it not only **connects** the two blocks but also **disconnects** them from existing successor and/or predecessor. I.e., `replacePredecessor()` or `replaceSuccessor()` may be more appropriate.
Furthermore, TCCheckBlock could then be inserted on this Entry-->vector_PH edge, so that connectScalarPreheaderInVPlan() assimilates introduceCheckBlockInVPlan().
https://github.com/llvm/llvm-project/pull/114292
More information about the llvm-commits
mailing list