@@ -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