@@ -104,27 +104,23 @@ define void @runtime_checks_ptr_inductions(ptr %dst.1, ptr %dst.2, i1 %c) {
104104; CHECK-LABEL: define void @runtime_checks_ptr_inductions(
105105; CHECK-SAME: ptr [[DST_1:%.*]], ptr [[DST_2:%.*]], i1 [[C:%.*]]) {
106106; CHECK-NEXT: [[ENTRY:.*]]:
107- ; CHECK-NEXT: [[DST_11:%.*]] = ptrtoint ptr [[DST_1]] to i64
108107; CHECK-NEXT: br label %[[LOOP_1:.*]]
109108; CHECK: [[LOOP_1]]:
110- ; CHECK-NEXT: [[INDVAR:%.*]] = phi i64 [ [[INDVAR_NEXT:%.*]], %[[LOOP_1]] ], [ 0, %[[ENTRY]] ]
111109; CHECK-NEXT: [[PTR_IV_1:%.*]] = phi ptr [ [[DST_1]], %[[ENTRY]] ], [ [[PTR_IV_1_NEXT:%.*]], %[[LOOP_1]] ]
112110; CHECK-NEXT: [[CALL:%.*]] = call i32 @val()
113111; CHECK-NEXT: [[SEL_DST:%.*]] = select i1 [[C]], ptr [[DST_1]], ptr [[DST_2]]
114112; CHECK-NEXT: [[PTR_IV_1_NEXT]] = getelementptr i8, ptr [[PTR_IV_1]], i64 1
115113; CHECK-NEXT: [[EC_1:%.*]] = icmp eq i32 [[CALL]], 0
116- ; CHECK-NEXT: [[INDVAR_NEXT]] = add i64 [[INDVAR]], 1
117114; CHECK-NEXT: br i1 [[EC_1]], label %[[LOOP_2_HEADER_PREHEADER:.*]], label %[[LOOP_1]]
118115; CHECK: [[LOOP_2_HEADER_PREHEADER]]:
119- ; CHECK-NEXT: [[SEL_DST_LCSSA2:%.*]] = phi ptr [ [[SEL_DST]], %[[LOOP_1]] ]
120- ; CHECK-NEXT: [[INDVAR_LCSSA:%.*]] = phi i64 [ [[INDVAR]], %[[LOOP_1]] ]
116+ ; CHECK-NEXT: [[SEL_DST_LCSSA1:%.*]] = phi ptr [ [[SEL_DST]], %[[LOOP_1]] ]
121117; CHECK-NEXT: [[PTR_IV_1_LCSSA:%.*]] = phi ptr [ [[PTR_IV_1]], %[[LOOP_1]] ]
122118; CHECK-NEXT: [[SEL_DST_LCSSA:%.*]] = phi ptr [ [[SEL_DST]], %[[LOOP_1]] ]
123- ; CHECK-NEXT: [[SEL_DST_LCSSA23 :%.*]] = ptrtoint ptr [[SEL_DST_LCSSA2 ]] to i64
119+ ; CHECK-NEXT: [[SEL_DST_LCSSA12 :%.*]] = ptrtoint ptr [[SEL_DST_LCSSA1 ]] to i64
124120; CHECK-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]]
125121; CHECK: [[VECTOR_MEMCHECK]]:
126- ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[INDVAR_LCSSA]], [[DST_11]]
127- ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[SEL_DST_LCSSA23 ]]
122+ ; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[PTR_IV_1_LCSSA]] to i64
123+ ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[SEL_DST_LCSSA12 ]]
128124; CHECK-NEXT: [[DIFF_CHECK:%.*]] = icmp ult i64 [[TMP1]], 2
129125; CHECK-NEXT: br i1 [[DIFF_CHECK]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]]
130126; CHECK: [[VECTOR_PH]]:
@@ -146,13 +142,13 @@ define void @runtime_checks_ptr_inductions(ptr %dst.1, ptr %dst.2, i1 %c) {
146142; CHECK-NEXT: br label %[[SCALAR_PH]]
147143; CHECK: [[SCALAR_PH]]:
148144; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i32 [ 1023, %[[MIDDLE_BLOCK]] ], [ 1, %[[LOOP_2_HEADER_PREHEADER]] ], [ 1, %[[VECTOR_MEMCHECK]] ]
149- ; CHECK-NEXT: [[BC_RESUME_VAL5 :%.*]] = phi ptr [ [[TMP2]], %[[MIDDLE_BLOCK]] ], [ [[PTR_IV_1_LCSSA]], %[[LOOP_2_HEADER_PREHEADER]] ], [ [[PTR_IV_1_LCSSA]], %[[VECTOR_MEMCHECK]] ]
150- ; CHECK-NEXT: [[BC_RESUME_VAL6 :%.*]] = phi ptr [ [[TMP3]], %[[MIDDLE_BLOCK]] ], [ [[SEL_DST_LCSSA]], %[[LOOP_2_HEADER_PREHEADER]] ], [ [[SEL_DST_LCSSA]], %[[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]] ]
151147; CHECK-NEXT: br label %[[LOOP_2_HEADER:.*]]
152148; CHECK: [[LOOP_2_HEADER]]:
153149; CHECK-NEXT: [[IV:%.*]] = phi i32 [ [[DEC7:%.*]], %[[LOOP_2_LATCH:.*]] ], [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ]
154- ; CHECK-NEXT: [[PTR_IV_2:%.*]] = phi ptr [ [[PTR_IV_2_NEXT:%.*]], %[[LOOP_2_LATCH]] ], [ [[BC_RESUME_VAL5 ]], %[[SCALAR_PH]] ]
155- ; CHECK-NEXT: [[PTR_IV_3:%.*]] = phi ptr [ [[PTR_IV_3_NEXT:%.*]], %[[LOOP_2_LATCH]] ], [ [[BC_RESUME_VAL6 ]], %[[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]] ]
156152; CHECK-NEXT: [[EC_2:%.*]] = icmp eq i32 [[IV]], 1024
157153; CHECK-NEXT: br i1 [[EC_2]], label %[[EXIT:.*]], label %[[LOOP_2_LATCH]]
158154; CHECK: [[LOOP_2_LATCH]]:
@@ -213,10 +209,8 @@ define void @expand_diff_scev_unknown(ptr %dst, i1 %invar.c, i32 %step) mustprog
213209; CHECK-NEXT: br i1 [[INVAR_C]], label %[[LOOP_2_PREHEADER:.*]], label %[[LOOP_1]]
214210; CHECK: [[LOOP_2_PREHEADER]]:
215211; CHECK-NEXT: [[INDVAR_LCSSA1:%.*]] = phi i32 [ [[INDVAR]], %[[LOOP_1]] ]
216- ; CHECK-NEXT: [[INDVAR_LCSSA:%.*]] = phi i32 [ [[INDVAR]], %[[LOOP_1]] ]
217212; CHECK-NEXT: [[IV_1_LCSSA:%.*]] = phi i32 [ [[IV_1]], %[[LOOP_1]] ]
218- ; CHECK-NEXT: [[TMP0:%.*]] = shl i32 [[STEP]], 1
219- ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[INDVAR_LCSSA]], [[TMP0]]
213+ ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[IV_1_LCSSA]], [[STEP]]
220214; CHECK-NEXT: [[SMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[TMP1]], i32 0)
221215; CHECK-NEXT: [[TMP2:%.*]] = mul i32 [[STEP]], -2
222216; CHECK-NEXT: [[TMP3:%.*]] = mul i32 [[INDVAR_LCSSA1]], -1
@@ -289,53 +283,43 @@ define void @expand_diff_neg_ptrtoint_expr(ptr %src, ptr %start) {
289283; CHECK-SAME: ptr [[SRC:%.*]], ptr [[START:%.*]]) {
290284; CHECK-NEXT: [[ENTRY:.*]]:
291285; CHECK-NEXT: [[SRC2:%.*]] = ptrtoint ptr [[SRC]] to i64
292- ; CHECK-NEXT: [[START1:%.*]] = ptrtoint ptr [[START]] to i64
293286; CHECK-NEXT: br label %[[LOOP_1:.*]]
294287; CHECK: [[LOOP_1]]:
295- ; CHECK-NEXT: [[INDVAR:%.*]] = phi i64 [ [[INDVAR_NEXT:%.*]], %[[LOOP_1]] ], [ 0, %[[ENTRY]] ]
296288; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 1, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP_1]] ]
297289; CHECK-NEXT: [[PTR_IV_1:%.*]] = phi ptr [ [[START]], %[[ENTRY]] ], [ [[PTR_IV_1_NEXT:%.*]], %[[LOOP_1]] ]
298290; CHECK-NEXT: [[PTR_IV_1_NEXT]] = getelementptr i8, ptr [[PTR_IV_1]], i64 8
299291; CHECK-NEXT: call void @foo()
300292; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1
301293; CHECK-NEXT: [[EC_1:%.*]] = icmp eq i64 [[IV_NEXT]], 32
302- ; CHECK-NEXT: [[INDVAR_NEXT]] = add i64 [[INDVAR]], 1
303294; CHECK-NEXT: br i1 [[EC_1]], label %[[LOOP_2_PREHEADER:.*]], label %[[LOOP_1]]
304295; CHECK: [[LOOP_2_PREHEADER]]:
305- ; CHECK-NEXT: [[INDVAR_LCSSA:%.*]] = phi i64 [ [[INDVAR]], %[[LOOP_1]] ]
306296; CHECK-NEXT: [[PTR_IV_1_NEXT_LCSSA:%.*]] = phi ptr [ [[PTR_IV_1_NEXT]], %[[LOOP_1]] ]
307297; CHECK-NEXT: br label %[[LOOP_2:.*]]
308298; CHECK: [[LOOP_2]]:
309- ; CHECK-NEXT: [[INDVAR3:%.*]] = phi i64 [ 0, %[[LOOP_2_PREHEADER]] ], [ [[INDVAR_NEXT4:%.*]], %[[LOOP_2]] ]
310299; CHECK-NEXT: [[IV_1:%.*]] = phi i64 [ [[IV_NEXT_1:%.*]], %[[LOOP_2]] ], [ 1, %[[LOOP_2_PREHEADER]] ]
311300; CHECK-NEXT: [[PTR_IV_2:%.*]] = phi ptr [ [[PTR_IV_2_NEXT:%.*]], %[[LOOP_2]] ], [ [[PTR_IV_1_NEXT_LCSSA]], %[[LOOP_2_PREHEADER]] ]
312301; CHECK-NEXT: call void @bar()
313302; CHECK-NEXT: [[PTR_IV_2_NEXT]] = getelementptr i8, ptr [[PTR_IV_2]], i64 8
314303; CHECK-NEXT: [[IV_NEXT_1]] = add i64 [[IV_1]], 1
315304; CHECK-NEXT: [[EC_2:%.*]] = icmp eq i64 [[IV_NEXT_1]], 32
316- ; CHECK-NEXT: [[INDVAR_NEXT4]] = add i64 [[INDVAR3]], 1
317305; CHECK-NEXT: br i1 [[EC_2]], label %[[LOOP_3_PREHEADER:.*]], label %[[LOOP_2]]
318306; CHECK: [[LOOP_3_PREHEADER]]:
319- ; CHECK-NEXT: [[INDVAR3_LCSSA:%.*]] = phi i64 [ [[INDVAR3]], %[[LOOP_2]] ]
320- ; CHECK-NEXT: [[PTR_IV_2_NEXT_LCSSA:%.*]] = phi ptr [ [[PTR_IV_2_NEXT]], %[[LOOP_2]] ]
307+ ; CHECK-NEXT: [[TMP1:%.*]] = phi ptr [ [[PTR_IV_2_NEXT]], %[[LOOP_2]] ]
321308; CHECK-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]]
322309; CHECK: [[VECTOR_MEMCHECK]]:
323- ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[START1]], 16
324- ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[SRC2]]
325- ; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[INDVAR_LCSSA]], 3
326- ; CHECK-NEXT: [[TMP3:%.*]] = add i64 [[TMP2]], [[TMP1]]
327- ; CHECK-NEXT: [[TMP4:%.*]] = shl nuw nsw i64 [[INDVAR3_LCSSA]], 3
328- ; CHECK-NEXT: [[TMP5:%.*]] = add i64 [[TMP4]], [[TMP3]]
329- ; CHECK-NEXT: [[DIFF_CHECK:%.*]] = icmp ult i64 [[TMP5]], 16
310+ ; CHECK-NEXT: [[TMP0:%.*]] = sub i64 0, [[SRC2]]
311+ ; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[TMP1]] to i64
312+ ; CHECK-NEXT: [[TMP2:%.*]] = add i64 [[TMP5]], [[TMP0]]
313+ ; CHECK-NEXT: [[DIFF_CHECK:%.*]] = icmp ult i64 [[TMP2]], 16
330314; CHECK-NEXT: br i1 [[DIFF_CHECK]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]]
331315; CHECK: [[VECTOR_PH]]:
332- ; CHECK-NEXT: [[TMP6 :%.*]] = getelementptr i8, ptr [[PTR_IV_2_NEXT_LCSSA ]], i64 -16
316+ ; CHECK-NEXT: [[TMP3 :%.*]] = getelementptr i8, ptr [[TMP1 ]], i64 -16
333317; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
334318; CHECK: [[VECTOR_BODY]]:
335319; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
336320; CHECK-NEXT: [[OFFSET_IDX:%.*]] = add i64 1, [[INDEX]]
337321; CHECK-NEXT: [[OFFSET_IDX5:%.*]] = mul i64 [[INDEX]], 8
338- ; CHECK-NEXT: [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[PTR_IV_2_NEXT_LCSSA ]], i64 [[OFFSET_IDX5]]
322+ ; CHECK-NEXT: [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[TMP1 ]], i64 [[OFFSET_IDX5]]
339323; CHECK-NEXT: [[TMP7:%.*]] = add i64 [[OFFSET_IDX]], -1
340324; CHECK-NEXT: [[TMP8:%.*]] = getelementptr double, ptr [[SRC]], i64 [[TMP7]]
341325; CHECK-NEXT: [[TMP9:%.*]] = getelementptr i64, ptr [[TMP8]], i32 0
@@ -349,11 +333,11 @@ define void @expand_diff_neg_ptrtoint_expr(ptr %src, ptr %start) {
349333; CHECK-NEXT: br i1 false, label %[[EXIT:.*]], label %[[SCALAR_PH]]
350334; CHECK: [[SCALAR_PH]]:
351335; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ -1, %[[MIDDLE_BLOCK]] ], [ 1, %[[LOOP_3_PREHEADER]] ], [ 1, %[[VECTOR_MEMCHECK]] ]
352- ; 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]] ]
336+ ; CHECK-NEXT: [[BC_RESUME_VAL3 :%.*]] = phi ptr [ [[TMP3 ]], %[[MIDDLE_BLOCK]] ], [ [[TMP1 ]], %[[LOOP_3_PREHEADER]] ], [ [[TMP1 ]], %[[VECTOR_MEMCHECK]] ]
353337; CHECK-NEXT: br label %[[LOOP_3:.*]]
354338; CHECK: [[LOOP_3]]:
355339; CHECK-NEXT: [[IV_2:%.*]] = phi i64 [ [[IV_NEXT_2:%.*]], %[[LOOP_3]] ], [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ]
356- ; CHECK-NEXT: [[PTR_IV_3:%.*]] = phi ptr [ [[PTR_IV_3_NEXT:%.*]], %[[LOOP_3]] ], [ [[BC_RESUME_VAL6 ]], %[[SCALAR_PH]] ]
340+ ; CHECK-NEXT: [[PTR_IV_3:%.*]] = phi ptr [ [[PTR_IV_3_NEXT:%.*]], %[[LOOP_3]] ], [ [[BC_RESUME_VAL3 ]], %[[SCALAR_PH]] ]
357341; CHECK-NEXT: [[TMP12:%.*]] = add i64 [[IV_2]], -1
358342; CHECK-NEXT: [[GEP_SRC:%.*]] = getelementptr double, ptr [[SRC]], i64 [[TMP12]]
359343; CHECK-NEXT: [[L:%.*]] = load i64, ptr [[GEP_SRC]], align 8
0 commit comments