@@ -102,7 +102,7 @@ exit:
102102 ret void
103103}
104104
105- define void @sink_replicate_region_2 (i32 %x , i8 %y , ptr %ptr ) optsize {
105+ define void @sink_replicate_region_2 (i32 %x , i8 %y , ptr %ptr , i32 %z ) optsize {
106106; CHECK-LABEL: sink_replicate_region_2
107107; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
108108; CHECK-NEXT: Live-in vp<[[VF:%.+]]> = VF
@@ -125,16 +125,18 @@ 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<%cond> = icmp eq ir<%iv>, ir<%z>
129+ ; CHECK-NEXT: EMIT vp<[[AND:%.+]]> = logical-and vp<[[MASK]]>, ir<%cond>
128130; CHECK-NEXT: Successor(s): pred.store
129131; CHECK-EMPTY:
130132; CHECK-NEXT: <xVFxUF> pred.store: {
131133; CHECK-NEXT: pred.store.entry:
132- ; CHECK-NEXT: BRANCH-ON-MASK vp<[[MASK ]]>
134+ ; CHECK-NEXT: BRANCH-ON-MASK vp<[[AND ]]>
133135; CHECK-NEXT: Successor(s): pred.store.if, pred.store.continue
134136; CHECK-EMPTY:
135137; CHECK-NEXT: pred.store.if:
136- ; CHECK-NEXT: vp<[[STEPS:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1>
137138; CHECK-NEXT: REPLICATE ir<%rem> = srem vp<[[SPLICE]]>, ir<%x>
139+ ; CHECK-NEXT: vp<[[STEPS:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1>
138140; CHECK-NEXT: REPLICATE ir<%gep> = getelementptr ir<%ptr>, vp<[[STEPS]]>
139141; CHECK-NEXT: REPLICATE ir<%add> = add ir<%rem>, ir<%recur.next>
140142; CHECK-NEXT: REPLICATE store ir<%add>, ir<%gep>
@@ -143,9 +145,9 @@ define void @sink_replicate_region_2(i32 %x, i8 %y, ptr %ptr) optsize {
143145; CHECK-NEXT: pred.store.continue:
144146; CHECK-NEXT: No successors
145147; CHECK-NEXT: }
146- ; CHECK-NEXT: Successor(s): loop.0
148+ ; CHECK-NEXT: Successor(s): if.1
147149; CHECK-EMPTY:
148- ; CHECK-NEXT: loop.0 :
150+ ; CHECK-NEXT: if.1 :
149151; CHECK-NEXT: EMIT vp<[[CAN_IV_NEXT:%.+]]> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
150152; CHECK-NEXT: EMIT branch-on-count vp<[[CAN_IV_NEXT]]>, vp<[[VEC_TC]]>
151153; CHECK-NEXT: No successors
@@ -162,13 +164,20 @@ entry:
162164 br label %loop
163165
164166loop:
165- %recur = phi i32 [ 0 , %entry ], [ %recur.next , %loop ]
166- %iv = phi i32 [ 0 , %entry ], [ %iv.next , %loop ]
167- %rem = srem i32 %recur , %x
167+ %recur = phi i32 [ 0 , %entry ], [ %recur.next , %latch ]
168+ %iv = phi i32 [ 0 , %entry ], [ %iv.next , %latch ]
168169 %recur.next = sext i8 %y to i32
170+ %cond = icmp eq i32 %iv , %z
171+ br i1 %cond , label %if , label %latch
172+
173+ if:
174+ %rem = srem i32 %recur , %x
169175 %add = add i32 %rem , %recur.next
170176 %gep = getelementptr i32 , ptr %ptr , i32 %iv
171177 store i32 %add , ptr %gep
178+ br label %latch
179+
180+ latch:
172181 %iv.next = add nsw i32 %iv , 1
173182 %ec = icmp eq i32 %iv.next , 20001
174183 br i1 %ec , label %exit , label %loop
0 commit comments