@@ -115,8 +115,7 @@ define void @test_range_metadata(ptr %array_length_ptr, ptr %base,
115
115
; CHECK-LABEL: @test_range_metadata(
116
116
; CHECK-NEXT: for.body.lr.ph:
117
117
; 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
120
119
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
121
120
; CHECK: for.body:
122
121
; 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,
128
127
; CHECK-NEXT: br label [[FOR_INC]]
129
128
; CHECK: for.inc:
130
129
; 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]]
133
131
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]
134
132
; CHECK: for.end:
135
133
; CHECK-NEXT: br label [[EXIT:%.*]]
@@ -223,11 +221,10 @@ define void @test_transitive_use(ptr %base, i32 %limit, i32 %start) {
223
221
; CHECK-LABEL: @test_transitive_use(
224
222
; CHECK-NEXT: for.body.lr.ph:
225
223
; 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
227
226
; CHECK-NEXT: [[UMAX:%.*]] = call i32 @llvm.umax.i32(i32 [[START]], i32 64)
228
227
; 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]])
231
228
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
232
229
; CHECK: for.body:
233
230
; 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) {
239
236
; CHECK-NEXT: br i1 [[MUL_WITHIN]], label [[GUARDED:%.*]], label [[CONTINUE_2:%.*]]
240
237
; CHECK: guarded:
241
238
; 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 ]]
243
240
; CHECK-NEXT: br i1 [[RESULT]], label [[CONTINUE_2]], label [[FOR_END]]
244
241
; CHECK: continue.2:
245
242
; CHECK-NEXT: br label [[FOR_INC]]
246
243
; CHECK: for.inc:
247
244
; 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]]
250
246
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]
251
247
; CHECK: for.end:
252
248
; CHECK-NEXT: br label [[EXIT:%.*]]
@@ -297,16 +293,14 @@ define void @test_guard_one_bb(ptr %base, i32 %limit, i32 %start) {
297
293
; CHECK-LABEL: @test_guard_one_bb(
298
294
; CHECK-NEXT: for.body.lr.ph:
299
295
; 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
302
297
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
303
298
; CHECK: for.body:
304
299
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ], [ [[TMP0]], [[FOR_BODY_LR_PH:%.*]] ]
305
300
; CHECK-NEXT: [[WITHIN_LIMITS:%.*]] = icmp ult i64 [[INDVARS_IV]], 64
306
301
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[WITHIN_LIMITS]]) [ "deopt"() ]
307
302
; 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]]
310
304
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
311
305
; CHECK: for.end:
312
306
; CHECK-NEXT: br label [[EXIT:%.*]]
@@ -339,8 +333,7 @@ define void @test_guard_in_the_same_bb(ptr %base, i32 %limit, i32 %start) {
339
333
; CHECK-LABEL: @test_guard_in_the_same_bb(
340
334
; CHECK-NEXT: for.body.lr.ph:
341
335
; 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
344
337
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
345
338
; CHECK: for.body:
346
339
; 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) {
349
342
; CHECK: for.inc:
350
343
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[WITHIN_LIMITS]]) [ "deopt"() ]
351
344
; 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]]
354
346
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
355
347
; CHECK: for.end:
356
348
; CHECK-NEXT: br label [[EXIT:%.*]]
@@ -386,8 +378,7 @@ define void @test_guard_in_idom(ptr %base, i32 %limit, i32 %start) {
386
378
; CHECK-LABEL: @test_guard_in_idom(
387
379
; CHECK-NEXT: for.body.lr.ph:
388
380
; 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
391
382
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
392
383
; CHECK: for.body:
393
384
; 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) {
396
387
; CHECK-NEXT: br label [[FOR_INC]]
397
388
; CHECK: for.inc:
398
389
; 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]]
401
391
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
402
392
; CHECK: for.end:
403
393
; CHECK-NEXT: br label [[EXIT:%.*]]
@@ -433,8 +423,7 @@ define void @test_guard_merge_ranges(ptr %base, i32 %limit, i32 %start) {
433
423
; CHECK-LABEL: @test_guard_merge_ranges(
434
424
; CHECK-NEXT: for.body.lr.ph:
435
425
; 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
438
427
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
439
428
; CHECK: for.body:
440
429
; 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) {
443
432
; CHECK-NEXT: [[WITHIN_LIMITS_2:%.*]] = icmp ult i64 [[INDVARS_IV]], 2147483647
444
433
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[WITHIN_LIMITS_2]]) [ "deopt"() ]
445
434
; 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]]
448
436
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
449
437
; CHECK: for.end:
450
438
; CHECK-NEXT: br label [[EXIT:%.*]]
0 commit comments