Skip to content

Commit d481278

Browse files
committed
[VPlan] Connect Entry to scalar preheader during initial construction.
Update initial construction to connect the Plan's entry to the scalar preheader during initial construction. This moves a small part of the skeleton creation out of ILV and will also enable replacing VPInstruction::ResumePhi with regular VPPhi recipes. Resume phis need 2 incoming values to start with, the second being the bypass value from the scalar ph (and used to replicate the incoming value for other bypass blocks). Adding the extra edge ensures we incoming values for resume phis match the incoming blocks. Still needs various VPlan printing tests to be updated. vplan-printing.ll shows the changes.
1 parent f557672 commit d481278

28 files changed

+250
-257
lines changed

llvm/lib/Transforms/Vectorize/LoopVectorize.cpp

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ class InnerLoopVectorizer {
490490
MinProfitableTripCount(MinProfitableTripCount), UF(UnrollFactor),
491491
Builder(PSE.getSE()->getContext()), Cost(CM), BFI(BFI), PSI(PSI),
492492
RTChecks(RTChecks), Plan(Plan),
493-
VectorPHVPB(Plan.getEntry()->getSingleSuccessor()) {}
493+
VectorPHVPB(Plan.getEntry()->getSuccessors()[1]) {}
494494

495495
virtual ~InnerLoopVectorizer() = default;
496496

@@ -2365,14 +2365,11 @@ InnerLoopVectorizer::getOrCreateVectorTripCount(BasicBlock *InsertBlock) {
23652365
void InnerLoopVectorizer::introduceCheckBlockInVPlan(BasicBlock *CheckIRBB) {
23662366
VPBlockBase *ScalarPH = Plan.getScalarPreheader();
23672367
VPBlockBase *PreVectorPH = VectorPHVPB->getSinglePredecessor();
2368-
if (PreVectorPH->getNumSuccessors() != 1) {
2369-
assert(PreVectorPH->getNumSuccessors() == 2 && "Expected 2 successors");
2370-
assert(PreVectorPH->getSuccessors()[0] == ScalarPH &&
2371-
"Unexpected successor");
2372-
VPIRBasicBlock *CheckVPIRBB = Plan.createVPIRBasicBlock(CheckIRBB);
2373-
VPBlockUtils::insertOnEdge(PreVectorPH, VectorPHVPB, CheckVPIRBB);
2374-
PreVectorPH = CheckVPIRBB;
2375-
}
2368+
assert(PreVectorPH->getNumSuccessors() == 2 && "Expected 2 successors");
2369+
assert(PreVectorPH->getSuccessors()[0] == ScalarPH && "Unexpected successor");
2370+
VPIRBasicBlock *CheckVPIRBB = Plan.createVPIRBasicBlock(CheckIRBB);
2371+
VPBlockUtils::insertOnEdge(PreVectorPH, VectorPHVPB, CheckVPIRBB);
2372+
PreVectorPH = CheckVPIRBB;
23762373
VPBlockUtils::connectBlocks(PreVectorPH, ScalarPH);
23772374
PreVectorPH->swapSuccessors();
23782375

@@ -2463,9 +2460,6 @@ void InnerLoopVectorizer::emitIterationCountCheck(BasicBlock *Bypass) {
24632460
setBranchWeights(BI, MinItersBypassWeights, /*IsExpected=*/false);
24642461
ReplaceInstWithInst(TCCheckBlock->getTerminator(), &BI);
24652462
LoopBypassBlocks.push_back(TCCheckBlock);
2466-
2467-
// TODO: Wrap LoopVectorPreHeader in VPIRBasicBlock here.
2468-
introduceCheckBlockInVPlan(TCCheckBlock);
24692463
}
24702464

24712465
BasicBlock *InnerLoopVectorizer::emitSCEVChecks(BasicBlock *Bypass) {
@@ -7837,7 +7831,7 @@ DenseMap<const SCEV *, Value *> LoopVectorizationPlanner::executePlan(
78377831

78387832
// 1. Set up the skeleton for vectorization, including vector pre-header and
78397833
// middle block. The vector loop is created during VPlan execution.
7840-
VPBasicBlock *VectorPH = cast<VPBasicBlock>(Entry->getSingleSuccessor());
7834+
VPBasicBlock *VectorPH = cast<VPBasicBlock>(Entry->getSuccessors()[1]);
78417835
State.CFG.PrevBB = ILV.createVectorizedLoopSkeleton();
78427836
if (VectorizingEpilogue)
78437837
VPlanTransforms::removeDeadRecipes(BestVPlan);
@@ -8070,7 +8064,8 @@ EpilogueVectorizerMainLoop::emitIterationCountCheck(BasicBlock *Bypass,
80708064
setBranchWeights(BI, MinItersBypassWeights, /*IsExpected=*/false);
80718065
ReplaceInstWithInst(TCCheckBlock->getTerminator(), &BI);
80728066

8073-
introduceCheckBlockInVPlan(TCCheckBlock);
8067+
if (!ForEpilogue)
8068+
introduceCheckBlockInVPlan(TCCheckBlock);
80748069
return TCCheckBlock;
80758070
}
80768071

@@ -8200,7 +8195,6 @@ EpilogueVectorizerEpilogueLoop::emitMinimumVectorEpilogueIterCountCheck(
82008195
Plan.setEntry(NewEntry);
82018196
// OldEntry is now dead and will be cleaned up when the plan gets destroyed.
82028197

8203-
introduceCheckBlockInVPlan(Insert);
82048198
return Insert;
82058199
}
82068200

@@ -9160,7 +9154,7 @@ static void addScalarResumePhis(VPRecipeBuilder &Builder, VPlan &Plan,
91609154
DenseMap<VPValue *, VPValue *> &IVEndValues) {
91619155
VPTypeAnalysis TypeInfo(Plan.getCanonicalIV()->getScalarType());
91629156
auto *ScalarPH = Plan.getScalarPreheader();
9163-
auto *MiddleVPBB = cast<VPBasicBlock>(ScalarPH->getSinglePredecessor());
9157+
auto *MiddleVPBB = cast<VPBasicBlock>(ScalarPH->getPredecessors()[0]);
91649158
VPRegionBlock *VectorRegion = Plan.getVectorLoopRegion();
91659159
VPBuilder VectorPHBuilder(
91669160
cast<VPBasicBlock>(VectorRegion->getSinglePredecessor()));

llvm/lib/Transforms/Vectorize/VPlan.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4246,7 +4246,8 @@ class VPlan {
42464246
/// that this relies on unneeded branches to the scalar tail loop being
42474247
/// removed.
42484248
bool hasScalarTail() const {
4249-
return getScalarPreheader()->getNumPredecessors() != 0;
4249+
return getScalarPreheader()->getNumPredecessors() != 0 &&
4250+
getScalarPreheader()->getSinglePredecessor() != getEntry();
42504251
}
42514252
};
42524253

llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,9 @@ void VPlanTransforms::prepareForVectorization(
546546
if (auto *LatchExitVPB = MiddleVPBB->getSingleSuccessor())
547547
VPBlockUtils::disconnectBlocks(MiddleVPBB, LatchExitVPB);
548548
VPBlockUtils::connectBlocks(MiddleVPBB, ScalarPH);
549+
VPBlockUtils::connectBlocks(Plan.getEntry(), ScalarPH);
550+
Plan.getEntry()->swapSuccessors();
551+
549552
// The exit blocks are unreachable, remove their recipes to make sure no
550553
// users remain that may pessimize transforms.
551554
for (auto *EB : Plan.getExitBlocks()) {
@@ -558,6 +561,9 @@ void VPlanTransforms::prepareForVectorization(
558561
// The connection order corresponds to the operands of the conditional branch,
559562
// with the middle block already connected to the exit block.
560563
VPBlockUtils::connectBlocks(MiddleVPBB, ScalarPH);
564+
// Also connect the entry block to the scalar preheader.
565+
VPBlockUtils::connectBlocks(Plan.getEntry(), ScalarPH);
566+
Plan.getEntry()->swapSuccessors();
561567

562568
auto *ScalarLatchTerm = TheLoop->getLoopLatch()->getTerminator();
563569
// Here we use the same DebugLoc as the scalar loop latch terminator instead

llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1732,7 +1732,7 @@ static void removeBranchOnCondTrue(VPlan &Plan) {
17321732
using namespace llvm::VPlanPatternMatch;
17331733
for (VPBasicBlock *VPBB : VPBlockUtils::blocksOnly<VPBasicBlock>(
17341734
vp_depth_first_shallow(Plan.getEntry()))) {
1735-
if (VPBB->getNumSuccessors() != 2 ||
1735+
if (VPBB->getNumSuccessors() != 2 || isa<VPIRBasicBlock>(VPBB) ||
17361736
!match(&VPBB->back(), m_BranchOnCond(m_True())))
17371737
continue;
17381738

llvm/test/Transforms/LoopVectorize/AArch64/sve-tail-folding-forced.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ target triple = "aarch64-unknown-linux-gnu"
1616
; VPLANS-EMPTY:
1717
; VPLANS-NEXT: ir-bb<entry>:
1818
; VPLANS-NEXT: EMIT vp<[[TC]]> = EXPAND SCEV (1 umax %n)
19-
; VPLANS-NEXT: Successor(s): vector.ph
19+
; VPLANS-NEXT: Successor(s): scalar.ph, vector.ph
2020
; VPLANS-EMPTY:
2121
; VPLANS-NEXT: vector.ph:
2222
; VPLANS-NEXT: EMIT vp<[[NEWTC:%[0-9]+]]> = TC > VF ? TC - VF : 0 vp<[[TC]]>

llvm/test/Transforms/LoopVectorize/AArch64/sve-widen-gep.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ target triple = "aarch64-unknown-linux-gnu"
1515
; CHECK-NEXT: Live-in ir<%N> = original trip-count
1616
; CHECK-EMPTY:
1717
; CHECK-NEXT: ir-bb<entry>:
18-
; CHECK-NEXT: Successor(s): vector.ph
18+
; CHECK-NEXT: Successor(s): scalar.ph, vector.ph
1919
; CHECK-EMPTY:
2020
; CHECK-NEXT: vector.ph:
2121
; CHECK-NEXT: vp<[[END1:%.+]]> = DERIVED-IV ir<%start.1> + vp<[[VEC_TC]]> * ir<8>

llvm/test/Transforms/LoopVectorize/AArch64/sve2-histcnt-vplan.ll

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ target triple = "aarch64-unknown-linux-gnu"
1818
; CHECK-NEXT: Live-in [[OTC:.*]] = original trip-count
1919
; CHECK-EMPTY:
2020
; CHECK-NEXT: ir-bb<entry>:
21-
; CHECK-NEXT: Successor(s): vector.ph
21+
; CHECK-NEXT: Successor(s): scalar.ph, vector.ph
2222
; CHECK-EMPTY:
2323
; CHECK-NEXT: vector.ph:
2424
; CHECK-NEXT: Successor(s): vector loop
@@ -45,6 +45,9 @@ target triple = "aarch64-unknown-linux-gnu"
4545
; CHECK-NEXT: EMIT branch-on-cond [[TC_CHECK]]
4646
; CHECK-NEXT: Successor(s): ir-bb<for.exit>, scalar.ph
4747
; CHECK-EMPTY:
48+
; CHECK-NEXT: ir-bb<for.exit>:
49+
; CHECK-NEXT: No successors
50+
; CHECK-EMPTY:
4851
; CHECK-NEXT: scalar.ph:
4952
; CHECK-NEXT: EMIT vp<[[RESUME:%.+]]> = resume-phi [[VTC]], ir<0>
5053
; CHECK-NEXT: Successor(s): ir-bb<for.body>
@@ -53,9 +56,6 @@ target triple = "aarch64-unknown-linux-gnu"
5356
; CHECK-NEXT: IR %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] (extra operand: vp<[[RESUME]]> from scalar.ph)
5457
; CHECK: IR %exitcond = icmp eq i64 %iv.next, %N
5558
; CHECK-NEXT: No successors
56-
; CHECK-EMPTY:
57-
; CHECK-NEXT: ir-bb<for.exit>:
58-
; CHECK-NEXT: No successors
5959
; CHECK-NEXT: }
6060

6161
;; Check that the vectorized plan contains a histogram recipe instead.
@@ -66,7 +66,7 @@ target triple = "aarch64-unknown-linux-gnu"
6666
; CHECK-NEXT: Live-in [[OTC:.*]] = original trip-count
6767
; CHECK-EMPTY:
6868
; CHECK-NEXT: ir-bb<entry>:
69-
; CHECK-NEXT: Successor(s): vector.ph
69+
; CHECK-NEXT: Successor(s): scalar.ph, vector.ph
7070
; CHECK-EMPTY:
7171
; CHECK-NEXT: vector.ph:
7272
; CHECK-NEXT: Successor(s): vector loop
@@ -92,6 +92,9 @@ target triple = "aarch64-unknown-linux-gnu"
9292
; CHECK-NEXT: EMIT branch-on-cond [[TC_CHECK]]
9393
; CHECK-NEXT: Successor(s): ir-bb<for.exit>, scalar.ph
9494
; CHECK-EMPTY:
95+
; CHECK-NEXT: ir-bb<for.exit>:
96+
; CHECK-NEXT: No successors
97+
; CHECK-EMPTY:
9598
; CHECK-NEXT: scalar.ph:
9699
; CHECK-NEXT: EMIT vp<[[RESUME:%.+]]> = resume-phi [[VTC]], ir<0>
97100
; CHECK-NEXT: Successor(s): ir-bb<for.body>
@@ -100,9 +103,6 @@ target triple = "aarch64-unknown-linux-gnu"
100103
; CHECK-NEXT: IR %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ] (extra operand: vp<[[RESUME]]> from scalar.ph)
101104
; CHECK: IR %exitcond = icmp eq i64 %iv.next, %N
102105
; CHECK-NEXT: No successors
103-
; CHECK-EMPTY:
104-
; CHECK-NEXT: ir-bb<for.exit>:
105-
; CHECK-NEXT: No successors
106106
; CHECK-NEXT: }
107107

108108
define void @simple_histogram(ptr noalias %buckets, ptr readonly %indices, i64 %N) {

llvm/test/Transforms/LoopVectorize/AArch64/synthesize-mask-for-call.ll

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ target triple = "aarch64-unknown-linux-gnu"
1616
; CHECK-NEXT: Live-in ir<1024> = original trip-count
1717
; CHECK-EMPTY:
1818
; CHECK-NEXT: ir-bb<entry>:
19-
; CHECK-NEXT: Successor(s): vector.ph
19+
; CHECK-NEXT: Successor(s): scalar.ph, vector.ph
2020
; CHECK-EMPTY:
2121
; CHECK-NEXT: vector.ph:
2222
; CHECK-NEXT: Successor(s): vector loop
@@ -43,6 +43,9 @@ target triple = "aarch64-unknown-linux-gnu"
4343
; CHECK-NEXT: EMIT branch-on-cond vp<[[CMP]]>
4444
; CHECK-NEXT: Successor(s): ir-bb<for.cond.cleanup>, scalar.ph
4545
; CHECK-EMPTY:
46+
; CHECK-NEXT: ir-bb<for.cond.cleanup>:
47+
; CHECK-NEXT: No successors
48+
; CHECK-EMPTY:
4649
; CHECK-NEXT: scalar.ph:
4750
; CHECK-NEXT: EMIT vp<[[RESUME:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
4851
; CHECK-NEXT: Successor(s): ir-bb<for.body>
@@ -51,9 +54,6 @@ target triple = "aarch64-unknown-linux-gnu"
5154
; CHECK-NEXT: IR %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ] (extra operand: vp<[[RESUME]]> from scalar.ph)
5255
; CHECK: IR %exitcond = icmp eq i64 %indvars.iv.next, 1024
5356
; CHECK-NEXT: No successors
54-
; CHECK-EMPTY:
55-
; CHECK-NEXT: ir-bb<for.cond.cleanup>:
56-
; CHECK-NEXT: No successors
5757
; CHECK-NEXT: }
5858

5959
; CHECK: VPlan 'Initial VPlan for VF={4},UF>=1' {
@@ -63,7 +63,7 @@ target triple = "aarch64-unknown-linux-gnu"
6363
; CHECK-NEXT: Live-in ir<1024> = original trip-count
6464
; CHECK-EMPTY:
6565
; CHECK-NEXT: ir-bb<entry>:
66-
; CHECK-NEXT: Successor(s): vector.ph
66+
; CHECK-NEXT: Successor(s): scalar.ph, vector.ph
6767
; CHECK-EMPTY:
6868
; CHECK-NEXT: vector.ph:
6969
; CHECK-NEXT: Successor(s): vector loop
@@ -90,6 +90,9 @@ target triple = "aarch64-unknown-linux-gnu"
9090
; CHECK-NEXT: EMIT branch-on-cond vp<[[CMP]]>
9191
; CHECK-NEXT: Successor(s): ir-bb<for.cond.cleanup>, scalar.ph
9292
; CHECK-EMPTY:
93+
; CHECK-NEXT: ir-bb<for.cond.cleanup>:
94+
; CHECK-NEXT: No successors
95+
; CHECK-EMPTY:
9396
; CHECK-NEXT: scalar.ph:
9497
; CHECK-NEXT: EMIT vp<[[RESUME:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
9598
; CHECK-NEXT: Successor(s): ir-bb<for.body>
@@ -98,9 +101,6 @@ target triple = "aarch64-unknown-linux-gnu"
98101
; CHECK-NEXT: IR %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ] (extra operand: vp<[[RESUME]]> from scalar.ph)
99102
; CHECK: IR %exitcond = icmp eq i64 %indvars.iv.next, 1024
100103
; CHECK-NEXT: No successors
101-
; CHECK-EMPTY:
102-
; CHECK-NEXT: ir-bb<for.cond.cleanup>:
103-
; CHECK-NEXT: No successors
104104
; CHECK-NEXT: }
105105

106106
;; If we have a masked variant at one VF and an unmasked variant at a different
@@ -115,7 +115,7 @@ target triple = "aarch64-unknown-linux-gnu"
115115
; CHECK-NEXT: Live-in ir<1024> = original trip-count
116116
; CHECK-EMPTY:
117117
; CHECK-NEXT: ir-bb<entry>:
118-
; CHECK-NEXT: Successor(s): vector.ph
118+
; CHECK-NEXT: Successor(s): scalar.ph, vector.ph
119119
; CHECK-EMPTY:
120120
; CHECK-NEXT: vector.ph:
121121
; CHECK-NEXT: Successor(s): vector loop
@@ -142,6 +142,9 @@ target triple = "aarch64-unknown-linux-gnu"
142142
; CHECK-NEXT: EMIT branch-on-cond vp<[[CMP]]>
143143
; CHECK-NEXT: Successor(s): ir-bb<for.cond.cleanup>, scalar.ph
144144
; CHECK-EMPTY:
145+
; CHECK-NEXT: ir-bb<for.cond.cleanup>:
146+
; CHECK-NEXT: No successors
147+
; CHECK-EMPTY:
145148
; CHECK-NEXT: scalar.ph:
146149
; CHECK-NEXT: EMIT vp<[[RESUME:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
147150
; CHECK-NEXT: Successor(s): ir-bb<for.body>
@@ -150,9 +153,6 @@ target triple = "aarch64-unknown-linux-gnu"
150153
; CHECK-NEXT: IR %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
151154
; CHECK: IR %exitcond = icmp eq i64 %indvars.iv.next, 1024
152155
; CHECK-NEXT: No successors
153-
; CHECK-EMPTY:
154-
; CHECK-NEXT: ir-bb<for.cond.cleanup>:
155-
; CHECK-NEXT: No successors
156156
; CHECK-NEXT: }
157157

158158
; CHECK: VPlan 'Initial VPlan for VF={4},UF>=1' {
@@ -162,7 +162,7 @@ target triple = "aarch64-unknown-linux-gnu"
162162
; CHECK-NEXT: Live-in ir<1024> = original trip-count
163163
; CHECK-EMPTY:
164164
; CHECK-NEXT: ir-bb<entry>:
165-
; CHECK-NEXT: Successor(s): vector.ph
165+
; CHECK-NEXT: Successor(s): scalar.ph, vector.ph
166166
; CHECK-EMPTY:
167167
; CHECK-NEXT: vector.ph:
168168
; CHECK-NEXT: Successor(s): vector loop
@@ -189,6 +189,9 @@ target triple = "aarch64-unknown-linux-gnu"
189189
; CHECK-NEXT: EMIT branch-on-cond vp<[[CMP]]>
190190
; CHECK-NEXT: Successor(s): ir-bb<for.cond.cleanup>, scalar.ph
191191
; CHECK-EMPTY:
192+
; CHECK-NEXT: ir-bb<for.cond.cleanup>:
193+
; CHECK-NEXT: No successors
194+
; CHECK-EMPTY:
192195
; CHECK-NEXT: scalar.ph:
193196
; CHECK-NEXT: EMIT vp<[[RESUME:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
194197
; CHECK-NEXT: Successor(s): ir-bb<for.body>
@@ -197,9 +200,6 @@ target triple = "aarch64-unknown-linux-gnu"
197200
; CHECK-NEXT: IR %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ] (extra operand: vp<[[RESUME]]> from scalar.ph)
198201
; CHECK: IR %exitcond = icmp eq i64 %indvars.iv.next, 1024
199202
; CHECK-NEXT: No successors
200-
; CHECK-EMPTY:
201-
; CHECK-NEXT: ir-bb<for.cond.cleanup>:
202-
; CHECK-NEXT: No successors
203203
; CHECK-NEXT: }
204204

205205
;; If we have two variants at different VFs, neither of which are masked, we
@@ -213,7 +213,7 @@ target triple = "aarch64-unknown-linux-gnu"
213213
; CHECK-NEXT: Live-in ir<1024> = original trip-count
214214
; CHECK-EMPTY:
215215
; CHECK-NEXT: ir-bb<entry>:
216-
; CHECK-NEXT: Successor(s): vector.ph
216+
; CHECK-NEXT: Successor(s): scalar.ph, vector.ph
217217
; CHECK-EMPTY:
218218
; CHECK-NEXT: vector.ph:
219219
; CHECK-NEXT: Successor(s): vector loop
@@ -240,6 +240,9 @@ target triple = "aarch64-unknown-linux-gnu"
240240
; CHECK-NEXT: EMIT branch-on-cond vp<[[CMP]]>
241241
; CHECK-NEXT: Successor(s): ir-bb<for.cond.cleanup>, scalar.ph
242242
; CHECK-EMPTY:
243+
; CHECK-NEXT: ir-bb<for.cond.cleanup>:
244+
; CHECK-NEXT: No successors
245+
; CHECK-EMPTY:
243246
; CHECK-NEXT: scalar.ph:
244247
; CHECK-NEXT: EMIT vp<[[RESUME:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
245248
; CHECK-NEXT: Successor(s): ir-bb<for.body>
@@ -248,9 +251,6 @@ target triple = "aarch64-unknown-linux-gnu"
248251
; CHECK-NEXT: IR %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
249252
; CHECK: IR %exitcond = icmp eq i64 %indvars.iv.next, 1024
250253
; CHECK-NEXT: No successors
251-
; CHECK-EMPTY:
252-
; CHECK-NEXT: ir-bb<for.cond.cleanup>:
253-
; CHECK-NEXT: No successors
254254
; CHECK-NEXT: }
255255

256256
; CHECK: VPlan 'Initial VPlan for VF={4},UF>=1' {
@@ -260,7 +260,7 @@ target triple = "aarch64-unknown-linux-gnu"
260260
; CHECK-NEXT: Live-in ir<1024> = original trip-count
261261
; CHECK-EMPTY:
262262
; CHECK-NEXT: ir-bb<entry>:
263-
; CHECK-NEXT: Successor(s): vector.ph
263+
; CHECK-NEXT: Successor(s): scalar.ph, vector.ph
264264
; CHECK-EMPTY:
265265
; CHECK-NEXT: vector.ph:
266266
; CHECK-NEXT: Successor(s): vector loop
@@ -287,6 +287,9 @@ target triple = "aarch64-unknown-linux-gnu"
287287
; CHECK-NEXT: EMIT branch-on-cond vp<[[CMP]]>
288288
; CHECK-NEXT: Successor(s): ir-bb<for.cond.cleanup>, scalar.ph
289289
; CHECK-EMPTY:
290+
; CHECK-NEXT: ir-bb<for.cond.cleanup>:
291+
; CHECK-NEXT: No successors
292+
; CHECK-EMPTY:
290293
; CHECK-NEXT: scalar.ph:
291294
; CHECK-NEXT: EMIT vp<[[RESUME:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
292295
; CHECK-NEXT: Successor(s): ir-bb<for.body>
@@ -295,9 +298,6 @@ target triple = "aarch64-unknown-linux-gnu"
295298
; CHECK-NEXT: IR %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ] (extra operand: vp<[[RESUME]]> from scalar.ph)
296299
; CHECK: IR %exitcond = icmp eq i64 %indvars.iv.next, 1024
297300
; CHECK-NEXT: No successors
298-
; CHECK-EMPTY:
299-
; CHECK-NEXT: ir-bb<for.cond.cleanup>:
300-
; CHECK-NEXT: No successors
301301
; CHECK-NEXT: }
302302

303303
define void @test_v4_v4m(ptr noalias %a, ptr readonly %b) #3 {

llvm/test/Transforms/LoopVectorize/AArch64/vplan-printing.ll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ define i32 @print_partial_reduction(ptr %a, ptr %b) {
1414
; CHECK-NEXT: Live-in ir<1024> = original trip-count
1515
; CHECK-EMPTY:
1616
; CHECK-NEXT: ir-bb<entry>:
17-
; CHECK-NEXT: Successor(s): vector.ph
17+
; CHECK-NEXT: Successor(s): scalar.ph, vector.ph
1818
; CHECK-EMPTY:
1919
; CHECK-NEXT: vector.ph:
2020
; CHECK-NEXT: Successor(s): vector loop
@@ -47,6 +47,10 @@ define i32 @print_partial_reduction(ptr %a, ptr %b) {
4747
; CHECK-NEXT: EMIT branch-on-cond vp<[[CMP]]>
4848
; CHECK-NEXT: Successor(s): ir-bb<exit>, scalar.ph
4949
; CHECK-EMPTY:
50+
; CHECK-NEXT: ir-bb<exit>:
51+
; CHECK-NEXT: IR %add.lcssa = phi i32 [ %add, %for.body ] (extra operand: vp<[[EXTRACT]]> from middle.block)
52+
; CHECK-NEXT: No successors
53+
; CHECK-EMPTY:
5054
; CHECK-NEXT: scalar.ph:
5155
; CHECK-NEXT: EMIT vp<%bc.resume.val> = resume-phi vp<[[VEC_TC]]>, ir<0>
5256
; CHECK-NEXT: EMIT vp<%bc.merge.rdx> = resume-phi vp<[[RED_RESULT]]>, ir<0>
@@ -66,10 +70,6 @@ define i32 @print_partial_reduction(ptr %a, ptr %b) {
6670
; CHECK-NEXT: IR %iv.next = add i64 %iv, 1
6771
; CHECK-NEXT: IR %exitcond.not = icmp eq i64 %iv.next, 1024
6872
; CHECK-NEXT: No successors
69-
; CHECK-EMPTY:
70-
; CHECK-NEXT: ir-bb<exit>:
71-
; CHECK-NEXT: IR %add.lcssa = phi i32 [ %add, %for.body ] (extra operand: vp<[[EXTRACT]]> from middle.block)
72-
; CHECK-NEXT: No successors
7373
; CHECK-NEXT: }
7474
; CHECK: VPlan 'Final VPlan for VF={8,16},UF={1}' {
7575
; CHECK-NEXT: Live-in ir<[[EP_VFxUF:.+]]> = VF * UF

0 commit comments

Comments
 (0)