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