@@ -801,33 +801,27 @@ define i32 @test_add_reduction_unroll_partial(ptr %a, i64 noundef %n) {
801801; OTHER-NEXT: br label %[[LOOP:.*]]
802802; OTHER: [[LOOP]]:
803803; OTHER-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT_3:%.*]], %[[LOOP]] ]
804- ; OTHER-NEXT: [[RDX_1:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[RDX_NEXT_1:%.*]], %[[LOOP]] ]
805- ; OTHER-NEXT: [[RDX_2:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[RDX_NEXT_2:%.*]], %[[LOOP]] ]
806- ; OTHER-NEXT: [[RDX_3:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[RDX_NEXT_3:%.*]], %[[LOOP]] ]
807- ; OTHER-NEXT: [[RDX:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[RDX_NEXT:%.*]], %[[LOOP]] ]
804+ ; OTHER-NEXT: [[RDX:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[RDX_NEXT_3:%.*]], %[[LOOP]] ]
808805; OTHER-NEXT: [[GEP_A:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV]]
809806; OTHER-NEXT: [[TMP0:%.*]] = load i32, ptr [[GEP_A]], align 2
810- ; OTHER-NEXT: [[RDX_NEXT]] = add i32 [[RDX]], [[TMP0]]
807+ ; OTHER-NEXT: [[RDX_NEXT:%.* ]] = add nuw nsw i32 [[RDX]], [[TMP0]]
811808; OTHER-NEXT: [[IV_NEXT:%.*]] = add nuw nsw i64 [[IV]], 1
812809; OTHER-NEXT: [[GEP_A_1:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV_NEXT]]
813810; OTHER-NEXT: [[TMP1:%.*]] = load i32, ptr [[GEP_A_1]], align 2
814- ; OTHER-NEXT: [[RDX_NEXT_1 ]] = add i32 [[RDX_1 ]], [[TMP1]]
811+ ; OTHER-NEXT: [[RDX_2:%.* ]] = add nuw nsw i32 [[RDX_NEXT ]], [[TMP1]]
815812; OTHER-NEXT: [[IV_NEXT_1:%.*]] = add nuw nsw i64 [[IV]], 2
816813; OTHER-NEXT: [[GEP_A_2:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV_NEXT_1]]
817814; OTHER-NEXT: [[TMP2:%.*]] = load i32, ptr [[GEP_A_2]], align 2
818- ; OTHER-NEXT: [[RDX_NEXT_2]] = add i32 [[RDX_2]], [[TMP2]]
815+ ; OTHER-NEXT: [[RDX_NEXT_2:%.* ]] = add nuw nsw i32 [[RDX_2]], [[TMP2]]
819816; OTHER-NEXT: [[IV_NEXT_2:%.*]] = add nuw nsw i64 [[IV]], 3
820817; OTHER-NEXT: [[GEP_A_3:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV_NEXT_2]]
821818; OTHER-NEXT: [[TMP3:%.*]] = load i32, ptr [[GEP_A_3]], align 2
822- ; OTHER-NEXT: [[RDX_NEXT_3]] = add i32 [[RDX_3 ]], [[TMP3]]
819+ ; OTHER-NEXT: [[RDX_NEXT_3]] = add nuw nsw i32 [[RDX_NEXT_2 ]], [[TMP3]]
823820; OTHER-NEXT: [[IV_NEXT_3]] = add nuw nsw i64 [[IV]], 4
824821; OTHER-NEXT: [[EC_3:%.*]] = icmp eq i64 [[IV_NEXT_3]], 1024
825822; OTHER-NEXT: br i1 [[EC_3]], label %[[EXIT:.*]], label %[[LOOP]]
826823; OTHER: [[EXIT]]:
827- ; OTHER-NEXT: [[RES:%.*]] = phi i32 [ [[RDX_NEXT_3]], %[[LOOP]] ]
828- ; OTHER-NEXT: [[BIN_RDX:%.*]] = add i32 [[RDX_NEXT_1]], [[RDX_NEXT]]
829- ; OTHER-NEXT: [[BIN_RDX1:%.*]] = add i32 [[RDX_NEXT_2]], [[BIN_RDX]]
830- ; OTHER-NEXT: [[BIN_RDX2:%.*]] = add i32 [[RDX_NEXT_3]], [[BIN_RDX1]]
824+ ; OTHER-NEXT: [[BIN_RDX2:%.*]] = phi i32 [ [[RDX_NEXT_3]], %[[LOOP]] ]
831825; OTHER-NEXT: ret i32 [[BIN_RDX2]]
832826;
833827entry:
@@ -951,25 +945,23 @@ define i32 @test_add_and_mul_reduction_unroll_partial(ptr %a, i64 noundef %n) {
951945; OTHER-NEXT: br label %[[LOOP:.*]]
952946; OTHER: [[LOOP]]:
953947; OTHER-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT_1:%.*]], %[[LOOP]] ]
954- ; OTHER-NEXT: [[RDX_1:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[RDX_NEXT_1:%.*]], %[[LOOP]] ]
955- ; OTHER-NEXT: [[RDX:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[RDX_NEXT:%.*]], %[[LOOP]] ]
948+ ; OTHER-NEXT: [[RDX:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[RDX_NEXT_1:%.*]], %[[LOOP]] ]
956949; OTHER-NEXT: [[RDX_2:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[RDX_2_NEXT_1:%.*]], %[[LOOP]] ]
957950; OTHER-NEXT: [[GEP_A:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV]]
958951; OTHER-NEXT: [[TMP0:%.*]] = load i32, ptr [[GEP_A]], align 2
959- ; OTHER-NEXT: [[RDX_NEXT]] = add i32 [[RDX]], [[TMP0]]
952+ ; OTHER-NEXT: [[RDX_NEXT:%.* ]] = add nuw nsw i32 [[RDX]], [[TMP0]]
960953; OTHER-NEXT: [[RDX_2_NEXT:%.*]] = mul i32 [[RDX_2]], [[TMP0]]
961954; OTHER-NEXT: [[IV_NEXT:%.*]] = add nuw nsw i64 [[IV]], 1
962955; OTHER-NEXT: [[GEP_A_1:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV_NEXT]]
963956; OTHER-NEXT: [[TMP1:%.*]] = load i32, ptr [[GEP_A_1]], align 2
964- ; OTHER-NEXT: [[RDX_NEXT_1]] = add i32 [[RDX_1 ]], [[TMP1]]
957+ ; OTHER-NEXT: [[RDX_NEXT_1]] = add nuw nsw i32 [[RDX_NEXT ]], [[TMP1]]
965958; OTHER-NEXT: [[RDX_2_NEXT_1]] = mul i32 [[RDX_2_NEXT]], [[TMP1]]
966959; OTHER-NEXT: [[IV_NEXT_1]] = add nuw nsw i64 [[IV]], 2
967960; OTHER-NEXT: [[EC_1:%.*]] = icmp eq i64 [[IV_NEXT_1]], 1024
968961; OTHER-NEXT: br i1 [[EC_1]], label %[[EXIT:.*]], label %[[LOOP]]
969962; OTHER: [[EXIT]]:
970- ; OTHER-NEXT: [[RES_1 :%.*]] = phi i32 [ [[RDX_NEXT_1]], %[[LOOP]] ]
963+ ; OTHER-NEXT: [[BIN_RDX :%.*]] = phi i32 [ [[RDX_NEXT_1]], %[[LOOP]] ]
971964; OTHER-NEXT: [[RES_2:%.*]] = phi i32 [ [[RDX_2_NEXT_1]], %[[LOOP]] ]
972- ; OTHER-NEXT: [[BIN_RDX:%.*]] = add i32 [[RDX_NEXT_1]], [[RDX_NEXT]]
973965; OTHER-NEXT: [[SUM:%.*]] = add i32 [[BIN_RDX]], [[RES_2]]
974966; OTHER-NEXT: ret i32 [[SUM]]
975967;
@@ -1026,26 +1018,23 @@ define i32 @test_add_reduction_runtime(ptr %a, i64 noundef %n) {
10261018; OTHER-NEXT: br label %[[LOOP:.*]]
10271019; OTHER: [[LOOP]]:
10281020; OTHER-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY_NEW]] ], [ [[IV_NEXT_3:%.*]], %[[LOOP]] ]
1029- ; OTHER-NEXT: [[RDX_1:%.*]] = phi i32 [ 0, %[[ENTRY_NEW]] ], [ [[RDX_NEXT_1:%.*]], %[[LOOP]] ]
1030- ; OTHER-NEXT: [[RDX_2:%.*]] = phi i32 [ 0, %[[ENTRY_NEW]] ], [ [[RDX_NEXT_2:%.*]], %[[LOOP]] ]
1031- ; OTHER-NEXT: [[RDX_3:%.*]] = phi i32 [ 0, %[[ENTRY_NEW]] ], [ [[RDX_NEXT_3:%.*]], %[[LOOP]] ]
1032- ; OTHER-NEXT: [[RDX:%.*]] = phi i32 [ 0, %[[ENTRY_NEW]] ], [ [[RDX_NEXT:%.*]], %[[LOOP]] ]
1021+ ; OTHER-NEXT: [[RDX:%.*]] = phi i32 [ 0, %[[ENTRY_NEW]] ], [ [[RDX_NEXT_3:%.*]], %[[LOOP]] ]
10331022; OTHER-NEXT: [[NITER:%.*]] = phi i64 [ 0, %[[ENTRY_NEW]] ], [ [[NITER_NEXT_3:%.*]], %[[LOOP]] ]
10341023; OTHER-NEXT: [[GEP_A:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV]]
10351024; OTHER-NEXT: [[TMP2:%.*]] = load i32, ptr [[GEP_A]], align 2
1036- ; OTHER-NEXT: [[RDX_NEXT]] = add i32 [[RDX]], [[TMP2]]
1025+ ; OTHER-NEXT: [[RDX_NEXT:%.* ]] = add nuw nsw i32 [[RDX]], [[TMP2]]
10371026; OTHER-NEXT: [[IV_NEXT:%.*]] = add nuw nsw i64 [[IV]], 1
10381027; OTHER-NEXT: [[GEP_A_1:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV_NEXT]]
10391028; OTHER-NEXT: [[TMP3:%.*]] = load i32, ptr [[GEP_A_1]], align 2
1040- ; OTHER-NEXT: [[RDX_NEXT_1 ]] = add i32 [[RDX_1 ]], [[TMP3]]
1029+ ; OTHER-NEXT: [[RDX_2:%.* ]] = add nuw nsw i32 [[RDX_NEXT ]], [[TMP3]]
10411030; OTHER-NEXT: [[IV_NEXT_1:%.*]] = add nuw nsw i64 [[IV]], 2
10421031; OTHER-NEXT: [[GEP_A_2:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV_NEXT_1]]
10431032; OTHER-NEXT: [[TMP4:%.*]] = load i32, ptr [[GEP_A_2]], align 2
1044- ; OTHER-NEXT: [[RDX_NEXT_2]] = add i32 [[RDX_2]], [[TMP4]]
1033+ ; OTHER-NEXT: [[RDX_NEXT_2:%.* ]] = add nuw nsw i32 [[RDX_2]], [[TMP4]]
10451034; OTHER-NEXT: [[IV_NEXT_2:%.*]] = add nuw nsw i64 [[IV]], 3
10461035; OTHER-NEXT: [[GEP_A_3:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV_NEXT_2]]
10471036; OTHER-NEXT: [[TMP5:%.*]] = load i32, ptr [[GEP_A_3]], align 2
1048- ; OTHER-NEXT: [[RDX_NEXT_3]] = add i32 [[RDX_3 ]], [[TMP5]]
1037+ ; OTHER-NEXT: [[RDX_NEXT_3]] = add nuw nsw i32 [[RDX_NEXT_2 ]], [[TMP5]]
10491038; OTHER-NEXT: [[IV_NEXT_3]] = add nuw nsw i64 [[IV]], 4
10501039; OTHER-NEXT: [[NITER_NEXT_3]] = add i64 [[NITER]], 4
10511040; OTHER-NEXT: [[NITER_NCMP_3:%.*]] = icmp eq i64 [[NITER_NEXT_3]], [[UNROLL_ITER]]
@@ -1054,14 +1043,11 @@ define i32 @test_add_reduction_runtime(ptr %a, i64 noundef %n) {
10541043; OTHER-NEXT: [[RES_PH_PH:%.*]] = phi i32 [ [[RDX_NEXT_3]], %[[LOOP]] ]
10551044; OTHER-NEXT: [[IV_UNR_PH:%.*]] = phi i64 [ [[IV_NEXT_3]], %[[LOOP]] ]
10561045; OTHER-NEXT: [[RDX_UNR_PH:%.*]] = phi i32 [ [[RDX_NEXT_3]], %[[LOOP]] ]
1057- ; OTHER-NEXT: [[BIN_RDX:%.*]] = add i32 [[RDX_NEXT_1]], [[RDX_NEXT]]
1058- ; OTHER-NEXT: [[BIN_RDX2:%.*]] = add i32 [[RDX_NEXT_2]], [[BIN_RDX]]
1059- ; OTHER-NEXT: [[BIN_RDX3:%.*]] = add i32 [[RDX_NEXT_3]], [[BIN_RDX2]]
10601046; OTHER-NEXT: br label %[[EXIT_UNR_LCSSA]]
10611047; OTHER: [[EXIT_UNR_LCSSA]]:
1062- ; OTHER-NEXT: [[RES_PH:%.*]] = phi i32 [ poison, %[[ENTRY]] ], [ [[BIN_RDX3 ]], %[[EXIT_UNR_LCSSA_LOOPEXIT]] ]
1048+ ; OTHER-NEXT: [[RES_PH:%.*]] = phi i32 [ poison, %[[ENTRY]] ], [ [[RES_PH_PH ]], %[[EXIT_UNR_LCSSA_LOOPEXIT]] ]
10631049; OTHER-NEXT: [[IV_UNR:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_UNR_PH]], %[[EXIT_UNR_LCSSA_LOOPEXIT]] ]
1064- ; OTHER-NEXT: [[RDX_UNR:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[BIN_RDX3 ]], %[[EXIT_UNR_LCSSA_LOOPEXIT]] ]
1050+ ; OTHER-NEXT: [[RDX_UNR:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[RDX_UNR_PH ]], %[[EXIT_UNR_LCSSA_LOOPEXIT]] ]
10651051; OTHER-NEXT: [[LCMP_MOD:%.*]] = icmp ne i64 [[XTRAITER]], 0
10661052; OTHER-NEXT: br i1 [[LCMP_MOD]], label %[[LOOP_EPIL_PREHEADER:.*]], label %[[EXIT:.*]]
10671053; OTHER: [[LOOP_EPIL_PREHEADER]]:
0 commit comments