@@ -801,27 +801,33 @@ 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:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[RDX_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]] ]
805808; OTHER-NEXT: [[GEP_A:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV]]
806809; OTHER-NEXT: [[TMP0:%.*]] = load i32, ptr [[GEP_A]], align 2
807- ; OTHER-NEXT: [[RDX_NEXT:%.* ]] = add nuw nsw i32 [[RDX]], [[TMP0]]
810+ ; OTHER-NEXT: [[RDX_NEXT]] = add nuw nsw i32 [[RDX]], [[TMP0]]
808811; OTHER-NEXT: [[IV_NEXT:%.*]] = add nuw nsw i64 [[IV]], 1
809812; OTHER-NEXT: [[GEP_A_1:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV_NEXT]]
810813; OTHER-NEXT: [[TMP1:%.*]] = load i32, ptr [[GEP_A_1]], align 2
811- ; OTHER-NEXT: [[RDX_2:%.* ]] = add nuw nsw i32 [[RDX_NEXT ]], [[TMP1]]
814+ ; OTHER-NEXT: [[RDX_NEXT_1 ]] = add nuw nsw i32 [[RDX_1 ]], [[TMP1]]
812815; OTHER-NEXT: [[IV_NEXT_1:%.*]] = add nuw nsw i64 [[IV]], 2
813816; OTHER-NEXT: [[GEP_A_2:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV_NEXT_1]]
814817; OTHER-NEXT: [[TMP2:%.*]] = load i32, ptr [[GEP_A_2]], align 2
815- ; OTHER-NEXT: [[RDX_NEXT_2:%.* ]] = add nuw nsw i32 [[RDX_2]], [[TMP2]]
818+ ; OTHER-NEXT: [[RDX_NEXT_2]] = add nuw nsw i32 [[RDX_2]], [[TMP2]]
816819; OTHER-NEXT: [[IV_NEXT_2:%.*]] = add nuw nsw i64 [[IV]], 3
817820; OTHER-NEXT: [[GEP_A_3:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV_NEXT_2]]
818821; OTHER-NEXT: [[TMP3:%.*]] = load i32, ptr [[GEP_A_3]], align 2
819- ; OTHER-NEXT: [[RDX_NEXT_3]] = add nuw nsw i32 [[RDX_NEXT_2 ]], [[TMP3]]
822+ ; OTHER-NEXT: [[RDX_NEXT_3]] = add nuw nsw i32 [[RDX_3 ]], [[TMP3]]
820823; OTHER-NEXT: [[IV_NEXT_3]] = add nuw nsw i64 [[IV]], 4
821824; OTHER-NEXT: [[EC_3:%.*]] = icmp eq i64 [[IV_NEXT_3]], 1024
822825; OTHER-NEXT: br i1 [[EC_3]], label %[[EXIT:.*]], label %[[LOOP]]
823826; OTHER: [[EXIT]]:
824- ; OTHER-NEXT: [[BIN_RDX2:%.*]] = phi i32 [ [[RDX_NEXT_3]], %[[LOOP]] ]
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]]
825831; OTHER-NEXT: ret i32 [[BIN_RDX2]]
826832;
827833entry:
@@ -945,23 +951,25 @@ define i32 @test_add_and_mul_reduction_unroll_partial(ptr %a, i64 noundef %n) {
945951; OTHER-NEXT: br label %[[LOOP:.*]]
946952; OTHER: [[LOOP]]:
947953; OTHER-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT_1:%.*]], %[[LOOP]] ]
948- ; OTHER-NEXT: [[RDX:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[RDX_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]] ]
949956; OTHER-NEXT: [[RDX_2:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[RDX_2_NEXT_1:%.*]], %[[LOOP]] ]
950957; OTHER-NEXT: [[GEP_A:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV]]
951958; OTHER-NEXT: [[TMP0:%.*]] = load i32, ptr [[GEP_A]], align 2
952- ; OTHER-NEXT: [[RDX_NEXT:%.* ]] = add nuw nsw i32 [[RDX]], [[TMP0]]
959+ ; OTHER-NEXT: [[RDX_NEXT]] = add nuw nsw i32 [[RDX]], [[TMP0]]
953960; OTHER-NEXT: [[RDX_2_NEXT:%.*]] = mul i32 [[RDX_2]], [[TMP0]]
954961; OTHER-NEXT: [[IV_NEXT:%.*]] = add nuw nsw i64 [[IV]], 1
955962; OTHER-NEXT: [[GEP_A_1:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV_NEXT]]
956963; OTHER-NEXT: [[TMP1:%.*]] = load i32, ptr [[GEP_A_1]], align 2
957- ; OTHER-NEXT: [[RDX_NEXT_1]] = add nuw nsw i32 [[RDX_NEXT ]], [[TMP1]]
964+ ; OTHER-NEXT: [[RDX_NEXT_1]] = add nuw nsw i32 [[RDX_1 ]], [[TMP1]]
958965; OTHER-NEXT: [[RDX_2_NEXT_1]] = mul i32 [[RDX_2_NEXT]], [[TMP1]]
959966; OTHER-NEXT: [[IV_NEXT_1]] = add nuw nsw i64 [[IV]], 2
960967; OTHER-NEXT: [[EC_1:%.*]] = icmp eq i64 [[IV_NEXT_1]], 1024
961968; OTHER-NEXT: br i1 [[EC_1]], label %[[EXIT:.*]], label %[[LOOP]]
962969; OTHER: [[EXIT]]:
963- ; OTHER-NEXT: [[BIN_RDX :%.*]] = phi i32 [ [[RDX_NEXT_1]], %[[LOOP]] ]
970+ ; OTHER-NEXT: [[RES_1 :%.*]] = phi i32 [ [[RDX_NEXT_1]], %[[LOOP]] ]
964971; OTHER-NEXT: [[RES_2:%.*]] = phi i32 [ [[RDX_2_NEXT_1]], %[[LOOP]] ]
972+ ; OTHER-NEXT: [[BIN_RDX:%.*]] = add i32 [[RDX_NEXT_1]], [[RDX_NEXT]]
965973; OTHER-NEXT: [[SUM:%.*]] = add i32 [[BIN_RDX]], [[RES_2]]
966974; OTHER-NEXT: ret i32 [[SUM]]
967975;
@@ -1018,23 +1026,26 @@ define i32 @test_add_reduction_runtime(ptr %a, i64 noundef %n) {
10181026; OTHER-NEXT: br label %[[LOOP:.*]]
10191027; OTHER: [[LOOP]]:
10201028; OTHER-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY_NEW]] ], [ [[IV_NEXT_3:%.*]], %[[LOOP]] ]
1021- ; OTHER-NEXT: [[RDX:%.*]] = phi i32 [ 0, %[[ENTRY_NEW]] ], [ [[RDX_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]] ]
10221033; OTHER-NEXT: [[NITER:%.*]] = phi i64 [ 0, %[[ENTRY_NEW]] ], [ [[NITER_NEXT_3:%.*]], %[[LOOP]] ]
10231034; OTHER-NEXT: [[GEP_A:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV]]
10241035; OTHER-NEXT: [[TMP2:%.*]] = load i32, ptr [[GEP_A]], align 2
1025- ; OTHER-NEXT: [[RDX_NEXT:%.* ]] = add nuw nsw i32 [[RDX]], [[TMP2]]
1036+ ; OTHER-NEXT: [[RDX_NEXT]] = add nuw nsw i32 [[RDX]], [[TMP2]]
10261037; OTHER-NEXT: [[IV_NEXT:%.*]] = add nuw nsw i64 [[IV]], 1
10271038; OTHER-NEXT: [[GEP_A_1:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV_NEXT]]
10281039; OTHER-NEXT: [[TMP3:%.*]] = load i32, ptr [[GEP_A_1]], align 2
1029- ; OTHER-NEXT: [[RDX_2:%.* ]] = add nuw nsw i32 [[RDX_NEXT ]], [[TMP3]]
1040+ ; OTHER-NEXT: [[RDX_NEXT_1 ]] = add nuw nsw i32 [[RDX_1 ]], [[TMP3]]
10301041; OTHER-NEXT: [[IV_NEXT_1:%.*]] = add nuw nsw i64 [[IV]], 2
10311042; OTHER-NEXT: [[GEP_A_2:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV_NEXT_1]]
10321043; OTHER-NEXT: [[TMP4:%.*]] = load i32, ptr [[GEP_A_2]], align 2
1033- ; OTHER-NEXT: [[RDX_NEXT_2:%.* ]] = add nuw nsw i32 [[RDX_2]], [[TMP4]]
1044+ ; OTHER-NEXT: [[RDX_NEXT_2]] = add nuw nsw i32 [[RDX_2]], [[TMP4]]
10341045; OTHER-NEXT: [[IV_NEXT_2:%.*]] = add nuw nsw i64 [[IV]], 3
10351046; OTHER-NEXT: [[GEP_A_3:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[IV_NEXT_2]]
10361047; OTHER-NEXT: [[TMP5:%.*]] = load i32, ptr [[GEP_A_3]], align 2
1037- ; OTHER-NEXT: [[RDX_NEXT_3]] = add nuw nsw i32 [[RDX_NEXT_2 ]], [[TMP5]]
1048+ ; OTHER-NEXT: [[RDX_NEXT_3]] = add nuw nsw i32 [[RDX_3 ]], [[TMP5]]
10381049; OTHER-NEXT: [[IV_NEXT_3]] = add nuw nsw i64 [[IV]], 4
10391050; OTHER-NEXT: [[NITER_NEXT_3]] = add i64 [[NITER]], 4
10401051; OTHER-NEXT: [[NITER_NCMP_3:%.*]] = icmp eq i64 [[NITER_NEXT_3]], [[UNROLL_ITER]]
@@ -1043,11 +1054,14 @@ define i32 @test_add_reduction_runtime(ptr %a, i64 noundef %n) {
10431054; OTHER-NEXT: [[RES_PH_PH:%.*]] = phi i32 [ [[RDX_NEXT_3]], %[[LOOP]] ]
10441055; OTHER-NEXT: [[IV_UNR_PH:%.*]] = phi i64 [ [[IV_NEXT_3]], %[[LOOP]] ]
10451056; 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]]
10461060; OTHER-NEXT: br label %[[EXIT_UNR_LCSSA]]
10471061; OTHER: [[EXIT_UNR_LCSSA]]:
1048- ; OTHER-NEXT: [[RES_PH:%.*]] = phi i32 [ poison, %[[ENTRY]] ], [ [[RES_PH_PH ]], %[[EXIT_UNR_LCSSA_LOOPEXIT]] ]
1062+ ; OTHER-NEXT: [[RES_PH:%.*]] = phi i32 [ poison, %[[ENTRY]] ], [ [[BIN_RDX3 ]], %[[EXIT_UNR_LCSSA_LOOPEXIT]] ]
10491063; OTHER-NEXT: [[IV_UNR:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_UNR_PH]], %[[EXIT_UNR_LCSSA_LOOPEXIT]] ]
1050- ; OTHER-NEXT: [[RDX_UNR:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[RDX_UNR_PH ]], %[[EXIT_UNR_LCSSA_LOOPEXIT]] ]
1064+ ; OTHER-NEXT: [[RDX_UNR:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[BIN_RDX3 ]], %[[EXIT_UNR_LCSSA_LOOPEXIT]] ]
10511065; OTHER-NEXT: [[LCMP_MOD:%.*]] = icmp ne i64 [[XTRAITER]], 0
10521066; OTHER-NEXT: br i1 [[LCMP_MOD]], label %[[LOOP_EPIL_PREHEADER:.*]], label %[[EXIT:.*]]
10531067; OTHER: [[LOOP_EPIL_PREHEADER]]:
0 commit comments