@@ -103,17 +103,17 @@ define void @test2([8 x i8]* %a, i8* %b, i8 %limit) {
103
103
; CHECK: for.cond1.preheader.preheader:
104
104
; CHECK-NEXT: br label [[FOR_COND1_PREHEADER:%.*]]
105
105
; CHECK: for.cond1.preheader.us:
106
- ; CHECK-NEXT: [[INDVARS_IV3 :%.*]] = phi i64 [ 0, [[FOR_COND1_PREHEADER_US_PREHEADER]] ], [ [[INDVARS_IV_NEXT4 :%.*]], [[FOR_INC13_US:%.*]] ]
106
+ ; CHECK-NEXT: [[INDVARS_IV2 :%.*]] = phi i64 [ 0, [[FOR_COND1_PREHEADER_US_PREHEADER]] ], [ [[INDVARS_IV_NEXT3 :%.*]], [[FOR_INC13_US:%.*]] ]
107
107
; CHECK-NEXT: br i1 true, label [[FOR_BODY4_LR_PH_US:%.*]], label [[FOR_INC13_US]]
108
108
; CHECK: for.inc13.us.loopexit:
109
109
; CHECK-NEXT: br label [[FOR_INC13_US]]
110
110
; CHECK: for.inc13.us:
111
- ; CHECK-NEXT: [[INDVARS_IV_NEXT4 ]] = add nuw nsw i64 [[INDVARS_IV3 ]], 1
112
- ; CHECK-NEXT: [[EXITCOND6 :%.*]] = icmp ne i64 [[INDVARS_IV_NEXT4 ]], 4
113
- ; CHECK-NEXT: br i1 [[EXITCOND6 ]], label [[FOR_COND1_PREHEADER_US]], label [[FOR_END_LOOPEXIT1:%.*]]
111
+ ; CHECK-NEXT: [[INDVARS_IV_NEXT3 ]] = add nuw nsw i64 [[INDVARS_IV2 ]], 1
112
+ ; CHECK-NEXT: [[EXITCOND4 :%.*]] = icmp ne i64 [[INDVARS_IV_NEXT3 ]], 4
113
+ ; CHECK-NEXT: br i1 [[EXITCOND4 ]], label [[FOR_COND1_PREHEADER_US]], label [[FOR_END_LOOPEXIT1:%.*]]
114
114
; CHECK: for.body4.us:
115
115
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[FOR_BODY4_LR_PH_US]] ], [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY4_US:%.*]] ]
116
- ; CHECK-NEXT: [[ARRAYIDX6_US:%.*]] = getelementptr inbounds [8 x i8], [8 x i8]* [[A:%.*]], i64 [[INDVARS_IV3 ]], i64 [[INDVARS_IV]]
116
+ ; CHECK-NEXT: [[ARRAYIDX6_US:%.*]] = getelementptr inbounds [8 x i8], [8 x i8]* [[A:%.*]], i64 [[INDVARS_IV2 ]], i64 [[INDVARS_IV]]
117
117
; CHECK-NEXT: [[TMP0:%.*]] = load i8, i8* [[ARRAYIDX6_US]], align 1
118
118
; CHECK-NEXT: [[IDXPROM7_US:%.*]] = zext i8 [[TMP0]] to i64
119
119
; CHECK-NEXT: [[ARRAYIDX8_US:%.*]] = getelementptr inbounds i8, i8* [[B:%.*]], i64 [[IDXPROM7_US]]
@@ -549,14 +549,14 @@ define i32 @test11(i32 %start, i32* %p, i32* %q) {
549
549
; CHECK: loop:
550
550
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[BACKEDGE:%.*]] ], [ [[TMP0]], [[ENTRY:%.*]] ]
551
551
; CHECK-NEXT: [[TMP1:%.*]] = add nsw i64 [[INDVARS_IV]], -1
552
- ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], -1
553
552
; CHECK-NEXT: [[COND:%.*]] = icmp eq i64 [[INDVARS_IV]], 0
554
553
; CHECK-NEXT: br i1 [[COND]], label [[EXIT:%.*]], label [[BACKEDGE]]
555
554
; CHECK: backedge:
556
555
; CHECK-NEXT: [[STORE_ADDR:%.*]] = getelementptr i32, i32* [[P:%.*]], i64 [[TMP1]]
557
556
; CHECK-NEXT: store i32 1, i32* [[STORE_ADDR]], align 4
558
557
; CHECK-NEXT: [[STOP:%.*]] = load i32, i32* [[Q:%.*]], align 4
559
558
; CHECK-NEXT: [[LOOP_COND:%.*]] = icmp eq i32 [[STOP]], 0
559
+ ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], -1
560
560
; CHECK-NEXT: br i1 [[LOOP_COND]], label [[LOOP]], label [[FAILURE:%.*]]
561
561
; CHECK: exit:
562
562
; CHECK-NEXT: ret i32 0
@@ -599,11 +599,11 @@ define i32 @test12(i32 %start, i32* %p, i32* %q) {
599
599
; CHECK-NEXT: br i1 [[COND]], label [[EXIT:%.*]], label [[BACKEDGE]]
600
600
; CHECK: backedge:
601
601
; CHECK-NEXT: [[TMP1:%.*]] = add nsw i64 [[INDVARS_IV]], -1
602
- ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], -1
603
602
; CHECK-NEXT: [[STORE_ADDR:%.*]] = getelementptr i32, i32* [[P:%.*]], i64 [[TMP1]]
604
603
; CHECK-NEXT: store i32 1, i32* [[STORE_ADDR]], align 4
605
604
; CHECK-NEXT: [[STOP:%.*]] = load i32, i32* [[Q:%.*]], align 4
606
605
; CHECK-NEXT: [[LOOP_COND:%.*]] = icmp eq i32 [[STOP]], 0
606
+ ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], -1
607
607
; CHECK-NEXT: br i1 [[LOOP_COND]], label [[LOOP]], label [[FAILURE:%.*]]
608
608
; CHECK: exit:
609
609
; CHECK-NEXT: ret i32 0
@@ -862,8 +862,8 @@ define i32 @test16_unsigned_pos1(i32 %start, i32* %p, i32* %q, i32 %x) {
862
862
; CHECK-NEXT: [[TMP3:%.*]] = add nsw i64 [[INDVARS_IV]], -1
863
863
; CHECK-NEXT: br i1 [[COND]], label [[EXIT:%.*]], label [[GUARDED:%.*]]
864
864
; CHECK: guarded:
865
- ; CHECK-NEXT: [[ICMP_USER_WIDE5 :%.*]] = icmp ult i64 [[TMP1]], [[TMP2]]
866
- ; CHECK-NEXT: br i1 [[ICMP_USER_WIDE5 ]], label [[BACKEDGE]], label [[SIDE_EXIT:%.*]]
865
+ ; CHECK-NEXT: [[ICMP_USER_WIDE4 :%.*]] = icmp ult i64 [[TMP1]], [[TMP2]]
866
+ ; CHECK-NEXT: br i1 [[ICMP_USER_WIDE4 ]], label [[BACKEDGE]], label [[SIDE_EXIT:%.*]]
867
867
; CHECK: backedge:
868
868
; CHECK-NEXT: [[STORE_ADDR:%.*]] = getelementptr i32, i32* [[P:%.*]], i64 [[TMP3]]
869
869
; CHECK-NEXT: store i32 1, i32* [[STORE_ADDR]], align 4
@@ -1266,13 +1266,13 @@ define i32 @test17(i32* %p, i32 %len) {
1266
1266
; CHECK: loop:
1267
1267
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[BACKEDGE:%.*]] ], [ [[TMP0]], [[ENTRY:%.*]] ]
1268
1268
; CHECK-NEXT: [[TMP1:%.*]] = add nsw i64 [[INDVARS_IV]], -1
1269
- ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], -1
1270
1269
; CHECK-NEXT: [[COND_1:%.*]] = icmp eq i64 [[INDVARS_IV]], 0
1271
1270
; CHECK-NEXT: br i1 [[COND_1]], label [[EXIT:%.*]], label [[BACKEDGE]]
1272
1271
; CHECK: backedge:
1273
1272
; CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i32, i32* [[P:%.*]], i64 [[TMP1]]
1274
1273
; CHECK-NEXT: [[LOADED:%.*]] = load atomic i32, i32* [[ADDR]] unordered, align 4
1275
1274
; CHECK-NEXT: [[COND_2:%.*]] = icmp eq i32 [[LOADED]], 0
1275
+ ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], -1
1276
1276
; CHECK-NEXT: br i1 [[COND_2]], label [[FAILURE:%.*]], label [[LOOP]]
1277
1277
; CHECK: exit:
1278
1278
; CHECK-NEXT: [[TMP2:%.*]] = trunc i64 -1 to i32
@@ -1312,9 +1312,10 @@ define void @test18() {
1312
1312
; CHECK-NEXT: br label [[LOOP:%.*]]
1313
1313
; CHECK: loop:
1314
1314
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY:%.*]] ]
1315
+ ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ [[IV_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY]] ]
1316
+ ; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
1315
1317
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
1316
- ; CHECK-NEXT: [[INDVARS2:%.*]] = trunc i64 [[INDVARS_IV_NEXT]] to i32
1317
- ; CHECK-NEXT: call void @bar(i32 [[INDVARS2]])
1318
+ ; CHECK-NEXT: call void @bar(i32 [[IV_NEXT]])
1318
1319
; CHECK-NEXT: call void @foo(i64 [[INDVARS_IV]])
1319
1320
; CHECK-NEXT: [[LOOP_COND:%.*]] = icmp eq i64 [[INDVARS_IV]], 1000
1320
1321
; CHECK-NEXT: br i1 [[LOOP_COND]], label [[EXIT:%.*]], label [[LOOP]]
@@ -1411,10 +1412,11 @@ define void @test21(i32* %ptr) {
1411
1412
; CHECK-NEXT: br label [[LOOP:%.*]]
1412
1413
; CHECK: loop:
1413
1414
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ], [ 0, [[ENTRY:%.*]] ]
1414
- ; CHECK-NEXT: [[INDVARS_IV_NEXT ]] = add nuw nsw i64 [[INDVARS_IV]], 1
1415
- ; CHECK-NEXT: [[INDVARS:%.* ]] = trunc i64 [[INDVARS_IV_NEXT]] to i32
1416
- ; CHECK-NEXT: store i32 [[INDVARS ]], i32* [[PTR]], align 4
1415
+ ; CHECK-NEXT: [[VAL:%.* ]] = phi i32 [ [[VAL_INC:%.*]], [[LOOP]] ], [ 0, [[ENTRY]] ]
1416
+ ; CHECK-NEXT: [[VAL_INC ]] = add nuw nsw i32 [[VAL]], 1
1417
+ ; CHECK-NEXT: store i32 [[VAL_INC ]], i32* [[PTR]], align 4
1417
1418
; CHECK-NEXT: call void @foo(i64 [[INDVARS_IV]])
1419
+ ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
1418
1420
; CHECK-NEXT: [[LOOP_COND:%.*]] = icmp eq i64 [[INDVARS_IV]], 1000
1419
1421
; CHECK-NEXT: br i1 [[LOOP_COND]], label [[EXIT:%.*]], label [[LOOP]]
1420
1422
; CHECK: exit:
0 commit comments