@@ -15,20 +15,20 @@ define i64 @same_exit_block_pre_inc_use1() #1 {
1515; CHECK-NEXT: call void @init_mem(ptr [[P2]], i64 1024)
1616; CHECK-NEXT: br label [[LOOP:%.*]]
1717; CHECK: loop:
18- ; CHECK-NEXT: [[INDEX2 :%.*]] = phi i64 [ [[INDEX_NEXT1 :%.*]], [[LOOP_INC:%.*]] ], [ 3, [[ENTRY:%.*]] ]
19- ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[INDEX2 ]]
20- ; CHECK-NEXT: [[TMP38 :%.*]] = load i8, ptr [[ARRAYIDX]], align 1
21- ; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[INDEX2 ]]
22- ; CHECK-NEXT: [[TMP39 :%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
23- ; CHECK-NEXT: [[CMP3:%.*]] = icmp eq i8 [[TMP38 ]], [[TMP39 ]]
18+ ; CHECK-NEXT: [[INDEX :%.*]] = phi i64 [ [[INDEX_NEXT :%.*]], [[LOOP_INC:%.*]] ], [ 3, [[ENTRY:%.*]] ]
19+ ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[P1]], i64 [[INDEX ]]
20+ ; CHECK-NEXT: [[LD1 :%.*]] = load i8, ptr [[ARRAYIDX]], align 1
21+ ; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[P2]], i64 [[INDEX ]]
22+ ; CHECK-NEXT: [[LD2 :%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
23+ ; CHECK-NEXT: [[CMP3:%.*]] = icmp eq i8 [[LD1 ]], [[LD2 ]]
2424; CHECK-NEXT: br i1 [[CMP3]], label [[LOOP_INC]], label [[LOOP_END:%.*]]
2525; CHECK: loop.inc:
26- ; CHECK-NEXT: [[INDEX_NEXT1 ]] = add i64 [[INDEX2 ]], 1
27- ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT1 ]], 67
26+ ; CHECK-NEXT: [[INDEX_NEXT ]] = add i64 [[INDEX ]], 1
27+ ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT ]], 67
2828; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[LOOP_END]]
2929; CHECK: loop.end:
30- ; CHECK-NEXT: [[START_0_LCSSA :%.*]] = phi i64 [ [[INDEX2 ]], [[LOOP]] ], [ 67, [[LOOP_INC]] ]
31- ; CHECK-NEXT: ret i64 [[START_0_LCSSA ]]
30+ ; CHECK-NEXT: [[RETVAL :%.*]] = phi i64 [ [[INDEX ]], [[LOOP]] ], [ 67, [[LOOP_INC]] ]
31+ ; CHECK-NEXT: ret i64 [[RETVAL ]]
3232;
3333entry:
3434 %p1 = alloca [1024 x i8 ]
@@ -66,7 +66,7 @@ define i64 @same_exit_block_pre_inc_use4() {
6666; CHECK-NEXT: [[P2:%.*]] = alloca [1024 x i64], align 8
6767; CHECK-NEXT: call void @init_mem(ptr [[P1]], i64 1024)
6868; CHECK-NEXT: call void @init_mem(ptr [[P2]], i64 1024)
69- ; CHECK-NEXT: br label [[LOOP1 :%.*]]
69+ ; CHECK-NEXT: br label [[LOOP :%.*]]
7070; CHECK: loop:
7171; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC:%.*]] ], [ 3, [[ENTRY:%.*]] ]
7272; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i64, ptr [[P1]], i64 [[INDEX]]
@@ -76,9 +76,9 @@ define i64 @same_exit_block_pre_inc_use4() {
7676; CHECK: loop.inc:
7777; CHECK-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
7878; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
79- ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP1 ]], label [[LOOP_END]]
79+ ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP ]], label [[LOOP_END]]
8080; CHECK: loop.end:
81- ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP1 ]] ], [ 67, [[LOOP_INC]] ]
81+ ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP ]] ], [ 67, [[LOOP_INC]] ]
8282; CHECK-NEXT: ret i64 [[RETVAL]]
8383;
8484entry:
@@ -114,20 +114,20 @@ define i64 @loop_contains_safe_call() #1 {
114114; CHECK-NEXT: [[P2:%.*]] = alloca [1024 x i8], align 4
115115; CHECK-NEXT: call void @init_mem(ptr [[P1]], i64 1024)
116116; CHECK-NEXT: call void @init_mem(ptr [[P2]], i64 1024)
117- ; CHECK-NEXT: br label [[LOOP1 :%.*]]
117+ ; CHECK-NEXT: br label [[LOOP :%.*]]
118118; CHECK: loop:
119- ; CHECK-NEXT: [[INDEX2 :%.*]] = phi i64 [ [[INDEX_NEXT1 :%.*]], [[LOOP_INC1 :%.*]] ], [ 3, [[ENTRY:%.*]] ]
120- ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds float, ptr [[P1]], i64 [[INDEX2 ]]
119+ ; CHECK-NEXT: [[INDEX :%.*]] = phi i64 [ [[INDEX_NEXT :%.*]], [[LOOP_INC :%.*]] ], [ 3, [[ENTRY:%.*]] ]
120+ ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds float, ptr [[P1]], i64 [[INDEX ]]
121121; CHECK-NEXT: [[LD1:%.*]] = load float, ptr [[ARRAYIDX]], align 1
122122; CHECK-NEXT: [[SQRT:%.*]] = tail call fast float @llvm.sqrt.f32(float [[LD1]])
123123; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ult float [[SQRT]], 3.000000e+00
124- ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP_INC1 ]], label [[LOOP_END:%.*]]
124+ ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP_INC ]], label [[LOOP_END:%.*]]
125125; CHECK: loop.inc:
126- ; CHECK-NEXT: [[INDEX_NEXT1 ]] = add i64 [[INDEX2 ]], 1
127- ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT1 ]], 67
128- ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP1 ]], label [[LOOP_END]]
126+ ; CHECK-NEXT: [[INDEX_NEXT ]] = add i64 [[INDEX ]], 1
127+ ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT ]], 67
128+ ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP ]], label [[LOOP_END]]
129129; CHECK: loop.end:
130- ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX2 ]], [[LOOP1 ]] ], [ 67, [[LOOP_INC1 ]] ]
130+ ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX ]], [[LOOP ]] ], [ 67, [[LOOP_INC ]] ]
131131; CHECK-NEXT: ret i64 [[RETVAL]]
132132;
133133entry:
@@ -216,7 +216,7 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
216216; CHECK-NEXT: entry:
217217; CHECK-NEXT: [[P1:%.*]] = alloca [1024 x i8], align 4
218218; CHECK-NEXT: call void @init_mem(ptr [[P1]], i64 1024)
219- ; CHECK-NEXT: br label [[LOOP1 :%.*]]
219+ ; CHECK-NEXT: br label [[LOOP :%.*]]
220220; CHECK: loop:
221221; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ [[INDEX_NEXT:%.*]], [[LOOP_INC:%.*]] ], [ 3, [[ENTRY:%.*]] ]
222222; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 [[INDEX]]
@@ -228,9 +228,9 @@ define i64 @loop_contains_load_after_early_exit(ptr dereferenceable(1024) align(
228228; CHECK-NEXT: [[LD2:%.*]] = load i64, ptr [[ARRAYIDX2]], align 8
229229; CHECK-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 1
230230; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDEX_NEXT]], 67
231- ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP1 ]], label [[LOOP_END]]
231+ ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP ]], label [[LOOP_END]]
232232; CHECK: loop.end:
233- ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP1 ]] ], [ [[LD2]], [[LOOP_INC]] ]
233+ ; CHECK-NEXT: [[RETVAL:%.*]] = phi i64 [ [[INDEX]], [[LOOP ]] ], [ [[LD2]], [[LOOP_INC]] ]
234234; CHECK-NEXT: ret i64 [[RETVAL]]
235235;
236236entry:
@@ -272,9 +272,9 @@ define i32 @diff_exit_block_needs_scev_check(i32 %end) {
272272; CHECK-NEXT: call void @init_mem(ptr [[P1]], i64 1024)
273273; CHECK-NEXT: call void @init_mem(ptr [[P2]], i64 1024)
274274; CHECK-NEXT: [[END_CLAMPED:%.*]] = and i32 [[END]], 1023
275- ; CHECK-NEXT: [[TMP19 :%.*]] = trunc i32 [[END]] to i10
276- ; CHECK-NEXT: [[TMP20 :%.*]] = zext i10 [[TMP19 ]] to i64
277- ; CHECK-NEXT: [[UMAX1:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP20 ]], i64 1)
275+ ; CHECK-NEXT: [[TMP0 :%.*]] = trunc i32 [[END]] to i10
276+ ; CHECK-NEXT: [[TMP1 :%.*]] = zext i10 [[TMP0 ]] to i64
277+ ; CHECK-NEXT: [[UMAX1:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP1 ]], i64 1)
278278; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[UMAX1]], 12
279279; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_SCEVCHECK:%.*]]
280280; CHECK: vector.scevcheck:
@@ -289,40 +289,40 @@ define i32 @diff_exit_block_needs_scev_check(i32 %end) {
289289; CHECK: vector.ph:
290290; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[UMAX1]], 4
291291; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 [[UMAX1]], [[N_MOD_VF]]
292- ; CHECK-NEXT: [[IND_END :%.*]] = trunc i64 [[N_VEC]] to i8
293- ; CHECK-NEXT: br label [[FOR_BODY1 :%.*]]
292+ ; CHECK-NEXT: [[TMP8 :%.*]] = trunc i64 [[N_VEC]] to i8
293+ ; CHECK-NEXT: br label [[VECTOR_BODY :%.*]]
294294; CHECK: vector.body:
295- ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[FOR_BODY1 ]] ]
296- ; CHECK-NEXT: [[TMP8 :%.*]] = add i64 [[INDEX]], 0
297- ; CHECK-NEXT: [[TMP9 :%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 [[TMP8 ]]
298- ; CHECK-NEXT: [[TMP10 :%.*]] = getelementptr inbounds i32, ptr [[TMP9 ]], i32 0
299- ; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <4 x i32>, ptr [[TMP10 ]], align 4
300- ; CHECK-NEXT: [[TMP11 :%.*]] = getelementptr inbounds i32, ptr [[P2]], i64 [[TMP8 ]]
301- ; CHECK-NEXT: [[TMP12 :%.*]] = getelementptr inbounds i32, ptr [[TMP11 ]], i32 0
302- ; CHECK-NEXT: [[WIDE_LOAD3 :%.*]] = load <4 x i32>, ptr [[TMP12 ]], align 4
303- ; CHECK-NEXT: [[TMP13 :%.*]] = icmp eq <4 x i32> [[WIDE_LOAD]], [[WIDE_LOAD3 ]]
295+ ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY ]] ]
296+ ; CHECK-NEXT: [[TMP9 :%.*]] = add i64 [[INDEX]], 0
297+ ; CHECK-NEXT: [[TMP10 :%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 [[TMP9 ]]
298+ ; CHECK-NEXT: [[TMP11 :%.*]] = getelementptr inbounds i32, ptr [[TMP10 ]], i32 0
299+ ; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <4 x i32>, ptr [[TMP11 ]], align 4
300+ ; CHECK-NEXT: [[TMP12 :%.*]] = getelementptr inbounds i32, ptr [[P2]], i64 [[TMP9 ]]
301+ ; CHECK-NEXT: [[TMP13 :%.*]] = getelementptr inbounds i32, ptr [[TMP12 ]], i32 0
302+ ; CHECK-NEXT: [[WIDE_LOAD2 :%.*]] = load <4 x i32>, ptr [[TMP13 ]], align 4
303+ ; CHECK-NEXT: [[TMP14 :%.*]] = icmp eq <4 x i32> [[WIDE_LOAD]], [[WIDE_LOAD2 ]]
304304; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
305- ; CHECK-NEXT: [[TMP16 :%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP13 ]])
306- ; CHECK-NEXT: [[TMP17 :%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
307- ; CHECK-NEXT: [[TMP18 :%.*]] = or i1 [[TMP16 ]], [[TMP17 ]]
308- ; CHECK-NEXT: br i1 [[TMP18 ]], label [[MIDDLE_SPLIT:%.*]], label [[FOR_BODY1 ]], !llvm.loop [[LOOP0:![0-9]+]]
305+ ; CHECK-NEXT: [[TMP15 :%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP14 ]])
306+ ; CHECK-NEXT: [[TMP16 :%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
307+ ; CHECK-NEXT: [[TMP17 :%.*]] = or i1 [[TMP15 ]], [[TMP16 ]]
308+ ; CHECK-NEXT: br i1 [[TMP17 ]], label [[MIDDLE_SPLIT:%.*]], label [[VECTOR_BODY ]], !llvm.loop [[LOOP0:![0-9]+]]
309309; CHECK: middle.split:
310- ; CHECK-NEXT: br i1 [[TMP16 ]], label [[FOUND:%.*]], label [[MIDDLE_BLOCK:%.*]]
310+ ; CHECK-NEXT: br i1 [[TMP15 ]], label [[FOUND:%.*]], label [[MIDDLE_BLOCK:%.*]]
311311; CHECK: middle.block:
312312; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i64 [[UMAX1]], [[N_VEC]]
313313; CHECK-NEXT: br i1 [[CMP_N]], label [[EXIT:%.*]], label [[SCALAR_PH]]
314314; CHECK: scalar.ph:
315- ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i8 [ [[IND_END ]], [[MIDDLE_BLOCK]] ], [ 0, [[VECTOR_SCEVCHECK]] ], [ 0, [[ENTRY:%.*]] ]
316- ; CHECK-NEXT: [[BC_RESUME_VAL2 :%.*]] = phi i64 [ [[N_VEC]], [[MIDDLE_BLOCK]] ], [ 0, [[VECTOR_SCEVCHECK]] ], [ 0, [[ENTRY]] ]
315+ ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i8 [ [[TMP8 ]], [[MIDDLE_BLOCK]] ], [ 0, [[VECTOR_SCEVCHECK]] ], [ 0, [[ENTRY:%.*]] ]
316+ ; CHECK-NEXT: [[BC_RESUME_VAL3 :%.*]] = phi i64 [ [[N_VEC]], [[MIDDLE_BLOCK]] ], [ 0, [[VECTOR_SCEVCHECK]] ], [ 0, [[ENTRY]] ]
317317; CHECK-NEXT: br label [[FOR_BODY:%.*]]
318318; CHECK: for.body:
319319; CHECK-NEXT: [[IND:%.*]] = phi i8 [ [[IND_NEXT:%.*]], [[FOR_INC:%.*]] ], [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ]
320- ; CHECK-NEXT: [[GEP_IND:%.*]] = phi i64 [ [[GEP_IND_NEXT:%.*]], [[FOR_INC]] ], [ [[BC_RESUME_VAL2 ]], [[SCALAR_PH]] ]
320+ ; CHECK-NEXT: [[GEP_IND:%.*]] = phi i64 [ [[GEP_IND_NEXT:%.*]], [[FOR_INC]] ], [ [[BC_RESUME_VAL3 ]], [[SCALAR_PH]] ]
321321; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 [[GEP_IND]]
322- ; CHECK-NEXT: [[TMP0 :%.*]] = load i32, ptr [[ARRAYIDX1]], align 4
322+ ; CHECK-NEXT: [[TMP18 :%.*]] = load i32, ptr [[ARRAYIDX1]], align 4
323323; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i32, ptr [[P2]], i64 [[GEP_IND]]
324- ; CHECK-NEXT: [[TMP1 :%.*]] = load i32, ptr [[ARRAYIDX2]], align 4
325- ; CHECK-NEXT: [[CMP_EARLY:%.*]] = icmp eq i32 [[TMP0 ]], [[TMP1 ]]
324+ ; CHECK-NEXT: [[TMP19 :%.*]] = load i32, ptr [[ARRAYIDX2]], align 4
325+ ; CHECK-NEXT: [[CMP_EARLY:%.*]] = icmp eq i32 [[TMP18 ]], [[TMP19 ]]
326326; CHECK-NEXT: br i1 [[CMP_EARLY]], label [[FOUND]], label [[FOR_INC]]
327327; CHECK: for.inc:
328328; CHECK-NEXT: [[IND_NEXT]] = add i8 [[IND]], 1
0 commit comments