Skip to content

Commit ab33427

Browse files
committed
[VPlan] Print live-in backedge taken count as part of plan.
At the moment, a VPValue is created for the backedge-taken count, which is used by some recipes. To make it easier to identify the operands of recipes using the backedge-taken count, print it at the beginning of the VPlan if it is used. Reviewed By: a.elovikov Differential Revision: https://reviews.llvm.org/D111298
1 parent a6c9506 commit ab33427

File tree

3 files changed

+52
-15
lines changed

3 files changed

+52
-15
lines changed

llvm/lib/Transforms/Vectorize/VPlan.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,13 @@ void VPlan::print(raw_ostream &O) const {
884884
VPSlotTracker SlotTracker(this);
885885

886886
O << "VPlan '" << Name << "' {";
887+
888+
if (BackedgeTakenCount && BackedgeTakenCount->getNumUsers()) {
889+
O << "\nLive-in ";
890+
BackedgeTakenCount->printAsOperand(O, SlotTracker);
891+
O << " = backedge-taken count\n";
892+
}
893+
887894
for (const VPBlockBase *Block : depth_first(getEntry())) {
888895
O << '\n';
889896
Block->print(O, "", SlotTracker);

llvm/test/Transforms/LoopVectorize/first-order-recurrence-sink-replicate-region.ll

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
99
define void @sink_replicate_region_1(i32 %x, i8* %ptr) optsize {
1010
; CHECK-LABEL: sink_replicate_region_1
1111
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
12+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
13+
; CHECK-EMPTY:
1214
; CHECK-NEXT: loop:
1315
; CHECK-NEXT: FIRST-ORDER-RECURRENCE-PHI ir<%0> = phi ir<0>, ir<%conv>
1416
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
15-
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<{{.+}}>
17+
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<[[BTC]]>
1618
; CHECK-NEXT: Successor(s): loop.0
1719
; CHECK-EMPTY:
1820
; CHECK-NEXT: loop.0:
@@ -83,10 +85,12 @@ exit:
8385
define void @sink_replicate_region_2(i32 %x, i8 %y, i32* %ptr) optsize {
8486
; CHECK-LABEL: sink_replicate_region_2
8587
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
88+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
89+
; CHECK-EMPTY:
8690
; CHECK-NEXT: loop:
8791
; CHECK-NEXT: FIRST-ORDER-RECURRENCE-PHI ir<%recur> = phi ir<0>, ir<%recur.next>
8892
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
89-
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<{{.+}}>
93+
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<[[BTC]]>
9094
; CHECK-NEXT: Successor(s): loop.0
9195
; CHECK-EMPTY:
9296
; CHECK-NEXT: loop.0:
@@ -142,11 +146,13 @@ exit:
142146
define i32 @sink_replicate_region_3_reduction(i32 %x, i8 %y, i32* %ptr) optsize {
143147
; CHECK-LABEL: sink_replicate_region_3_reduction
144148
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
149+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
150+
; CHECK-EMPTY:
145151
; CHECK-NEXT: loop:
146152
; CHECK-NEXT: FIRST-ORDER-RECURRENCE-PHI ir<%recur> = phi ir<0>, ir<%recur.next>
147153
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
148154
; CHECK-NEXT: WIDEN-REDUCTION-PHI ir<%and.red> = phi ir<1234>, ir<%and.red.next>
149-
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<{{.+}}>
155+
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<[[BTC]]>
150156
; CHECK-NEXT: Successor(s): loop.0
151157
; CHECK-EMPTY:
152158
; CHECK-NEXT: loop.0:
@@ -202,10 +208,12 @@ exit:
202208
define void @sink_replicate_region_4_requires_split_at_end_of_block(i32 %x, i8* %ptr) optsize {
203209
; CHECK-LABEL: sink_replicate_region_4_requires_split_at_end_of_block
204210
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
211+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
212+
; CHECK-EMPTY:
205213
; CHECK-NEXT: loop:
206214
; CHECK-NEXT: FIRST-ORDER-RECURRENCE-PHI ir<%0> = phi ir<0>, ir<%conv>
207215
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
208-
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<{{.+}}>
216+
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<[[BTC]]>
209217
; CHECK-NEXT: REPLICATE ir<%gep> = getelementptr ir<%ptr>, ir<%iv>
210218
; CHECK-NEXT: Successor(s): loop.0
211219
; CHECK-EMPTY:
@@ -286,10 +294,12 @@ exit:
286294
define void @sink_replicate_region_after_replicate_region(i32* %ptr, i32 %x, i8 %y) optsize {
287295
; CHECK-LABEL: sink_replicate_region_after_replicate_region
288296
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
297+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
298+
; CHECK-EMPTY:
289299
; CHECK-NEXT: loop:
290300
; CHECK-NEXT: FIRST-ORDER-RECURRENCE-PHI ir<%recur> = phi ir<0>, ir<%recur.next>
291301
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
292-
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<{{.+}}>
302+
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<[[BTC]]>
293303
; CHECK-NEXT: Successor(s): loop.0
294304
; CHECK-EMPTY:
295305
; CHECK-NEXT: loop.0:

llvm/test/Transforms/LoopVectorize/vplan-sink-scalars-and-merge.ll

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
1111

1212
; CHECK-LABEL: LV: Checking a loop in "sink1"
1313
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
14+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
15+
; CHECK-EMPTY:
1416
; CHECK-NEXT: loop:
1517
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
16-
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<%0>
18+
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<[[BTC]]>
1719
; CHECK-NEXT: Successor(s): loop.0
1820

1921
; CHECK: loop.0:
@@ -69,9 +71,11 @@ exit:
6971

7072
; CHECK-LABEL: LV: Checking a loop in "sink2"
7173
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
74+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
75+
; CHECK-EMPTY:
7276
; CHECK-NEXT: loop:
7377
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
74-
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<%0>
78+
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<[[BTC]]>
7579
; CHECK-NEXT: Successor(s): pred.load
7680

7781
; CHECK: <xVFxUF> pred.load: {
@@ -140,9 +144,11 @@ exit:
140144

141145
; CHECK-LABEL: LV: Checking a loop in "sink3"
142146
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
147+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
148+
; CHECK-EMPTY:
143149
; CHECK-NEXT: loop:
144150
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
145-
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<%0>
151+
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<[[BTC]]>
146152
; CHECK-NEXT: Successor(s): pred.load
147153

148154
; CHECK: <xVFxUF> pred.load: {
@@ -213,10 +219,12 @@ exit:
213219
define void @uniform_gep(i64 %k, i16* noalias %A, i16* noalias %B) {
214220
; CHECK-LABEL: LV: Checking a loop in "uniform_gep"
215221
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
222+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
223+
; CHECK-EMPTY:
216224
; CHECK-NEXT: loop:
217225
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 21, %iv.next
218226
; CHECK-NEXT: EMIT vp<[[CAN_IV:%.+]]> = WIDEN-CANONICAL-INDUCTION
219-
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule vp<[[CAN_IV]]> vp<%0>
227+
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule vp<[[CAN_IV]]> vp<[[BTC]]>
220228
; CHECK-NEXT: CLONE ir<%gep.A.uniform> = getelementptr ir<%A>, ir<0>
221229
; CHECK-NEXT: Successor(s): pred.load
222230
; CHECK-EMPTY:
@@ -295,14 +303,16 @@ exit:
295303
define void @pred_cfg1(i32 %k, i32 %j) {
296304
; CHECK-LABEL: LV: Checking a loop in "pred_cfg1"
297305
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
306+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
307+
; CHECK-EMPTY:
298308
; CHECK-NEXT: loop:
299309
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
300310
; CHECK-NEXT: WIDEN ir<%c.1> = icmp ir<%iv>, ir<%j>
301311
; CHECK-NEXT: WIDEN ir<%mul> = mul ir<%iv>, ir<10>
302312
; CHECK-NEXT: Successor(s): then.0
303313
; CHECK-EMPTY:
304314
; CHECK-NEXT: then.0:
305-
; CHECK-NEXT: EMIT vp<[[MASK1:%.+]]> = icmp ule ir<%iv> vp<%0>
315+
; CHECK-NEXT: EMIT vp<[[MASK1:%.+]]> = icmp ule ir<%iv> vp<[[BTC]]>
306316
; CHECK-NEXT: EMIT vp<[[MASK2:%.+]]> = select vp<[[MASK1]]> ir<%c.1> ir<false>
307317
; CHECK-NEXT: Successor(s): pred.load
308318
; CHECK-EMPTY:
@@ -388,6 +398,8 @@ exit:
388398
define void @pred_cfg2(i32 %k, i32 %j) {
389399
; CHECK-LABEL: LV: Checking a loop in "pred_cfg2"
390400
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
401+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
402+
; CHECK-EMPTY:
391403
; CHECK-NEXT: loop:
392404
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
393405
; CHECK-NEXT: WIDEN ir<%mul> = mul ir<%iv>, ir<10>
@@ -396,7 +408,7 @@ define void @pred_cfg2(i32 %k, i32 %j) {
396408
; CHECK-NEXT: Successor(s): then.0
397409
; CHECK-EMPTY:
398410
; CHECK-NEXT: then.0:
399-
; CHECK-NEXT: EMIT vp<[[MASK1:%.+]]> = icmp ule ir<%iv> vp<%0>
411+
; CHECK-NEXT: EMIT vp<[[MASK1:%.+]]> = icmp ule ir<%iv> vp<[[BTC]]>
400412
; CHECK-NEXT: EMIT vp<[[MASK2:%.+]]> = select vp<[[MASK1]]> ir<%c.0> ir<false>
401413
; CHECK-NEXT: Successor(s): pred.load
402414
; CHECK-EMPTY:
@@ -496,14 +508,16 @@ exit:
496508
define void @pred_cfg3(i32 %k, i32 %j) {
497509
; CHECK-LABEL: LV: Checking a loop in "pred_cfg3"
498510
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
511+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
512+
; CHECK-EMPTY:
499513
; CHECK-NEXT: loop:
500514
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
501515
; CHECK-NEXT: WIDEN ir<%mul> = mul ir<%iv>, ir<10>
502516
; CHECK-NEXT: WIDEN ir<%c.0> = icmp ir<%iv>, ir<%j>
503517
; CHECK-NEXT: Successor(s): then.0
504518
; CHECK-EMPTY:
505519
; CHECK-NEXT: then.0:
506-
; CHECK-NEXT: EMIT vp<[[MASK1:%.+]]> = icmp ule ir<%iv> vp<%0>
520+
; CHECK-NEXT: EMIT vp<[[MASK1:%.+]]> = icmp ule ir<%iv> vp<[[BTC]]>
507521
; CHECK-NEXT: EMIT vp<[[MASK2:%.+]]> = select vp<[[MASK1:%.+]]> ir<%c.0> ir<false>
508522
; CHECK-NEXT: Successor(s): pred.load
509523
; CHECK-EMPTY:
@@ -598,9 +612,11 @@ exit:
598612
define void @merge_3_replicate_region(i32 %k, i32 %j) {
599613
; CHECK-LABEL: LV: Checking a loop in "merge_3_replicate_region"
600614
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
615+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
616+
; CHECK-EMPTY:
601617
; CHECK-NEXT: loop:
602618
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
603-
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<%0>
619+
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<[[BTC]]>
604620
; CHECK-NEXT: REPLICATE ir<%gep.a> = getelementptr ir<@a>, ir<0>, ir<%iv>
605621
; CHECK-NEXT: Successor(s): loop.0
606622
; CHECK-EMPTY:
@@ -705,9 +721,11 @@ exit:
705721
define void @update_2_uses_in_same_recipe_in_merged_block(i32 %k) {
706722
; CHECK-LABEL: LV: Checking a loop in "update_2_uses_in_same_recipe_in_merged_block"
707723
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
724+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
725+
; CHECK-EMPTY:
708726
; CHECK-NEXT: loop:
709727
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
710-
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<%0>
728+
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<[[BTC]]>
711729
; CHECK-NEXT: REPLICATE ir<%gep.a> = getelementptr ir<@a>, ir<0>, ir<%iv>
712730
; CHECK-NEXT: Successor(s): loop.0
713731
; CHECK-EMPTY:
@@ -764,10 +782,12 @@ exit:
764782
define void @recipe_in_merge_candidate_used_by_first_order_recurrence(i32 %k) {
765783
; CHECK-LABEL: LV: Checking a loop in "recipe_in_merge_candidate_used_by_first_order_recurrence"
766784
; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
785+
; CHECK-NEXT: Live-in vp<[[BTC:%.+]]> = backedge-taken count
786+
; CHECK-EMPTY:
767787
; CHECK-NEXT: loop:
768788
; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
769789
; CHECK-NEXT: FIRST-ORDER-RECURRENCE-PHI ir<%for> = phi ir<0>, ir<%lv.a>
770-
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<%0>
790+
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv> vp<[[BTC]]>
771791
; CHECK-NEXT: REPLICATE ir<%gep.a> = getelementptr ir<@a>, ir<0>, ir<%iv>
772792
; CHECK-NEXT: Successor(s): pred.load
773793
; CHECK-EMPTY:

0 commit comments

Comments
 (0)