[llvm] [VPlan] Hook IR blocks into VPlan during skeleton creation (NFC) (PR #114292)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 5 14:05:44 PST 2024
================
@@ -3810,39 +3812,42 @@ class VPlan {
DenseMap<const SCEV *, VPValue *> SCEVToExpansion;
public:
- /// Construct a VPlan with original preheader \p Preheader, trip count \p TC,
- /// \p Entry to the plan and with \p ScalarHeader wrapping the original header
- /// of the scalar loop. At the moment, \p Preheader and \p Entry need to be
- /// disconnected, as the bypass blocks between them are not yet modeled in
- /// VPlan.
- VPlan(VPBasicBlock *Preheader, VPValue *TC, VPBasicBlock *Entry,
- VPIRBasicBlock *ScalarHeader)
- : VPlan(Preheader, Entry, ScalarHeader) {
+ /// Construct a VPlan with \p Entry entering the plan, trip count \p TC and
+ /// with \p ScalarHeader wrapping the original header of the scalar loop.
+ VPlan(VPBasicBlock *Entry, VPValue *TC, VPIRBasicBlock *ScalarHeader)
+ : VPlan(Entry, ScalarHeader) {
TripCount = TC;
}
- /// Construct a VPlan with original preheader \p Preheader, \p Entry to
- /// the plan and with \p ScalarHeader wrapping the original header of the
- /// scalar loop. At the moment, \p Preheader and \p Entry need to be
- /// disconnected, as the bypass blocks between them are not yet modeled in
- /// VPlan.
- VPlan(VPBasicBlock *Preheader, VPBasicBlock *Entry,
- VPIRBasicBlock *ScalarHeader)
- : Entry(Entry), Preheader(Preheader), ScalarHeader(ScalarHeader) {
+ /// Constructor variants that take disconnected preheader and entry blocks,
+ /// connecting them as part of construction.
+ /// FIXME: Only used to reduce the need of code changes during transition.
+ VPlan(VPBasicBlock *OriginalPreheader, VPValue *TC,
+ VPBasicBlock *EntryVectorPreHeader, VPIRBasicBlock *ScalarHeader);
+ VPlan(VPBasicBlock *OriginalPreheader, VPBasicBlock *EntryVectorPreHeader,
+ VPIRBasicBlock *ScalarHeader);
+
+ /// Construct a VPlan with \p Entry to the plan and with \p ScalarHeader
+ /// wrapping the original header of the scalar loop.
+ VPlan(VPBasicBlock *Entry, VPIRBasicBlock *ScalarHeader)
+ : Entry(Entry), ScalarHeader(ScalarHeader) {
Entry->setPlan(this);
- Preheader->setPlan(this);
- assert(Preheader->getNumSuccessors() == 0 &&
- Preheader->getNumPredecessors() == 0 &&
- "preheader must be disconnected");
assert(ScalarHeader->getNumSuccessors() == 0 &&
"scalar header must be a leaf node");
}
~VPlan();
+ void setEntry(VPBasicBlock *VPBB) {
+ Entry = VPBB;
+ VPBB->setPlan(this);
+ }
+
/// Create initial VPlan, having an "entry" VPBasicBlock (wrapping
- /// original scalar pre-header ) which contains SCEV expansions that need
- /// to happen before the CFG is modified; a VPBasicBlock for the vector
+ /// original scalar pre-header) which contains SCEV expansions that need
+ /// to happen before the CFG is modified (when executing a VPlan for the
+ /// epilogue vector loop, the original entry needs to be replaced by the new
+ /// entry for the epilogue vector loop); a VPBasicBlock for the vector
----------------
ayalz wrote:
```suggestion
/// epilogue vector loop, the original entry needs to be replaced by a new
/// one); a VPBasicBlock for the vector
```
https://github.com/llvm/llvm-project/pull/114292
More information about the llvm-commits
mailing list