@@ -114,22 +114,23 @@ define void @runtime_checks_ptr_inductions(ptr %dst.1, ptr %dst.2, i1 %c) {
114114; CHECK-NEXT: br i1 [[EC_1]], label %[[LOOP_2_HEADER_PREHEADER:.*]], label %[[LOOP_1]]
115115; CHECK: [[LOOP_2_HEADER_PREHEADER]]:
116116; CHECK-NEXT: [[SEL_DST_LCSSA1:%.*]] = phi ptr [ [[SEL_DST]], %[[LOOP_1]] ]
117- ; CHECK-NEXT: [[PTR_IV_1_LCSSA :%.*]] = phi ptr [ [[PTR_IV_1]], %[[LOOP_1]] ]
117+ ; CHECK-NEXT: [[PTR_IV_1_LCSSA1 :%.*]] = phi ptr [ [[PTR_IV_1]], %[[LOOP_1]] ]
118118; CHECK-NEXT: [[SEL_DST_LCSSA:%.*]] = phi ptr [ [[SEL_DST]], %[[LOOP_1]] ]
119119; CHECK-NEXT: [[SEL_DST_LCSSA12:%.*]] = ptrtoint ptr [[SEL_DST_LCSSA1]] to i64
120120; CHECK-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]]
121121; CHECK: [[VECTOR_MEMCHECK]]:
122+ ; CHECK-NEXT: [[TMP2:%.*]] = mul i64 [[SEL_DST_LCSSA12]], -1
123+ ; CHECK-NEXT: [[PTR_IV_1_LCSSA:%.*]] = getelementptr i8, ptr [[PTR_IV_1_LCSSA1]], i64 [[TMP2]]
122124; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[PTR_IV_1_LCSSA]] to i64
123- ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[SEL_DST_LCSSA12]]
124- ; CHECK-NEXT: [[DIFF_CHECK:%.*]] = icmp ult i64 [[TMP1]], 2
125+ ; CHECK-NEXT: [[DIFF_CHECK:%.*]] = icmp ult i64 [[TMP0]], 2
125126; CHECK-NEXT: br i1 [[DIFF_CHECK]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]]
126127; CHECK: [[VECTOR_PH]]:
127- ; CHECK-NEXT: [[TMP2 :%.*]] = getelementptr i8, ptr [[PTR_IV_1_LCSSA ]], i64 1022
128+ ; CHECK-NEXT: [[TMP1 :%.*]] = getelementptr i8, ptr [[PTR_IV_1_LCSSA1 ]], i64 1022
128129; CHECK-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[SEL_DST_LCSSA]], i64 1022
129130; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
130131; CHECK: [[VECTOR_BODY]]:
131132; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
132- ; CHECK-NEXT: [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[PTR_IV_1_LCSSA ]], i64 [[INDEX]]
133+ ; CHECK-NEXT: [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[PTR_IV_1_LCSSA1 ]], i64 [[INDEX]]
133134; CHECK-NEXT: [[NEXT_GEP4:%.*]] = getelementptr i8, ptr [[SEL_DST_LCSSA]], i64 [[INDEX]]
134135; CHECK-NEXT: [[TMP4:%.*]] = getelementptr i8, ptr [[NEXT_GEP4]], i32 0
135136; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x i8>, ptr [[TMP4]], align 1
@@ -142,13 +143,13 @@ define void @runtime_checks_ptr_inductions(ptr %dst.1, ptr %dst.2, i1 %c) {
142143; CHECK-NEXT: br label %[[SCALAR_PH]]
143144; CHECK: [[SCALAR_PH]]:
144145; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i32 [ 1023, %[[MIDDLE_BLOCK]] ], [ 1, %[[LOOP_2_HEADER_PREHEADER]] ], [ 1, %[[VECTOR_MEMCHECK]] ]
145- ; CHECK-NEXT: [[BC_RESUME_VAL4 :%.*]] = phi ptr [ [[TMP2 ]], %[[MIDDLE_BLOCK]] ], [ [[PTR_IV_1_LCSSA ]], %[[LOOP_2_HEADER_PREHEADER]] ], [ [[PTR_IV_1_LCSSA ]], %[[VECTOR_MEMCHECK]] ]
146- ; CHECK-NEXT: [[BC_RESUME_VAL5 :%.*]] = phi ptr [ [[TMP3]], %[[MIDDLE_BLOCK]] ], [ [[SEL_DST_LCSSA]], %[[LOOP_2_HEADER_PREHEADER]] ], [ [[SEL_DST_LCSSA]], %[[VECTOR_MEMCHECK]] ]
146+ ; CHECK-NEXT: [[BC_RESUME_VAL5 :%.*]] = phi ptr [ [[TMP1 ]], %[[MIDDLE_BLOCK]] ], [ [[PTR_IV_1_LCSSA1 ]], %[[LOOP_2_HEADER_PREHEADER]] ], [ [[PTR_IV_1_LCSSA1 ]], %[[VECTOR_MEMCHECK]] ]
147+ ; CHECK-NEXT: [[BC_RESUME_VAL6 :%.*]] = phi ptr [ [[TMP3]], %[[MIDDLE_BLOCK]] ], [ [[SEL_DST_LCSSA]], %[[LOOP_2_HEADER_PREHEADER]] ], [ [[SEL_DST_LCSSA]], %[[VECTOR_MEMCHECK]] ]
147148; CHECK-NEXT: br label %[[LOOP_2_HEADER:.*]]
148149; CHECK: [[LOOP_2_HEADER]]:
149150; CHECK-NEXT: [[IV:%.*]] = phi i32 [ [[DEC7:%.*]], %[[LOOP_2_LATCH:.*]] ], [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ]
150- ; CHECK-NEXT: [[PTR_IV_2:%.*]] = phi ptr [ [[PTR_IV_2_NEXT:%.*]], %[[LOOP_2_LATCH]] ], [ [[BC_RESUME_VAL4 ]], %[[SCALAR_PH]] ]
151- ; CHECK-NEXT: [[PTR_IV_3:%.*]] = phi ptr [ [[PTR_IV_3_NEXT:%.*]], %[[LOOP_2_LATCH]] ], [ [[BC_RESUME_VAL5 ]], %[[SCALAR_PH]] ]
151+ ; CHECK-NEXT: [[PTR_IV_2:%.*]] = phi ptr [ [[PTR_IV_2_NEXT:%.*]], %[[LOOP_2_LATCH]] ], [ [[BC_RESUME_VAL5 ]], %[[SCALAR_PH]] ]
152+ ; CHECK-NEXT: [[PTR_IV_3:%.*]] = phi ptr [ [[PTR_IV_3_NEXT:%.*]], %[[LOOP_2_LATCH]] ], [ [[BC_RESUME_VAL6 ]], %[[SCALAR_PH]] ]
152153; CHECK-NEXT: [[EC_2:%.*]] = icmp eq i32 [[IV]], 1024
153154; CHECK-NEXT: br i1 [[EC_2]], label %[[EXIT:.*]], label %[[LOOP_2_LATCH]]
154155; CHECK: [[LOOP_2_LATCH]]:
@@ -209,10 +210,8 @@ define void @expand_diff_scev_unknown(ptr %dst, i1 %invar.c, i32 %step) mustprog
209210; CHECK-NEXT: br i1 [[INVAR_C]], label %[[LOOP_2_PREHEADER:.*]], label %[[LOOP_1]]
210211; CHECK: [[LOOP_2_PREHEADER]]:
211212; CHECK-NEXT: [[INDVAR_LCSSA1:%.*]] = phi i32 [ [[INDVAR]], %[[LOOP_1]] ]
212- ; CHECK-NEXT: [[INDVAR_LCSSA:%.*]] = phi i32 [ [[INDVAR]], %[[LOOP_1]] ]
213213; CHECK-NEXT: [[IV_1_LCSSA:%.*]] = phi i32 [ [[IV_1]], %[[LOOP_1]] ]
214- ; CHECK-NEXT: [[TMP0:%.*]] = shl i32 [[STEP]], 1
215- ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[INDVAR_LCSSA]], [[TMP0]]
214+ ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[IV_1_LCSSA]], [[STEP]]
216215; CHECK-NEXT: [[SMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[TMP1]], i32 0)
217216; CHECK-NEXT: [[TMP2:%.*]] = mul i32 [[STEP]], -2
218217; CHECK-NEXT: [[TMP3:%.*]] = mul i32 [[INDVAR_LCSSA1]], -1
@@ -285,43 +284,33 @@ define void @expand_diff_neg_ptrtoint_expr(ptr %src, ptr %start) {
285284; CHECK-SAME: ptr [[SRC:%.*]], ptr [[START:%.*]]) {
286285; CHECK-NEXT: [[ENTRY:.*]]:
287286; CHECK-NEXT: [[SRC2:%.*]] = ptrtoint ptr [[SRC]] to i64
288- ; CHECK-NEXT: [[START1:%.*]] = ptrtoint ptr [[START]] to i64
289287; CHECK-NEXT: br label %[[LOOP_1:.*]]
290288; CHECK: [[LOOP_1]]:
291- ; CHECK-NEXT: [[INDVAR:%.*]] = phi i64 [ [[INDVAR_NEXT:%.*]], %[[LOOP_1]] ], [ 0, %[[ENTRY]] ]
292289; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 1, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP_1]] ]
293290; CHECK-NEXT: [[PTR_IV_1:%.*]] = phi ptr [ [[START]], %[[ENTRY]] ], [ [[PTR_IV_1_NEXT:%.*]], %[[LOOP_1]] ]
294291; CHECK-NEXT: [[PTR_IV_1_NEXT]] = getelementptr i8, ptr [[PTR_IV_1]], i64 8
295292; CHECK-NEXT: call void @foo()
296293; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1
297294; CHECK-NEXT: [[EC_1:%.*]] = icmp eq i64 [[IV_NEXT]], 32
298- ; CHECK-NEXT: [[INDVAR_NEXT]] = add i64 [[INDVAR]], 1
299295; CHECK-NEXT: br i1 [[EC_1]], label %[[LOOP_2_PREHEADER:.*]], label %[[LOOP_1]]
300296; CHECK: [[LOOP_2_PREHEADER]]:
301- ; CHECK-NEXT: [[INDVAR_LCSSA:%.*]] = phi i64 [ [[INDVAR]], %[[LOOP_1]] ]
302297; CHECK-NEXT: [[PTR_IV_1_NEXT_LCSSA:%.*]] = phi ptr [ [[PTR_IV_1_NEXT]], %[[LOOP_1]] ]
303298; CHECK-NEXT: br label %[[LOOP_2:.*]]
304299; CHECK: [[LOOP_2]]:
305- ; CHECK-NEXT: [[INDVAR3:%.*]] = phi i64 [ 0, %[[LOOP_2_PREHEADER]] ], [ [[INDVAR_NEXT4:%.*]], %[[LOOP_2]] ]
306300; CHECK-NEXT: [[IV_1:%.*]] = phi i64 [ [[IV_NEXT_1:%.*]], %[[LOOP_2]] ], [ 1, %[[LOOP_2_PREHEADER]] ]
307301; CHECK-NEXT: [[PTR_IV_2:%.*]] = phi ptr [ [[PTR_IV_2_NEXT:%.*]], %[[LOOP_2]] ], [ [[PTR_IV_1_NEXT_LCSSA]], %[[LOOP_2_PREHEADER]] ]
308302; CHECK-NEXT: call void @bar()
309303; CHECK-NEXT: [[PTR_IV_2_NEXT]] = getelementptr i8, ptr [[PTR_IV_2]], i64 8
310304; CHECK-NEXT: [[IV_NEXT_1]] = add i64 [[IV_1]], 1
311305; CHECK-NEXT: [[EC_2:%.*]] = icmp eq i64 [[IV_NEXT_1]], 32
312- ; CHECK-NEXT: [[INDVAR_NEXT4]] = add i64 [[INDVAR3]], 1
313306; CHECK-NEXT: br i1 [[EC_2]], label %[[LOOP_3_PREHEADER:.*]], label %[[LOOP_2]]
314307; CHECK: [[LOOP_3_PREHEADER]]:
315- ; CHECK-NEXT: [[INDVAR3_LCSSA:%.*]] = phi i64 [ [[INDVAR3]], %[[LOOP_2]] ]
316308; CHECK-NEXT: [[PTR_IV_2_NEXT_LCSSA:%.*]] = phi ptr [ [[PTR_IV_2_NEXT]], %[[LOOP_2]] ]
317309; CHECK-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]]
318310; CHECK: [[VECTOR_MEMCHECK]]:
319- ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[START1]], 16
320- ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[SRC2]]
321- ; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[INDVAR_LCSSA]], 3
322- ; CHECK-NEXT: [[TMP3:%.*]] = add i64 [[TMP2]], [[TMP1]]
323- ; CHECK-NEXT: [[TMP4:%.*]] = shl nuw nsw i64 [[INDVAR3_LCSSA]], 3
324- ; CHECK-NEXT: [[TMP5:%.*]] = add i64 [[TMP4]], [[TMP3]]
311+ ; CHECK-NEXT: [[TMP0:%.*]] = sub i64 0, [[SRC2]]
312+ ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[PTR_IV_2_NEXT_LCSSA]], i64 [[TMP0]]
313+ ; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[TMP1]] to i64
325314; CHECK-NEXT: [[DIFF_CHECK:%.*]] = icmp ult i64 [[TMP5]], 16
326315; CHECK-NEXT: br i1 [[DIFF_CHECK]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]]
327316; CHECK: [[VECTOR_PH]]:
@@ -345,11 +334,11 @@ define void @expand_diff_neg_ptrtoint_expr(ptr %src, ptr %start) {
345334; CHECK-NEXT: br i1 false, label %[[EXIT:.*]], label %[[SCALAR_PH]]
346335; CHECK: [[SCALAR_PH]]:
347336; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ -1, %[[MIDDLE_BLOCK]] ], [ 1, %[[LOOP_3_PREHEADER]] ], [ 1, %[[VECTOR_MEMCHECK]] ]
348- ; CHECK-NEXT: [[BC_RESUME_VAL6 :%.*]] = phi ptr [ [[TMP6]], %[[MIDDLE_BLOCK]] ], [ [[PTR_IV_2_NEXT_LCSSA]], %[[LOOP_3_PREHEADER]] ], [ [[PTR_IV_2_NEXT_LCSSA]], %[[VECTOR_MEMCHECK]] ]
337+ ; CHECK-NEXT: [[BC_RESUME_VAL3 :%.*]] = phi ptr [ [[TMP6]], %[[MIDDLE_BLOCK]] ], [ [[PTR_IV_2_NEXT_LCSSA]], %[[LOOP_3_PREHEADER]] ], [ [[PTR_IV_2_NEXT_LCSSA]], %[[VECTOR_MEMCHECK]] ]
349338; CHECK-NEXT: br label %[[LOOP_3:.*]]
350339; CHECK: [[LOOP_3]]:
351340; CHECK-NEXT: [[IV_2:%.*]] = phi i64 [ [[IV_NEXT_2:%.*]], %[[LOOP_3]] ], [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ]
352- ; CHECK-NEXT: [[PTR_IV_3:%.*]] = phi ptr [ [[PTR_IV_3_NEXT:%.*]], %[[LOOP_3]] ], [ [[BC_RESUME_VAL6 ]], %[[SCALAR_PH]] ]
341+ ; CHECK-NEXT: [[PTR_IV_3:%.*]] = phi ptr [ [[PTR_IV_3_NEXT:%.*]], %[[LOOP_3]] ], [ [[BC_RESUME_VAL3 ]], %[[SCALAR_PH]] ]
353342; CHECK-NEXT: [[TMP12:%.*]] = add i64 [[IV_2]], -1
354343; CHECK-NEXT: [[GEP_SRC:%.*]] = getelementptr double, ptr [[SRC]], i64 [[TMP12]]
355344; CHECK-NEXT: [[L:%.*]] = load i64, ptr [[GEP_SRC]], align 8
0 commit comments