@@ -143,14 +143,15 @@ exit:
143
143
define void @sext_add_nuw (ptr %A , i32 %offset , i32 %M ) {
144
144
; CHECK-LABEL: @sext_add_nuw(
145
145
; CHECK-NEXT: entry:
146
+ ; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[OFFSET:%.*]] to i64
146
147
; CHECK-NEXT: [[SMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[M:%.*]], i32 1)
147
148
; CHECK-NEXT: [[WIDE_TRIP_COUNT:%.*]] = zext i32 [[SMAX]] to i64
148
149
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
149
150
; CHECK: for.body:
150
151
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]
151
- ; CHECK-NEXT: [[TMP0 :%.*]] = trunc i64 [[INDVARS_IV]] to i32
152
- ; CHECK-NEXT: [[ADD_US :%.*]] = add nuw i32 [[TMP0]], [[OFFSET:%.*]]
153
- ; CHECK-NEXT: [[IDXPROM_US:%.*]] = sext i32 [[ADD_US ]] to i64
152
+ ; CHECK-NEXT: [[TMP1 :%.*]] = add nuw nsw i64 [[INDVARS_IV]], [[TMP0]]
153
+ ; CHECK-NEXT: [[TMP2 :%.*]] = trunc i64 [[TMP1]] to i32
154
+ ; CHECK-NEXT: [[IDXPROM_US:%.*]] = sext i32 [[TMP2 ]] to i64
154
155
; CHECK-NEXT: [[ARRAYIDX_US:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[IDXPROM_US]]
155
156
; CHECK-NEXT: tail call void @use_ptr(ptr [[ARRAYIDX_US]])
156
157
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -215,14 +216,15 @@ exit:
215
216
define void @zext_add_nsw (ptr %A , i32 %offset , i32 %M ) {
216
217
; CHECK-LABEL: @zext_add_nsw(
217
218
; CHECK-NEXT: entry:
219
+ ; CHECK-NEXT: [[TMP0:%.*]] = sext i32 [[OFFSET:%.*]] to i64
218
220
; CHECK-NEXT: [[SMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[M:%.*]], i32 1)
219
221
; CHECK-NEXT: [[WIDE_TRIP_COUNT:%.*]] = zext i32 [[SMAX]] to i64
220
222
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
221
223
; CHECK: for.body:
222
224
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]
223
- ; CHECK-NEXT: [[TMP0 :%.*]] = trunc i64 [[INDVARS_IV]] to i32
224
- ; CHECK-NEXT: [[ADD_US :%.*]] = add nsw i32 [[TMP0]], [[OFFSET:%.*]]
225
- ; CHECK-NEXT: [[IDXPROM_US:%.*]] = zext i32 [[ADD_US ]] to i64
225
+ ; CHECK-NEXT: [[TMP1 :%.*]] = add nsw i64 [[INDVARS_IV]], [[TMP0]]
226
+ ; CHECK-NEXT: [[TMP2 :%.*]] = trunc i64 [[TMP1]] to i32
227
+ ; CHECK-NEXT: [[IDXPROM_US:%.*]] = zext i32 [[TMP2 ]] to i64
226
228
; CHECK-NEXT: [[ARRAYIDX_US:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[IDXPROM_US]]
227
229
; CHECK-NEXT: tail call void @use_ptr(ptr [[ARRAYIDX_US]])
228
230
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -322,14 +324,15 @@ exit:
322
324
define void @zext_nneg_add_nsw (ptr %A , i32 %offset , i32 %M ) {
323
325
; CHECK-LABEL: @zext_nneg_add_nsw(
324
326
; CHECK-NEXT: entry:
327
+ ; CHECK-NEXT: [[TMP0:%.*]] = sext i32 [[OFFSET:%.*]] to i64
325
328
; CHECK-NEXT: [[SMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[M:%.*]], i32 1)
326
329
; CHECK-NEXT: [[WIDE_TRIP_COUNT:%.*]] = zext i32 [[SMAX]] to i64
327
330
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
328
331
; CHECK: for.body:
329
332
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]
330
- ; CHECK-NEXT: [[TMP0 :%.*]] = trunc i64 [[INDVARS_IV]] to i32
331
- ; CHECK-NEXT: [[ADD_US :%.*]] = add nsw i32 [[TMP0]], [[OFFSET:%.*]]
332
- ; CHECK-NEXT: [[IDXPROM_US:%.*]] = zext nneg i32 [[ADD_US ]] to i64
333
+ ; CHECK-NEXT: [[TMP1 :%.*]] = add nsw i64 [[INDVARS_IV]], [[TMP0]]
334
+ ; CHECK-NEXT: [[TMP2 :%.*]] = trunc i64 [[TMP1]] to i32
335
+ ; CHECK-NEXT: [[IDXPROM_US:%.*]] = zext nneg i32 [[TMP2 ]] to i64
333
336
; CHECK-NEXT: [[ARRAYIDX_US:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[IDXPROM_US]]
334
337
; CHECK-NEXT: tail call void @use_ptr(ptr [[ARRAYIDX_US]])
335
338
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -467,14 +470,15 @@ exit:
467
470
define void @sext_mul_nuw (ptr %A , i32 %multiple , i32 %M ) {
468
471
; CHECK-LABEL: @sext_mul_nuw(
469
472
; CHECK-NEXT: entry:
473
+ ; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[MULTIPLE:%.*]] to i64
470
474
; CHECK-NEXT: [[SMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[M:%.*]], i32 1)
471
475
; CHECK-NEXT: [[WIDE_TRIP_COUNT:%.*]] = zext i32 [[SMAX]] to i64
472
476
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
473
477
; CHECK: for.body:
474
478
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]
475
- ; CHECK-NEXT: [[TMP0 :%.*]] = trunc i64 [[INDVARS_IV]] to i32
476
- ; CHECK-NEXT: [[MUL_US :%.*]] = mul nuw i32 [[TMP0]], [[MULTIPLE:%.*]]
477
- ; CHECK-NEXT: [[IDXPROM_US:%.*]] = sext i32 [[MUL_US ]] to i64
479
+ ; CHECK-NEXT: [[TMP1 :%.*]] = mul nuw nsw i64 [[INDVARS_IV]], [[TMP0]]
480
+ ; CHECK-NEXT: [[TMP2 :%.*]] = trunc i64 [[TMP1]] to i32
481
+ ; CHECK-NEXT: [[IDXPROM_US:%.*]] = sext i32 [[TMP2 ]] to i64
478
482
; CHECK-NEXT: [[ARRAYIDX_US:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[IDXPROM_US]]
479
483
; CHECK-NEXT: tail call void @use_ptr(ptr [[ARRAYIDX_US]])
480
484
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -539,14 +543,15 @@ exit:
539
543
define void @zext_mul_nsw (ptr %A , i32 %multiple , i32 %M ) {
540
544
; CHECK-LABEL: @zext_mul_nsw(
541
545
; CHECK-NEXT: entry:
546
+ ; CHECK-NEXT: [[TMP0:%.*]] = sext i32 [[MULTIPLE:%.*]] to i64
542
547
; CHECK-NEXT: [[SMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[M:%.*]], i32 1)
543
548
; CHECK-NEXT: [[WIDE_TRIP_COUNT:%.*]] = zext i32 [[SMAX]] to i64
544
549
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
545
550
; CHECK: for.body:
546
551
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]
547
- ; CHECK-NEXT: [[TMP0 :%.*]] = trunc i64 [[INDVARS_IV]] to i32
548
- ; CHECK-NEXT: [[MUL_US :%.*]] = mul nsw i32 [[TMP0]], [[MULTIPLE:%.*]]
549
- ; CHECK-NEXT: [[IDXPROM_US:%.*]] = zext i32 [[MUL_US ]] to i64
552
+ ; CHECK-NEXT: [[TMP1 :%.*]] = mul nsw i64 [[INDVARS_IV]], [[TMP0]]
553
+ ; CHECK-NEXT: [[TMP2 :%.*]] = trunc i64 [[TMP1]] to i32
554
+ ; CHECK-NEXT: [[IDXPROM_US:%.*]] = zext i32 [[TMP2 ]] to i64
550
555
; CHECK-NEXT: [[ARRAYIDX_US:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[IDXPROM_US]]
551
556
; CHECK-NEXT: tail call void @use_ptr(ptr [[ARRAYIDX_US]])
552
557
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -646,14 +651,15 @@ exit:
646
651
define void @zext_nneg_mul_nsw (ptr %A , i32 %multiple , i32 %M ) {
647
652
; CHECK-LABEL: @zext_nneg_mul_nsw(
648
653
; CHECK-NEXT: entry:
654
+ ; CHECK-NEXT: [[TMP0:%.*]] = sext i32 [[MULTIPLE:%.*]] to i64
649
655
; CHECK-NEXT: [[SMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[M:%.*]], i32 1)
650
656
; CHECK-NEXT: [[WIDE_TRIP_COUNT:%.*]] = zext i32 [[SMAX]] to i64
651
657
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
652
658
; CHECK: for.body:
653
659
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]
654
- ; CHECK-NEXT: [[TMP0 :%.*]] = trunc i64 [[INDVARS_IV]] to i32
655
- ; CHECK-NEXT: [[MUL_US :%.*]] = mul nsw i32 [[TMP0]], [[MULTIPLE:%.*]]
656
- ; CHECK-NEXT: [[IDXPROM_US:%.*]] = zext nneg i32 [[MUL_US ]] to i64
660
+ ; CHECK-NEXT: [[TMP1 :%.*]] = mul nsw i64 [[INDVARS_IV]], [[TMP0]]
661
+ ; CHECK-NEXT: [[TMP2 :%.*]] = trunc i64 [[TMP1]] to i32
662
+ ; CHECK-NEXT: [[IDXPROM_US:%.*]] = zext nneg i32 [[TMP2 ]] to i64
657
663
; CHECK-NEXT: [[ARRAYIDX_US:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[IDXPROM_US]]
658
664
; CHECK-NEXT: tail call void @use_ptr(ptr [[ARRAYIDX_US]])
659
665
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
0 commit comments