Skip to content

Commit 972ee3b

Browse files
committed
Fix vplan tests
1 parent e39fef4 commit 972ee3b

File tree

2 files changed

+119
-66
lines changed

2 files changed

+119
-66
lines changed

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

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ define void @sink_replicate_region_1(i32 %x, ptr %ptr, ptr noalias %dst) optsize
4949
; CHECK-NEXT: loop.0:
5050
; CHECK-NEXT: WIDEN-CAST ir<%conv> = sext vp<[[PRED1]]> to i32
5151
; CHECK-NEXT: EMIT vp<[[SPLICE:%.+]]> = first-order splice ir<%0>, ir<%conv>
52+
; CHECK-NEXT: WIDEN ir<%rem> = srem vp<[[SPLICE]]>, ir<%x>
53+
; CHECK-NEXT: WIDEN ir<%add> = add ir<%conv>, ir<%rem>
5254
; CHECK-NEXT: Successor(s): pred.store
5355
; CHECK-EMPTY:
5456
; CHECK-NEXT: <xVFxUF> pred.store: {
@@ -57,9 +59,7 @@ define void @sink_replicate_region_1(i32 %x, ptr %ptr, ptr noalias %dst) optsize
5759
; CHECK-NEXT: Successor(s): pred.store.if, pred.store.continue
5860
; CHECK-EMPTY:
5961
; CHECK-NEXT: pred.store.if:
60-
; CHECK-NEXT: REPLICATE ir<%rem> = srem vp<[[SPLICE]]>, ir<%x>
6162
; CHECK-NEXT: REPLICATE ir<%gep.dst> = getelementptr ir<%dst>, vp<[[STEPS]]>
62-
; CHECK-NEXT: REPLICATE ir<%add> = add ir<%conv>, ir<%rem>
6363
; CHECK-NEXT: REPLICATE store ir<%add>, ir<%gep.dst>
6464
; CHECK-NEXT: Successor(s): pred.store.continue
6565
; CHECK-EMPTY:
@@ -125,6 +125,8 @@ define void @sink_replicate_region_2(i32 %x, i8 %y, ptr %ptr) optsize {
125125
; CHECK-NEXT: ir<%iv> = WIDEN-INDUCTION ir<0>, ir<1>, vp<[[VF]]>
126126
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv>, vp<[[BTC]]>
127127
; CHECK-NEXT: EMIT vp<[[SPLICE:%.+]]> = first-order splice ir<%recur>, ir<%recur.next>
128+
; CHECK-NEXT: WIDEN ir<%rem> = srem vp<[[SPLICE]]>, ir<%x>
129+
; CHECK-NEXT: WIDEN ir<%add> = add ir<%rem>, ir<%recur.next>
128130
; CHECK-NEXT: Successor(s): pred.store
129131
; CHECK-EMPTY:
130132
; CHECK-NEXT: <xVFxUF> pred.store: {
@@ -134,9 +136,7 @@ define void @sink_replicate_region_2(i32 %x, i8 %y, ptr %ptr) optsize {
134136
; CHECK-EMPTY:
135137
; CHECK-NEXT: pred.store.if:
136138
; CHECK-NEXT: vp<[[STEPS:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1>
137-
; CHECK-NEXT: REPLICATE ir<%rem> = srem vp<[[SPLICE]]>, ir<%x>
138139
; CHECK-NEXT: REPLICATE ir<%gep> = getelementptr ir<%ptr>, vp<[[STEPS]]>
139-
; CHECK-NEXT: REPLICATE ir<%add> = add ir<%rem>, ir<%recur.next>
140140
; CHECK-NEXT: REPLICATE store ir<%add>, ir<%gep>
141141
; CHECK-NEXT: Successor(s): pred.store.continue
142142
; CHECK-EMPTY:
@@ -284,27 +284,44 @@ define void @sink_replicate_region_4_requires_split_at_end_of_block(i32 %x, ptr
284284
; CHECK-NEXT: loop.0:
285285
; CHECK-NEXT: WIDEN-CAST ir<%conv> = sext vp<[[PRED]]> to i32
286286
; CHECK-NEXT: EMIT vp<[[SPLICE:%.+]]> = first-order splice ir<%0>, ir<%conv>
287-
; CHECK-NEXT: Successor(s): pred.store
287+
; CHECK-NEXT: WIDEN ir<%rem> = srem vp<[[SPLICE]]>, ir<%x>
288+
; CHECK-NEXT: Successor(s): pred.load
288289
; CHECK-EMPTY:
289-
; CHECK: <xVFxUF> pred.store: {
290-
; CHECK-NEXT: pred.store.entry:
290+
; CHECK: <xVFxUF> pred.load: {
291+
; CHECK-NEXT: pred.load.entry:
291292
; CHECK-NEXT: BRANCH-ON-MASK vp<[[MASK]]>
292-
; CHECK-NEXT: Successor(s): pred.store.if, pred.store.continue
293+
; CHECK-NEXT: Successor(s): pred.load.if, pred.load.continue
293294
; CHECK-EMPTY:
294-
; CHECK: pred.store.if:
295-
; CHECK-NEXT: REPLICATE ir<%lv.2> = load ir<%gep>
296-
; CHECK-NEXT: REPLICATE ir<%rem> = srem vp<[[SPLICE]]>, ir<%x>
297-
; CHECK-NEXT: REPLICATE ir<%conv.lv.2> = sext ir<%lv.2>
298-
; CHECK-NEXT: REPLICATE ir<%add.1> = add ir<%conv>, ir<%rem>
299-
; CHECK-NEXT: REPLICATE ir<%gep.dst> = getelementptr ir<%dst>, vp<[[STEPS]]>
300-
; CHECK-NEXT: REPLICATE ir<%add> = add ir<%add.1>, ir<%conv.lv.2>
301-
; CHECK-NEXT: REPLICATE store ir<%add>, ir<%gep.dst>
302-
; CHECK-NEXT: Successor(s): pred.store.continue
295+
; CHECK: pred.load.if:
296+
; CHECK-NEXT: REPLICATE ir<%lv.2> = load ir<%gep> (S->V)
297+
; CHECK-NEXT: Successor(s): pred.load.continue
303298
; CHECK-EMPTY:
304-
; CHECK: pred.store.continue:
299+
; CHECK: pred.load.continue:
300+
; CHECK-NEXT: PHI-PREDICATED-INSTRUCTION vp<%9> = ir<%lv.2>
305301
; CHECK-NEXT: No successors
306302
; CHECK-NEXT: }
307-
; CHECK-NEXT: Successor(s): loop.2
303+
; CHECK-NEXT: Successor(s): loop.1
304+
; CHECK-EMPTY:
305+
; CHECK-NEXT: loop.1:
306+
; CHECK-NEXT: WIDEN ir<%add.1> = add ir<%conv>, ir<%rem>
307+
; CHECK-NEXT: WIDEN-CAST ir<%conv.lv.2> = sext vp<%9> to i32
308+
; CHECK-NEXT: WIDEN ir<%add> = add ir<%add.1>, ir<%conv.lv.2>
309+
; CHECK-NEXT: Successor(s): pred.store
310+
; CHECK-EMPTY:
311+
; CHECK-NEXT: <xVFxUF> pred.store: {
312+
; CHECK-NEXT: pred.store.entry:
313+
; CHECK-NEXT: BRANCH-ON-MASK vp<[[MASK]]>
314+
; CHECK-NEXT: Successor(s): pred.store.if, pred.store.continue
315+
; CHECK-EMPTY:
316+
; CHECK-NEXT: pred.store.if:
317+
; CHECK-NEXT: REPLICATE ir<%gep.dst> = getelementptr ir<%dst>, vp<[[STEPS]]>
318+
; CHECK-NEXT: REPLICATE store ir<%add>, ir<%gep.dst>
319+
; CHECK-NEXT: Successor(s): pred.store.continue
320+
; CHECK-EMPTY:
321+
; CHECK-NEXT: pred.store.continue:
322+
; CHECK-NEXT: No successors
323+
; CHECK-NEXT: }
324+
; CHECK-NEXT: Successor(s): loop.2
308325
; CHECK-EMPTY:
309326
; CHECK: loop.2:
310327
; CHECK-NEXT: EMIT vp<[[CAN_IV_NEXT:%.+]]> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
@@ -368,6 +385,7 @@ define void @sink_replicate_region_after_replicate_region(ptr %ptr, ptr noalias
368385
; CHECK-NEXT: ir<%iv> = WIDEN-INDUCTION ir<0>, ir<1>, vp<[[VF]]>
369386
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv>, vp<[[BTC]]>
370387
; CHECK-NEXT: EMIT vp<[[SPLICE:%.+]]> = first-order splice ir<%recur>, ir<%recur.next>
388+
; CHECK-NEXT: WIDEN ir<%rem> = srem vp<[[SPLICE]]>, ir<%x>
371389
; CHECK-NEXT: Successor(s): pred.store
372390
; CHECK-EMPTY:
373391
; CHECK-NEXT: <xVFxUF> pred.store: {
@@ -377,7 +395,6 @@ define void @sink_replicate_region_after_replicate_region(ptr %ptr, ptr noalias
377395
; CHECK-EMPTY:
378396
; CHECK-NEXT: pred.store.if:
379397
; CHECK-NEXT: vp<[[STEPS:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1>
380-
; CHECK-NEXT: REPLICATE ir<%rem> = srem vp<[[SPLICE]]>, ir<%x>
381398
; CHECK-NEXT: REPLICATE ir<%rem.div> = sdiv ir<20>, ir<%rem>
382399
; CHECK-NEXT: REPLICATE ir<%gep> = getelementptr ir<%ptr>, vp<[[STEPS]]>
383400
; CHECK-NEXT: REPLICATE store ir<%rem.div>, ir<%gep>
@@ -448,6 +465,7 @@ define void @need_new_block_after_sinking_pr56146(i32 %x, ptr %src, ptr noalias
448465
; CHECK-NEXT: EMIT vp<[[CMP:%.+]]> = icmp ule vp<[[WIDE_IV]]>, vp<[[BTC]]>
449466
; CHECK-NEXT: CLONE ir<[[L]]> = load ir<%src>
450467
; CHECK-NEXT: EMIT vp<[[SPLICE:%.+]]> = first-order splice ir<%.pn>, ir<[[L]]>
468+
; CHECK-NEXT: WIDEN ir<%val> = sdiv vp<[[SPLICE]]>, ir<%x>
451469
; CHECK-NEXT: Successor(s): pred.store
452470
; CHECK-EMPTY:
453471
; CHECK-NEXT: <xVFxUF> pred.store: {
@@ -458,7 +476,6 @@ define void @need_new_block_after_sinking_pr56146(i32 %x, ptr %src, ptr noalias
458476
; CHECK-NEXT: pred.store.if:
459477
; CHECK-NEXT: vp<[[SCALAR_STEPS:%.+]]> = SCALAR-STEPS vp<[[DERIVED_IV]]>, ir<1>, vp<[[VF]]>
460478
; CHECK-NEXT: REPLICATE ir<%gep.dst> = getelementptr ir<%dst>, vp<[[SCALAR_STEPS]]>
461-
; CHECK-NEXT: REPLICATE ir<%val> = sdiv vp<[[SPLICE]]>, ir<%x>
462479
; CHECK-NEXT: REPLICATE store ir<%val>, ir<%gep.dst>
463480
; CHECK-NEXT: Successor(s): pred.store.continue
464481
; CHECK-EMPTY:

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

Lines changed: 81 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -28,28 +28,45 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
2828
; CHECK-NEXT: vector.body:
2929
; CHECK-NEXT: EMIT vp<[[CAN_IV:%.+]]> = CANONICAL-INDUCTION
3030
; CHECK-NEXT: ir<%iv> = WIDEN-INDUCTION ir<0>, ir<1>, vp<[[VF]]>
31+
; CHECK-NEXT: vp<[[STEPS:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1>, vp<[[VF]]>
3132
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv>, vp<[[BTC]]>
32-
; CHECK-NEXT: Successor(s): pred.store
33-
34-
; CHECK: <xVFxUF> pred.store: {
35-
; CHECK-NEXT: pred.store.entry:
36-
; CHECK-NEXT: BRANCH-ON-MASK vp<[[MASK]]>
37-
; CHECK-NEXT: Successor(s): pred.store.if, pred.store.continue
38-
39-
; CHECK: pred.store.if:
40-
; CHECK-NEXT: vp<[[STEPS:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1>
41-
; CHECK-NEXT: REPLICATE ir<%gep.b> = getelementptr inbounds ir<@b>, ir<0>, vp<[[STEPS]]>
42-
; CHECK-NEXT: REPLICATE ir<%lv.b> = load ir<%gep.b>
43-
; CHECK-NEXT: REPLICATE ir<%add> = add ir<%lv.b>, ir<10>
44-
; CHECK-NEXT: REPLICATE ir<%gep.a> = getelementptr inbounds ir<@a>, ir<0>, vp<[[STEPS]]
45-
; CHECK-NEXT: REPLICATE ir<%mul> = mul ir<2>, ir<%add>
46-
; CHECK-NEXT: REPLICATE store ir<%mul>, ir<%gep.a>
47-
; CHECK-NEXT: Successor(s): pred.store.continue
48-
49-
; CHECK: pred.store.continue:
50-
; CHECK-NEXT: No successors
51-
; CHECK-NEXT: }
52-
33+
; CHECK-NEXT: Successor(s): pred.load
34+
; CHECK-EMPTY:
35+
; CHECK-NEXT: <xVFxUF> pred.load: {
36+
; CHECK-NEXT: pred.load.entry:
37+
; CHECK-NEXT: BRANCH-ON-MASK vp<[[MASK]]>
38+
; CHECK-NEXT: Successor(s): pred.load.if, pred.load.continue
39+
; CHECK-EMPTY:
40+
; CHECK-NEXT: pred.load.if:
41+
; CHECK-NEXT: REPLICATE ir<%gep.b> = getelementptr inbounds ir<@b>, ir<0>, vp<[[STEPS]]>
42+
; CHECK-NEXT: REPLICATE ir<%lv.b> = load ir<%gep.b> (S->V)
43+
; CHECK-NEXT: Successor(s): pred.load.continue
44+
; CHECK-EMPTY:
45+
; CHECK-NEXT: pred.load.continue:
46+
; CHECK-NEXT: PHI-PREDICATED-INSTRUCTION vp<%8> = ir<%lv.b>
47+
; CHECK-NEXT: No successors
48+
; CHECK-NEXT: }
49+
; CHECK-NEXT: Successor(s): loop.0
50+
; CHECK-EMPTY:
51+
; CHECK-NEXT: loop.0:
52+
; CHECK-NEXT: WIDEN ir<%add> = add vp<%8>, ir<10>
53+
; CHECK-NEXT: WIDEN ir<%mul> = mul ir<2>, ir<%add>
54+
; CHECK-NEXT: Successor(s): pred.store
55+
; CHECK-EMPTY:
56+
; CHECK-NEXT: <xVFxUF> pred.store: {
57+
; CHECK-NEXT: pred.store.entry:
58+
; CHECK-NEXT: BRANCH-ON-MASK vp<[[MASK]]>
59+
; CHECK-NEXT: Successor(s): pred.store.if, pred.store.continue
60+
; CHECK-EMPTY:
61+
; CHECK-NEXT: pred.store.if:
62+
; CHECK-NEXT: REPLICATE ir<%gep.a> = getelementptr inbounds ir<@a>, ir<0>, vp<[[STEPS]]>
63+
; CHECK-NEXT: REPLICATE store ir<%mul>, ir<%gep.a>
64+
; CHECK-NEXT: Successor(s): pred.store.continue
65+
; CHECK-EMPTY:
66+
; CHECK-NEXT: pred.store.continue:
67+
; CHECK-NEXT: No successors
68+
; CHECK-NEXT: }
69+
; CHECK-NEXT: Successor(s): loop.1
5370
; CHECK: loop.1:
5471
; CHECK-NEXT: EMIT vp<[[CAN_IV_NEXT:%.+]]> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
5572
; CHECK-NEXT: EMIT branch-on-count vp<[[CAN_IV_NEXT]]>, vp<[[VEC_TC]]>
@@ -760,28 +777,46 @@ define void @update_2_uses_in_same_recipe_in_merged_block(i32 %k) {
760777
; CHECK-NEXT: vector.body:
761778
; CHECK-NEXT: EMIT vp<[[CAN_IV:%.+]]> = CANONICAL-INDUCTION
762779
; CHECK-NEXT: ir<%iv> = WIDEN-INDUCTION ir<0>, ir<1>, vp<[[VF]]>
780+
; CHECK-NEXT: vp<[[STEPS:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1>, vp<[[VF]]>
763781
; CHECK-NEXT: EMIT vp<[[MASK:%.+]]> = icmp ule ir<%iv>, vp<[[BTC]]>
764-
; CHECK-NEXT: Successor(s): pred.store
765-
; CHECK-EMPTY:
766-
; CHECK-NEXT: <xVFxUF> pred.store: {
767-
; CHECK-NEXT: pred.store.entry:
768-
; CHECK-NEXT: BRANCH-ON-MASK vp<[[MASK]]>
769-
; CHECK-NEXT: Successor(s): pred.store.if, pred.store.continue
770-
; CHECK-EMPTY:
771-
; CHECK-NEXT: pred.store.if:
772-
; CHECK-NEXT: vp<[[STEPS:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1>
773-
; CHECK-NEXT: REPLICATE ir<%gep.a> = getelementptr inbounds ir<@a>, ir<0>, vp<[[STEPS]]>
774-
; CHECK-NEXT: REPLICATE ir<%lv.a> = load ir<%gep.a>
775-
; CHECK-NEXT: REPLICATE ir<%div> = sdiv ir<%lv.a>, ir<%lv.a>
776-
; CHECK-NEXT: REPLICATE store ir<%div>, ir<%gep.a>
777-
; CHECK-NEXT: Successor(s): pred.store.continue
778-
; CHECK-EMPTY:
779-
; CHECK-NEXT: pred.store.continue:
780-
; CHECK-NEXT: No successors
781-
; CHECK-NEXT: }
782-
; CHECK-NEXT: Successor(s): loop.2
783-
; CHECK-EMPTY:
784-
; CHECK-NEXT: loop.2:
782+
; CHECK-NEXT: REPLICATE ir<%gep.a> = getelementptr inbounds ir<@a>, ir<0>, vp<[[STEPS]]>
783+
; CHECK-NEXT: Successor(s): pred.load
784+
; CHECK-EMPTY:
785+
; CHECK-NEXT: <xVFxUF> pred.load: {
786+
; CHECK-NEXT: pred.load.entry:
787+
; CHECK-NEXT: BRANCH-ON-MASK vp<[[MASK]]>
788+
; CHECK-NEXT: Successor(s): pred.load.if, pred.load.continue
789+
; CHECK-EMPTY:
790+
; CHECK-NEXT: pred.load.if:
791+
; CHECK-NEXT: REPLICATE ir<%lv.a> = load ir<%gep.a> (S->V)
792+
; CHECK-NEXT: Successor(s): pred.load.continue
793+
; CHECK-EMPTY:
794+
; CHECK-NEXT: pred.load.continue:
795+
; CHECK-NEXT: PHI-PREDICATED-INSTRUCTION vp<[[PRED:%.+]]> = ir<%lv.a>
796+
; CHECK-NEXT: No successors
797+
; CHECK-NEXT: }
798+
; CHECK-NEXT: Successor(s): loop.0
799+
; CHECK-EMPTY:
800+
; CHECK-NEXT: loop.0:
801+
; CHECK-NEXT: EMIT vp<[[SELECT:%.+]]> = select vp<[[MASK]]>, vp<[[PRED]]>, ir<1>
802+
; CHECK-NEXT: WIDEN ir<%div> = sdiv vp<[[PRED]]>, vp<[[SELECT]]>
803+
; CHECK-NEXT: Successor(s): pred.store
804+
; CHECK-EMPTY:
805+
; CHECK-NEXT: <xVFxUF> pred.store: {
806+
; CHECK-NEXT: pred.store.entry:
807+
; CHECK-NEXT: BRANCH-ON-MASK vp<[[MASK]]>
808+
; CHECK-NEXT: Successor(s): pred.store.if, pred.store.continue
809+
; CHECK-EMPTY:
810+
; CHECK-NEXT: pred.store.if:
811+
; CHECK-NEXT: REPLICATE store ir<%div>, ir<%gep.a>
812+
; CHECK-NEXT: Successor(s): pred.store.continue
813+
; CHECK-EMPTY:
814+
; CHECK-NEXT: pred.store.continue:
815+
; CHECK-NEXT: No successors
816+
; CHECK-NEXT: }
817+
; CHECK-NEXT: Successor(s): loop.1
818+
; CHECK-EMPTY:
819+
; CHECK-NEXT: loop.1:
785820
; CHECK-NEXT: EMIT vp<[[CAN_IV_NEXT:%.+]]> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
786821
; CHECK-NEXT: EMIT branch-on-count vp<[[CAN_IV_NEXT]]>, vp<[[VEC_TC]]>
787822
; CHECK-NEXT: No successors
@@ -849,6 +884,8 @@ define void @recipe_in_merge_candidate_used_by_first_order_recurrence(i32 %k) {
849884
; CHECK-EMPTY:
850885
; CHECK-NEXT: loop.0:
851886
; CHECK-NEXT: EMIT vp<[[SPLICE:%.+]]> = first-order splice ir<%for>, vp<[[PRED]]>
887+
; CHECK-NEXT: EMIT vp<[[SELECT:%.+]]> = select vp<[[MASK]]>, vp<[[PRED]]>, ir<1>
888+
; CHECK-NEXT: WIDEN ir<%div> = sdiv vp<[[SPLICE]]>, vp<[[SELECT]]>
852889
; CHECK-NEXT: Successor(s): pred.store
853890
; CHECK-EMPTY:
854891
; CHECK-NEXT: <xVFxUF> pred.store: {
@@ -857,16 +894,15 @@ define void @recipe_in_merge_candidate_used_by_first_order_recurrence(i32 %k) {
857894
; CHECK-NEXT: Successor(s): pred.store.if, pred.store.continue
858895
; CHECK-EMPTY:
859896
; CHECK-NEXT: pred.store.if:
860-
; CHECK-NEXT: REPLICATE ir<%div> = sdiv vp<[[SPLICE]]>, vp<[[PRED]]>
861897
; CHECK-NEXT: REPLICATE store ir<%div>, ir<%gep.a>
862898
; CHECK-NEXT: Successor(s): pred.store.continue
863899
; CHECK-EMPTY:
864900
; CHECK-NEXT: pred.store.continue:
865901
; CHECK-NEXT: No successors
866902
; CHECK-NEXT: }
867-
; CHECK-NEXT: Successor(s): loop.2
903+
; CHECK-NEXT: Successor(s): loop.1
868904
; CHECK-EMPTY:
869-
; CHECK-NEXT: loop.2:
905+
; CHECK-NEXT: loop.1:
870906
; CHECK-NEXT: EMIT vp<[[CAN_IV_NEXT:%.+]]> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
871907
; CHECK-NEXT: EMIT branch-on-count vp<[[CAN_IV_NEXT]]>, vp<[[VEC_TC]]>
872908
; CHECK-NEXT: No successors

0 commit comments

Comments
 (0)