@@ -115,8 +115,7 @@ define void @test_range_metadata(ptr %array_length_ptr, ptr %base,
115115; CHECK-LABEL: @test_range_metadata(
116116; CHECK-NEXT: for.body.lr.ph:
117117; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[START:%.*]] to i64
118- ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[START]], 1
119- ; CHECK-NEXT: [[SMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[LIMIT:%.*]], i32 [[TMP1]])
118+ ; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[LIMIT:%.*]] to i64
120119; CHECK-NEXT: br label [[FOR_BODY:%.*]]
121120; CHECK: for.body:
122121; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ [[TMP0]], [[FOR_BODY_LR_PH:%.*]] ]
@@ -128,8 +127,7 @@ define void @test_range_metadata(ptr %array_length_ptr, ptr %base,
128127; CHECK-NEXT: br label [[FOR_INC]]
129128; CHECK: for.inc:
130129; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
131- ; CHECK-NEXT: [[LFTR_WIDEIV:%.*]] = trunc i64 [[INDVARS_IV_NEXT]] to i32
132- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[LFTR_WIDEIV]], [[SMAX]]
130+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[INDVARS_IV_NEXT]], [[TMP1]]
133131; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]
134132; CHECK: for.end:
135133; CHECK-NEXT: br label [[EXIT:%.*]]
@@ -223,11 +221,10 @@ define void @test_transitive_use(ptr %base, i32 %limit, i32 %start) {
223221; CHECK-LABEL: @test_transitive_use(
224222; CHECK-NEXT: for.body.lr.ph:
225223; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[START:%.*]] to i64
226- ; CHECK-NEXT: [[TMP2:%.*]] = sext i32 [[LIMIT:%.*]] to i64
224+ ; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[LIMIT:%.*]] to i64
225+ ; CHECK-NEXT: [[TMP2:%.*]] = sext i32 [[LIMIT]] to i64
227226; CHECK-NEXT: [[UMAX:%.*]] = call i32 @llvm.umax.i32(i32 [[START]], i32 64)
228227; CHECK-NEXT: [[WIDE_TRIP_COUNT:%.*]] = zext i32 [[UMAX]] to i64
229- ; CHECK-NEXT: [[TMP5:%.*]] = add i32 [[START]], 1
230- ; CHECK-NEXT: [[SMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[LIMIT]], i32 [[TMP5]])
231228; CHECK-NEXT: br label [[FOR_BODY:%.*]]
232229; CHECK: for.body:
233230; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ [[TMP0]], [[FOR_BODY_LR_PH:%.*]] ]
@@ -239,14 +236,13 @@ define void @test_transitive_use(ptr %base, i32 %limit, i32 %start) {
239236; CHECK-NEXT: br i1 [[MUL_WITHIN]], label [[GUARDED:%.*]], label [[CONTINUE_2:%.*]]
240237; CHECK: guarded:
241238; CHECK-NEXT: [[TMP4:%.*]] = add nuw nsw i64 [[TMP3]], 1
242- ; CHECK-NEXT: [[RESULT:%.*]] = icmp slt i64 [[TMP4]], [[TMP2 ]]
239+ ; CHECK-NEXT: [[RESULT:%.*]] = icmp slt i64 [[TMP4]], [[TMP1 ]]
243240; CHECK-NEXT: br i1 [[RESULT]], label [[CONTINUE_2]], label [[FOR_END]]
244241; CHECK: continue.2:
245242; CHECK-NEXT: br label [[FOR_INC]]
246243; CHECK: for.inc:
247244; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
248- ; CHECK-NEXT: [[LFTR_WIDEIV:%.*]] = trunc i64 [[INDVARS_IV_NEXT]] to i32
249- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[LFTR_WIDEIV]], [[SMAX]]
245+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[INDVARS_IV_NEXT]], [[TMP2]]
250246; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]
251247; CHECK: for.end:
252248; CHECK-NEXT: br label [[EXIT:%.*]]
@@ -297,16 +293,14 @@ define void @test_guard_one_bb(ptr %base, i32 %limit, i32 %start) {
297293; CHECK-LABEL: @test_guard_one_bb(
298294; CHECK-NEXT: for.body.lr.ph:
299295; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[START:%.*]] to i64
300- ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[START]], 1
301- ; CHECK-NEXT: [[SMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[LIMIT:%.*]], i32 [[TMP1]])
296+ ; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[LIMIT:%.*]] to i64
302297; CHECK-NEXT: br label [[FOR_BODY:%.*]]
303298; CHECK: for.body:
304299; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ], [ [[TMP0]], [[FOR_BODY_LR_PH:%.*]] ]
305300; CHECK-NEXT: [[WITHIN_LIMITS:%.*]] = icmp ult i64 [[INDVARS_IV]], 64
306301; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[WITHIN_LIMITS]]) [ "deopt"() ]
307302; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
308- ; CHECK-NEXT: [[LFTR_WIDEIV:%.*]] = trunc i64 [[INDVARS_IV_NEXT]] to i32
309- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[LFTR_WIDEIV]], [[SMAX]]
303+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[INDVARS_IV_NEXT]], [[TMP1]]
310304; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
311305; CHECK: for.end:
312306; CHECK-NEXT: br label [[EXIT:%.*]]
@@ -339,8 +333,7 @@ define void @test_guard_in_the_same_bb(ptr %base, i32 %limit, i32 %start) {
339333; CHECK-LABEL: @test_guard_in_the_same_bb(
340334; CHECK-NEXT: for.body.lr.ph:
341335; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[START:%.*]] to i64
342- ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[START]], 1
343- ; CHECK-NEXT: [[SMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[LIMIT:%.*]], i32 [[TMP1]])
336+ ; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[LIMIT:%.*]] to i64
344337; CHECK-NEXT: br label [[FOR_BODY:%.*]]
345338; CHECK: for.body:
346339; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ [[TMP0]], [[FOR_BODY_LR_PH:%.*]] ]
@@ -349,8 +342,7 @@ define void @test_guard_in_the_same_bb(ptr %base, i32 %limit, i32 %start) {
349342; CHECK: for.inc:
350343; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[WITHIN_LIMITS]]) [ "deopt"() ]
351344; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
352- ; CHECK-NEXT: [[LFTR_WIDEIV:%.*]] = trunc i64 [[INDVARS_IV_NEXT]] to i32
353- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[LFTR_WIDEIV]], [[SMAX]]
345+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[INDVARS_IV_NEXT]], [[TMP1]]
354346; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
355347; CHECK: for.end:
356348; CHECK-NEXT: br label [[EXIT:%.*]]
@@ -386,8 +378,7 @@ define void @test_guard_in_idom(ptr %base, i32 %limit, i32 %start) {
386378; CHECK-LABEL: @test_guard_in_idom(
387379; CHECK-NEXT: for.body.lr.ph:
388380; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[START:%.*]] to i64
389- ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[START]], 1
390- ; CHECK-NEXT: [[SMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[LIMIT:%.*]], i32 [[TMP1]])
381+ ; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[LIMIT:%.*]] to i64
391382; CHECK-NEXT: br label [[FOR_BODY:%.*]]
392383; CHECK: for.body:
393384; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC:%.*]] ], [ [[TMP0]], [[FOR_BODY_LR_PH:%.*]] ]
@@ -396,8 +387,7 @@ define void @test_guard_in_idom(ptr %base, i32 %limit, i32 %start) {
396387; CHECK-NEXT: br label [[FOR_INC]]
397388; CHECK: for.inc:
398389; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
399- ; CHECK-NEXT: [[LFTR_WIDEIV:%.*]] = trunc i64 [[INDVARS_IV_NEXT]] to i32
400- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[LFTR_WIDEIV]], [[SMAX]]
390+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[INDVARS_IV_NEXT]], [[TMP1]]
401391; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
402392; CHECK: for.end:
403393; CHECK-NEXT: br label [[EXIT:%.*]]
@@ -433,8 +423,7 @@ define void @test_guard_merge_ranges(ptr %base, i32 %limit, i32 %start) {
433423; CHECK-LABEL: @test_guard_merge_ranges(
434424; CHECK-NEXT: for.body.lr.ph:
435425; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[START:%.*]] to i64
436- ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[START]], 1
437- ; CHECK-NEXT: [[SMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[LIMIT:%.*]], i32 [[TMP1]])
426+ ; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[LIMIT:%.*]] to i64
438427; CHECK-NEXT: br label [[FOR_BODY:%.*]]
439428; CHECK: for.body:
440429; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ], [ [[TMP0]], [[FOR_BODY_LR_PH:%.*]] ]
@@ -443,8 +432,7 @@ define void @test_guard_merge_ranges(ptr %base, i32 %limit, i32 %start) {
443432; CHECK-NEXT: [[WITHIN_LIMITS_2:%.*]] = icmp ult i64 [[INDVARS_IV]], 2147483647
444433; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[WITHIN_LIMITS_2]]) [ "deopt"() ]
445434; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
446- ; CHECK-NEXT: [[LFTR_WIDEIV:%.*]] = trunc i64 [[INDVARS_IV_NEXT]] to i32
447- ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[LFTR_WIDEIV]], [[SMAX]]
435+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[INDVARS_IV_NEXT]], [[TMP1]]
448436; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
449437; CHECK: for.end:
450438; CHECK-NEXT: br label [[EXIT:%.*]]
0 commit comments