@@ -155,9 +155,189 @@ define void @test_exit_branch_cost(ptr %dst, i64 %x, i32 %y, ptr %dst.1, i1 %c.4
155155; CHECK-LABEL: define void @test_exit_branch_cost(
156156; CHECK-SAME: ptr [[DST:%.*]], i64 [[X:%.*]], i32 [[Y:%.*]], ptr [[DST_1:%.*]], i1 [[C_4:%.*]], ptr [[SRC:%.*]], ptr [[DST_3:%.*]], i1 [[C_3:%.*]], ptr [[DST_2:%.*]]) {
157157; CHECK-NEXT: [[ENTRY:.*]]:
158+ ; CHECK-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]]
159+ ; CHECK: [[VECTOR_MEMCHECK]]:
160+ ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST_1]], i64 8
161+ ; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST_3]], i64 8
162+ ; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[DST_2]], i64 8
163+ ; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[DST]], i64 8
164+ ; CHECK-NEXT: [[SCEVGEP4:%.*]] = getelementptr i8, ptr [[SRC]], i64 8
165+ ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST_1]], [[SCEVGEP1]]
166+ ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[DST_3]], [[SCEVGEP]]
167+ ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]]
168+ ; CHECK-NEXT: [[BOUND05:%.*]] = icmp ult ptr [[DST_1]], [[SCEVGEP2]]
169+ ; CHECK-NEXT: [[BOUND16:%.*]] = icmp ult ptr [[DST_2]], [[SCEVGEP]]
170+ ; CHECK-NEXT: [[FOUND_CONFLICT7:%.*]] = and i1 [[BOUND05]], [[BOUND16]]
171+ ; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT7]]
172+ ; CHECK-NEXT: [[BOUND08:%.*]] = icmp ult ptr [[DST_1]], [[SCEVGEP3]]
173+ ; CHECK-NEXT: [[BOUND19:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP]]
174+ ; CHECK-NEXT: [[FOUND_CONFLICT10:%.*]] = and i1 [[BOUND08]], [[BOUND19]]
175+ ; CHECK-NEXT: [[CONFLICT_RDX11:%.*]] = or i1 [[CONFLICT_RDX]], [[FOUND_CONFLICT10]]
176+ ; CHECK-NEXT: [[BOUND012:%.*]] = icmp ult ptr [[DST_1]], [[SCEVGEP4]]
177+ ; CHECK-NEXT: [[BOUND113:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]]
178+ ; CHECK-NEXT: [[FOUND_CONFLICT14:%.*]] = and i1 [[BOUND012]], [[BOUND113]]
179+ ; CHECK-NEXT: [[CONFLICT_RDX15:%.*]] = or i1 [[CONFLICT_RDX11]], [[FOUND_CONFLICT14]]
180+ ; CHECK-NEXT: [[BOUND016:%.*]] = icmp ult ptr [[DST_3]], [[SCEVGEP2]]
181+ ; CHECK-NEXT: [[BOUND117:%.*]] = icmp ult ptr [[DST_2]], [[SCEVGEP1]]
182+ ; CHECK-NEXT: [[FOUND_CONFLICT18:%.*]] = and i1 [[BOUND016]], [[BOUND117]]
183+ ; CHECK-NEXT: [[CONFLICT_RDX19:%.*]] = or i1 [[CONFLICT_RDX15]], [[FOUND_CONFLICT18]]
184+ ; CHECK-NEXT: [[BOUND020:%.*]] = icmp ult ptr [[DST_3]], [[SCEVGEP3]]
185+ ; CHECK-NEXT: [[BOUND121:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]]
186+ ; CHECK-NEXT: [[FOUND_CONFLICT22:%.*]] = and i1 [[BOUND020]], [[BOUND121]]
187+ ; CHECK-NEXT: [[CONFLICT_RDX23:%.*]] = or i1 [[CONFLICT_RDX19]], [[FOUND_CONFLICT22]]
188+ ; CHECK-NEXT: [[BOUND024:%.*]] = icmp ult ptr [[DST_3]], [[SCEVGEP4]]
189+ ; CHECK-NEXT: [[BOUND125:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP1]]
190+ ; CHECK-NEXT: [[FOUND_CONFLICT26:%.*]] = and i1 [[BOUND024]], [[BOUND125]]
191+ ; CHECK-NEXT: [[CONFLICT_RDX27:%.*]] = or i1 [[CONFLICT_RDX23]], [[FOUND_CONFLICT26]]
192+ ; CHECK-NEXT: [[BOUND028:%.*]] = icmp ult ptr [[DST_2]], [[SCEVGEP3]]
193+ ; CHECK-NEXT: [[BOUND129:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP2]]
194+ ; CHECK-NEXT: [[FOUND_CONFLICT30:%.*]] = and i1 [[BOUND028]], [[BOUND129]]
195+ ; CHECK-NEXT: [[CONFLICT_RDX31:%.*]] = or i1 [[CONFLICT_RDX27]], [[FOUND_CONFLICT30]]
196+ ; CHECK-NEXT: [[BOUND032:%.*]] = icmp ult ptr [[DST_2]], [[SCEVGEP4]]
197+ ; CHECK-NEXT: [[BOUND133:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP2]]
198+ ; CHECK-NEXT: [[FOUND_CONFLICT34:%.*]] = and i1 [[BOUND032]], [[BOUND133]]
199+ ; CHECK-NEXT: [[CONFLICT_RDX35:%.*]] = or i1 [[CONFLICT_RDX31]], [[FOUND_CONFLICT34]]
200+ ; CHECK-NEXT: [[BOUND036:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP4]]
201+ ; CHECK-NEXT: [[BOUND137:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP3]]
202+ ; CHECK-NEXT: [[FOUND_CONFLICT38:%.*]] = and i1 [[BOUND036]], [[BOUND137]]
203+ ; CHECK-NEXT: [[CONFLICT_RDX39:%.*]] = or i1 [[CONFLICT_RDX35]], [[FOUND_CONFLICT38]]
204+ ; CHECK-NEXT: br i1 [[CONFLICT_RDX39]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]]
205+ ; CHECK: [[VECTOR_PH]]:
206+ ; CHECK-NEXT: [[BROADCAST_SPLATINSERT:%.*]] = insertelement <2 x i64> poison, i64 [[X]], i64 0
207+ ; CHECK-NEXT: [[BROADCAST_SPLAT:%.*]] = shufflevector <2 x i64> [[BROADCAST_SPLATINSERT]], <2 x i64> poison, <2 x i32> zeroinitializer
208+ ; CHECK-NEXT: [[TMP36:%.*]] = icmp eq <2 x i64> [[BROADCAST_SPLAT]], zeroinitializer
209+ ; CHECK-NEXT: [[TMP1:%.*]] = xor <2 x i1> [[TMP36]], splat (i1 true)
210+ ; CHECK-NEXT: [[BROADCAST_SPLATINSERT40:%.*]] = insertelement <2 x i1> poison, i1 [[C_3]], i64 0
211+ ; CHECK-NEXT: [[BROADCAST_SPLAT41:%.*]] = shufflevector <2 x i1> [[BROADCAST_SPLATINSERT40]], <2 x i1> poison, <2 x i32> zeroinitializer
212+ ; CHECK-NEXT: [[TMP2:%.*]] = select i1 [[C_4]], <2 x i1> [[BROADCAST_SPLAT41]], <2 x i1> zeroinitializer
213+ ; CHECK-NEXT: [[TMP3:%.*]] = xor <2 x i1> [[TMP2]], splat (i1 true)
214+ ; CHECK-NEXT: [[TMP4:%.*]] = select <2 x i1> [[TMP1]], <2 x i1> [[TMP3]], <2 x i1> zeroinitializer
215+ ; CHECK-NEXT: [[TMP5:%.*]] = select <2 x i1> [[TMP1]], <2 x i1> [[BROADCAST_SPLAT41]], <2 x i1> zeroinitializer
216+ ; CHECK-NEXT: [[BROADCAST_SPLATINSERT42:%.*]] = insertelement <2 x i1> poison, i1 [[C_4]], i64 0
217+ ; CHECK-NEXT: [[BROADCAST_SPLAT43:%.*]] = shufflevector <2 x i1> [[BROADCAST_SPLATINSERT42]], <2 x i1> poison, <2 x i32> zeroinitializer
218+ ; CHECK-NEXT: [[TMP6:%.*]] = select <2 x i1> [[TMP5]], <2 x i1> [[BROADCAST_SPLAT43]], <2 x i1> zeroinitializer
219+ ; CHECK-NEXT: [[TMP7:%.*]] = or <2 x i1> [[TMP36]], [[TMP6]]
220+ ; CHECK-NEXT: [[PREDPHI:%.*]] = select <2 x i1> [[TMP6]], <2 x i64> zeroinitializer, <2 x i64> splat (i64 1)
221+ ; CHECK-NEXT: [[TMP8:%.*]] = xor <2 x i1> [[BROADCAST_SPLAT43]], splat (i1 true)
222+ ; CHECK-NEXT: [[TMP9:%.*]] = select <2 x i1> [[TMP5]], <2 x i1> [[TMP8]], <2 x i1> zeroinitializer
223+ ; CHECK-NEXT: [[TMP10:%.*]] = or <2 x i1> [[TMP7]], [[TMP9]]
224+ ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
225+ ; CHECK: [[VECTOR_BODY]]:
226+ ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE73:.*]] ]
227+ ; CHECK-NEXT: [[TMP11:%.*]] = extractelement <2 x i1> [[TMP1]], i32 0
228+ ; CHECK-NEXT: br i1 [[TMP11]], label %[[PRED_STORE_IF:.*]], label %[[PRED_STORE_CONTINUE:.*]]
229+ ; CHECK: [[PRED_STORE_IF]]:
230+ ; CHECK-NEXT: store i64 0, ptr [[DST_1]], align 8, !alias.scope [[META7:![0-9]+]], !noalias [[META10:![0-9]+]]
231+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE]]
232+ ; CHECK: [[PRED_STORE_CONTINUE]]:
233+ ; CHECK-NEXT: [[TMP12:%.*]] = extractelement <2 x i1> [[TMP1]], i32 1
234+ ; CHECK-NEXT: br i1 [[TMP12]], label %[[PRED_STORE_IF44:.*]], label %[[PRED_STORE_CONTINUE45:.*]]
235+ ; CHECK: [[PRED_STORE_IF44]]:
236+ ; CHECK-NEXT: store i64 0, ptr [[DST_1]], align 8, !alias.scope [[META7]], !noalias [[META10]]
237+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE45]]
238+ ; CHECK: [[PRED_STORE_CONTINUE45]]:
239+ ; CHECK-NEXT: [[TMP13:%.*]] = extractelement <2 x i1> [[TMP1]], i32 0
240+ ; CHECK-NEXT: br i1 [[TMP13]], label %[[PRED_STORE_IF46:.*]], label %[[PRED_STORE_CONTINUE47:.*]]
241+ ; CHECK: [[PRED_STORE_IF46]]:
242+ ; CHECK-NEXT: store i64 0, ptr [[DST_1]], align 8, !alias.scope [[META7]], !noalias [[META10]]
243+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE47]]
244+ ; CHECK: [[PRED_STORE_CONTINUE47]]:
245+ ; CHECK-NEXT: [[TMP14:%.*]] = extractelement <2 x i1> [[TMP1]], i32 1
246+ ; CHECK-NEXT: br i1 [[TMP14]], label %[[PRED_STORE_IF48:.*]], label %[[PRED_STORE_CONTINUE49:.*]]
247+ ; CHECK: [[PRED_STORE_IF48]]:
248+ ; CHECK-NEXT: store i64 0, ptr [[DST_1]], align 8, !alias.scope [[META7]], !noalias [[META10]]
249+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE49]]
250+ ; CHECK: [[PRED_STORE_CONTINUE49]]:
251+ ; CHECK-NEXT: [[TMP15:%.*]] = extractelement <2 x i1> [[TMP4]], i32 0
252+ ; CHECK-NEXT: br i1 [[TMP15]], label %[[PRED_STORE_IF50:.*]], label %[[PRED_STORE_CONTINUE51:.*]]
253+ ; CHECK: [[PRED_STORE_IF50]]:
254+ ; CHECK-NEXT: store i64 0, ptr [[DST_3]], align 8, !alias.scope [[META15:![0-9]+]], !noalias [[META16:![0-9]+]]
255+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE51]]
256+ ; CHECK: [[PRED_STORE_CONTINUE51]]:
257+ ; CHECK-NEXT: [[TMP16:%.*]] = extractelement <2 x i1> [[TMP4]], i32 1
258+ ; CHECK-NEXT: br i1 [[TMP16]], label %[[PRED_STORE_IF52:.*]], label %[[PRED_STORE_CONTINUE53:.*]]
259+ ; CHECK: [[PRED_STORE_IF52]]:
260+ ; CHECK-NEXT: store i64 0, ptr [[DST_3]], align 8, !alias.scope [[META15]], !noalias [[META16]]
261+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE53]]
262+ ; CHECK: [[PRED_STORE_CONTINUE53]]:
263+ ; CHECK-NEXT: [[TMP17:%.*]] = extractelement <2 x i1> [[TMP4]], i32 0
264+ ; CHECK-NEXT: br i1 [[TMP17]], label %[[PRED_STORE_IF54:.*]], label %[[PRED_STORE_CONTINUE55:.*]]
265+ ; CHECK: [[PRED_STORE_IF54]]:
266+ ; CHECK-NEXT: store i64 0, ptr [[DST_3]], align 8, !alias.scope [[META15]], !noalias [[META16]]
267+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE55]]
268+ ; CHECK: [[PRED_STORE_CONTINUE55]]:
269+ ; CHECK-NEXT: [[TMP18:%.*]] = extractelement <2 x i1> [[TMP4]], i32 1
270+ ; CHECK-NEXT: br i1 [[TMP18]], label %[[PRED_STORE_IF56:.*]], label %[[PRED_STORE_CONTINUE57:.*]]
271+ ; CHECK: [[PRED_STORE_IF56]]:
272+ ; CHECK-NEXT: store i64 0, ptr [[DST_3]], align 8, !alias.scope [[META15]], !noalias [[META16]]
273+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE57]]
274+ ; CHECK: [[PRED_STORE_CONTINUE57]]:
275+ ; CHECK-NEXT: [[TMP19:%.*]] = extractelement <2 x i1> [[TMP7]], i32 0
276+ ; CHECK-NEXT: br i1 [[TMP19]], label %[[PRED_STORE_IF58:.*]], label %[[PRED_STORE_CONTINUE59:.*]]
277+ ; CHECK: [[PRED_STORE_IF58]]:
278+ ; CHECK-NEXT: [[TMP20:%.*]] = extractelement <2 x i64> [[PREDPHI]], i32 0
279+ ; CHECK-NEXT: store i64 [[TMP20]], ptr [[DST_2]], align 8, !alias.scope [[META17:![0-9]+]], !noalias [[META18:![0-9]+]]
280+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE59]]
281+ ; CHECK: [[PRED_STORE_CONTINUE59]]:
282+ ; CHECK-NEXT: [[TMP21:%.*]] = extractelement <2 x i1> [[TMP7]], i32 1
283+ ; CHECK-NEXT: br i1 [[TMP21]], label %[[PRED_STORE_IF60:.*]], label %[[PRED_STORE_CONTINUE61:.*]]
284+ ; CHECK: [[PRED_STORE_IF60]]:
285+ ; CHECK-NEXT: [[TMP22:%.*]] = extractelement <2 x i64> [[PREDPHI]], i32 0
286+ ; CHECK-NEXT: store i64 [[TMP22]], ptr [[DST_2]], align 8, !alias.scope [[META17]], !noalias [[META18]]
287+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE61]]
288+ ; CHECK: [[PRED_STORE_CONTINUE61]]:
289+ ; CHECK-NEXT: [[TMP23:%.*]] = extractelement <2 x i1> [[TMP7]], i32 0
290+ ; CHECK-NEXT: br i1 [[TMP23]], label %[[PRED_STORE_IF62:.*]], label %[[PRED_STORE_CONTINUE63:.*]]
291+ ; CHECK: [[PRED_STORE_IF62]]:
292+ ; CHECK-NEXT: [[TMP24:%.*]] = extractelement <2 x i64> [[PREDPHI]], i32 0
293+ ; CHECK-NEXT: store i64 [[TMP24]], ptr [[DST_2]], align 8, !alias.scope [[META17]], !noalias [[META18]]
294+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE63]]
295+ ; CHECK: [[PRED_STORE_CONTINUE63]]:
296+ ; CHECK-NEXT: [[TMP25:%.*]] = extractelement <2 x i1> [[TMP7]], i32 1
297+ ; CHECK-NEXT: br i1 [[TMP25]], label %[[PRED_STORE_IF64:.*]], label %[[PRED_STORE_CONTINUE65:.*]]
298+ ; CHECK: [[PRED_STORE_IF64]]:
299+ ; CHECK-NEXT: [[TMP26:%.*]] = extractelement <2 x i64> [[PREDPHI]], i32 0
300+ ; CHECK-NEXT: store i64 [[TMP26]], ptr [[DST_2]], align 8, !alias.scope [[META17]], !noalias [[META18]]
301+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE65]]
302+ ; CHECK: [[PRED_STORE_CONTINUE65]]:
303+ ; CHECK-NEXT: [[TMP27:%.*]] = extractelement <2 x i1> [[TMP10]], i32 0
304+ ; CHECK-NEXT: br i1 [[TMP27]], label %[[PRED_STORE_IF66:.*]], label %[[PRED_STORE_CONTINUE67:.*]]
305+ ; CHECK: [[PRED_STORE_IF66]]:
306+ ; CHECK-NEXT: [[TMP28:%.*]] = load i64, ptr [[SRC]], align 8, !alias.scope [[META19:![0-9]+]]
307+ ; CHECK-NEXT: store i64 [[TMP28]], ptr [[DST]], align 8, !alias.scope [[META20:![0-9]+]], !noalias [[META19]]
308+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE67]]
309+ ; CHECK: [[PRED_STORE_CONTINUE67]]:
310+ ; CHECK-NEXT: [[TMP29:%.*]] = extractelement <2 x i1> [[TMP10]], i32 1
311+ ; CHECK-NEXT: br i1 [[TMP29]], label %[[PRED_STORE_IF68:.*]], label %[[PRED_STORE_CONTINUE69:.*]]
312+ ; CHECK: [[PRED_STORE_IF68]]:
313+ ; CHECK-NEXT: [[TMP30:%.*]] = load i64, ptr [[SRC]], align 8, !alias.scope [[META19]]
314+ ; CHECK-NEXT: store i64 [[TMP30]], ptr [[DST]], align 8, !alias.scope [[META20]], !noalias [[META19]]
315+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE69]]
316+ ; CHECK: [[PRED_STORE_CONTINUE69]]:
317+ ; CHECK-NEXT: [[TMP31:%.*]] = extractelement <2 x i1> [[TMP10]], i32 0
318+ ; CHECK-NEXT: br i1 [[TMP31]], label %[[PRED_STORE_IF70:.*]], label %[[PRED_STORE_CONTINUE71:.*]]
319+ ; CHECK: [[PRED_STORE_IF70]]:
320+ ; CHECK-NEXT: [[TMP32:%.*]] = load i64, ptr [[SRC]], align 8, !alias.scope [[META19]]
321+ ; CHECK-NEXT: store i64 [[TMP32]], ptr [[DST]], align 8, !alias.scope [[META20]], !noalias [[META19]]
322+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE71]]
323+ ; CHECK: [[PRED_STORE_CONTINUE71]]:
324+ ; CHECK-NEXT: [[TMP33:%.*]] = extractelement <2 x i1> [[TMP10]], i32 1
325+ ; CHECK-NEXT: br i1 [[TMP33]], label %[[PRED_STORE_IF72:.*]], label %[[PRED_STORE_CONTINUE73]]
326+ ; CHECK: [[PRED_STORE_IF72]]:
327+ ; CHECK-NEXT: [[TMP34:%.*]] = load i64, ptr [[SRC]], align 8, !alias.scope [[META19]]
328+ ; CHECK-NEXT: store i64 [[TMP34]], ptr [[DST]], align 8, !alias.scope [[META20]], !noalias [[META19]]
329+ ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE73]]
330+ ; CHECK: [[PRED_STORE_CONTINUE73]]:
331+ ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
332+ ; CHECK-NEXT: [[TMP35:%.*]] = icmp eq i64 [[INDEX_NEXT]], 64
333+ ; CHECK-NEXT: br i1 [[TMP35]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP21:![0-9]+]]
334+ ; CHECK: [[MIDDLE_BLOCK]]:
335+ ; CHECK-NEXT: br i1 false, label %[[EXIT:.*]], label %[[SCALAR_PH]]
336+ ; CHECK: [[SCALAR_PH]]:
337+ ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 64, %[[MIDDLE_BLOCK]] ], [ 0, %[[VECTOR_MEMCHECK]] ], [ 0, %[[ENTRY]] ]
158338; CHECK-NEXT: br label %[[LOOP_HEADER:.*]]
159339; CHECK: [[LOOP_HEADER]]:
160- ; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ], [ 0 , %[[ENTRY ]] ]
340+ ; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ], [ [[BC_RESUME_VAL]] , %[[SCALAR_PH ]] ]
161341; CHECK-NEXT: [[C1:%.*]] = icmp eq i64 [[X]], 0
162342; CHECK-NEXT: br i1 [[C1]], label %[[THEN_4:.*]], label %[[THEN_1:.*]]
163343; CHECK: [[THEN_1]]:
@@ -187,7 +367,7 @@ define void @test_exit_branch_cost(ptr %dst, i64 %x, i32 %y, ptr %dst.1, i1 %c.4
187367; CHECK: [[LOOP_LATCH]]:
188368; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1
189369; CHECK-NEXT: [[EC:%.*]] = icmp eq i64 [[IV]], 64
190- ; CHECK-NEXT: br i1 [[EC]], label %[[EXIT:.* ]], label %[[LOOP_HEADER]]
370+ ; CHECK-NEXT: br i1 [[EC]], label %[[EXIT]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP22:![0-9]+ ]]
191371; CHECK: [[EXIT]]:
192372; CHECK-NEXT: ret void
193373;
@@ -233,12 +413,16 @@ else.2:
233413loop.latch:
234414 %iv.next = add i64 %iv , 1
235415 %ec = icmp eq i64 %iv , 64
236- br i1 %ec , label %exit , label %loop.header
416+ br i1 %ec , label %exit , label %loop.header , !llvm.loop !0
237417
238418exit:
239419 ret void
240420}
241421
422+ !0 = distinct !{!0 , !1 }
423+ !1 = !{!"llvm.loop.vectorize.enable" , i1 true }
424+
425+
242426declare void @llvm.assume (i1 noundef)
243427declare i64 @llvm.umin.i64 (i64 , i64 )
244428;.
@@ -249,4 +433,20 @@ declare i64 @llvm.umin.i64(i64, i64)
249433; CHECK: [[LOOP4]] = distinct !{[[LOOP4]], [[META1]], [[META2]]}
250434; CHECK: [[LOOP5]] = distinct !{[[LOOP5]], [[META1]], [[META2]]}
251435; CHECK: [[LOOP6]] = distinct !{[[LOOP6]], [[META2]], [[META1]]}
436+ ; CHECK: [[META7]] = !{[[META8:![0-9]+]]}
437+ ; CHECK: [[META8]] = distinct !{[[META8]], [[META9:![0-9]+]]}
438+ ; CHECK: [[META9]] = distinct !{[[META9]], !"LVerDomain"}
439+ ; CHECK: [[META10]] = !{[[META11:![0-9]+]], [[META12:![0-9]+]], [[META13:![0-9]+]], [[META14:![0-9]+]]}
440+ ; CHECK: [[META11]] = distinct !{[[META11]], [[META9]]}
441+ ; CHECK: [[META12]] = distinct !{[[META12]], [[META9]]}
442+ ; CHECK: [[META13]] = distinct !{[[META13]], [[META9]]}
443+ ; CHECK: [[META14]] = distinct !{[[META14]], [[META9]]}
444+ ; CHECK: [[META15]] = !{[[META11]]}
445+ ; CHECK: [[META16]] = !{[[META12]], [[META13]], [[META14]]}
446+ ; CHECK: [[META17]] = !{[[META12]]}
447+ ; CHECK: [[META18]] = !{[[META13]], [[META14]]}
448+ ; CHECK: [[META19]] = !{[[META14]]}
449+ ; CHECK: [[META20]] = !{[[META13]]}
450+ ; CHECK: [[LOOP21]] = distinct !{[[LOOP21]], [[META1]], [[META2]]}
451+ ; CHECK: [[LOOP22]] = distinct !{[[LOOP22]], [[META1]]}
252452;.
0 commit comments