@@ -1052,21 +1052,22 @@ define noundef i64 @srem64_i32max(i64 noundef %i) {
1052
1052
; GFX9-NEXT: s_mov_b32 s6, 0x80000001
1053
1053
; GFX9-NEXT: v_ashrrev_i32_e32 v6, 31, v1
1054
1054
; GFX9-NEXT: v_mad_u64_u32 v[4:5], s[4:5], v1, 3, v[2:3]
1055
- ; GFX9-NEXT: v_mul_i32_i24_e32 v2 , 3, v6
1056
- ; GFX9-NEXT: v_mul_hi_i32_i24_e32 v7, 3 , v6
1057
- ; GFX9-NEXT: v_mov_b32_e32 v8 , v5
1055
+ ; GFX9-NEXT: v_mul_i32_i24_e32 v8 , 3, v6
1056
+ ; GFX9-NEXT: v_lshl_add_u32 v9, v6, 31 , v6
1057
+ ; GFX9-NEXT: v_mov_b32_e32 v10 , v5
1058
1058
; GFX9-NEXT: v_mov_b32_e32 v5, v3
1059
- ; GFX9-NEXT: v_mad_u64_u32 v[3:4], s[4:5], v0, s6, v[4:5]
1060
- ; GFX9-NEXT: v_lshl_add_u32 v6, v6, 31, v6
1061
- ; GFX9-NEXT: v_add3_u32 v3, v7, v6, v2
1062
- ; GFX9-NEXT: v_add_co_u32_e32 v4, vcc, v8, v4
1063
- ; GFX9-NEXT: v_mad_u64_u32 v[2:3], s[4:5], v0, -1, v[2:3]
1064
- ; GFX9-NEXT: v_addc_co_u32_e64 v5, s[4:5], 0, 0, vcc
1065
- ; GFX9-NEXT: v_mad_u64_u32 v[4:5], s[4:5], v1, s6, v[4:5]
1066
- ; GFX9-NEXT: v_sub_u32_e32 v3, v3, v1
1067
- ; GFX9-NEXT: v_sub_u32_e32 v3, v3, v0
1068
- ; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, v4, v2
1069
- ; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, v5, v3, vcc
1059
+ ; GFX9-NEXT: v_mad_u64_u32 v[2:3], s[4:5], v0, s6, v[4:5]
1060
+ ; GFX9-NEXT: v_mad_u64_u32 v[6:7], s[4:5], v6, 3, 0
1061
+ ; GFX9-NEXT: v_mov_b32_e32 v2, v3
1062
+ ; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, v10, v2
1063
+ ; GFX9-NEXT: v_add3_u32 v7, v7, v9, v8
1064
+ ; GFX9-NEXT: v_mad_u64_u32 v[4:5], s[4:5], v0, -1, v[6:7]
1065
+ ; GFX9-NEXT: v_addc_co_u32_e64 v3, s[4:5], 0, 0, vcc
1066
+ ; GFX9-NEXT: v_mad_u64_u32 v[2:3], s[4:5], v1, s6, v[2:3]
1067
+ ; GFX9-NEXT: v_sub_u32_e32 v5, v5, v1
1068
+ ; GFX9-NEXT: v_sub_u32_e32 v5, v5, v0
1069
+ ; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, v2, v4
1070
+ ; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, v3, v5, vcc
1070
1071
; GFX9-NEXT: v_mad_u64_u32 v[2:3], s[4:5], v0, 1, v[2:3]
1071
1072
; GFX9-NEXT: s_brev_b32 s6, -2
1072
1073
; GFX9-NEXT: v_add_u32_e32 v3, v1, v3
@@ -1083,11 +1084,11 @@ define noundef i64 @srem64_i32max(i64 noundef %i) {
1083
1084
; GFX942-LABEL: srem64_i32max:
1084
1085
; GFX942: ; %bb.0: ; %entry
1085
1086
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1086
- ; GFX942-NEXT: v_ashrrev_i32_e32 v3 , 31, v1
1087
- ; GFX942-NEXT: v_mul_i32_i24_e32 v2 , 3, v3
1088
- ; GFX942-NEXT: v_mul_hi_i32_i24_e32 v4, 3, v3
1089
- ; GFX942-NEXT: v_lshl_add_u32 v3, v3, 31, v3
1090
- ; GFX942-NEXT: v_add3_u32 v3, v4, v3, v2
1087
+ ; GFX942-NEXT: v_ashrrev_i32_e32 v2 , 31, v1
1088
+ ; GFX942-NEXT: v_mul_i32_i24_e32 v4 , 3, v2
1089
+ ; GFX942-NEXT: v_lshl_add_u32 v5, v2, 31, v2
1090
+ ; GFX942-NEXT: v_mad_u64_u32 v[2:3], s[0:1], v2, 3, 0
1091
+ ; GFX942-NEXT: v_add3_u32 v3, v3, v5, v4
1091
1092
; GFX942-NEXT: v_mul_hi_u32 v4, v0, 3
1092
1093
; GFX942-NEXT: v_mov_b32_e32 v5, 0
1093
1094
; GFX942-NEXT: v_mad_u64_u32 v[6:7], s[0:1], v1, 3, v[4:5]
@@ -1124,16 +1125,17 @@ define noundef i64 @srem64_i32max(i64 noundef %i) {
1124
1125
; GFX1030-NEXT: v_mul_hi_u32 v2, v0, 3
1125
1126
; GFX1030-NEXT: v_mov_b32_e32 v3, 0
1126
1127
; GFX1030-NEXT: v_ashrrev_i32_e32 v6, 31, v1
1127
- ; GFX1030-NEXT: v_mul_hi_i32_i24_e32 v8 , 3, v6
1128
+ ; GFX1030-NEXT: v_mul_i32_i24_e32 v7 , 3, v6
1128
1129
; GFX1030-NEXT: v_mad_u64_u32 v[4:5], null, v1, 3, v[2:3]
1129
- ; GFX1030-NEXT: v_mul_i32_i24_e32 v2, 3, v6
1130
- ; GFX1030-NEXT: v_lshl_add_u32 v6, v6, 31, v6
1131
- ; GFX1030-NEXT: v_mov_b32_e32 v7, v5
1130
+ ; GFX1030-NEXT: v_mov_b32_e32 v8, v5
1132
1131
; GFX1030-NEXT: v_mov_b32_e32 v5, v3
1133
- ; GFX1030-NEXT: v_mad_u64_u32 v[3:4], null, 0x80000001, v0, v[4:5]
1134
- ; GFX1030-NEXT: v_add3_u32 v3, v8, v6, v2
1132
+ ; GFX1030-NEXT: v_mad_u64_u32 v[2:3], null, v6, 3, 0
1133
+ ; GFX1030-NEXT: v_lshl_add_u32 v6, v6, 31, v6
1134
+ ; GFX1030-NEXT: v_mad_u64_u32 v[4:5], null, 0x80000001, v0, v[4:5]
1135
+ ; GFX1030-NEXT: v_add3_u32 v3, v3, v6, v7
1136
+ ; GFX1030-NEXT: v_mov_b32_e32 v4, v5
1135
1137
; GFX1030-NEXT: v_mad_u64_u32 v[2:3], null, v0, -1, v[2:3]
1136
- ; GFX1030-NEXT: v_add_co_u32 v4, s4, v7 , v4
1138
+ ; GFX1030-NEXT: v_add_co_u32 v4, s4, v8 , v4
1137
1139
; GFX1030-NEXT: v_add_co_ci_u32_e64 v5, null, 0, 0, s4
1138
1140
; GFX1030-NEXT: v_sub_nc_u32_e32 v6, v3, v1
1139
1141
; GFX1030-NEXT: v_mad_u64_u32 v[3:4], null, 0x80000001, v1, v[4:5]
@@ -1165,21 +1167,22 @@ define noundef i64 @sdiv64_i32max(i64 noundef %i) {
1165
1167
; GFX9-NEXT: s_mov_b32 s6, 0x80000001
1166
1168
; GFX9-NEXT: v_ashrrev_i32_e32 v6, 31, v1
1167
1169
; GFX9-NEXT: v_mad_u64_u32 v[4:5], s[4:5], v1, 3, v[2:3]
1168
- ; GFX9-NEXT: v_mul_i32_i24_e32 v2 , 3, v6
1169
- ; GFX9-NEXT: v_mul_hi_i32_i24_e32 v7, 3 , v6
1170
- ; GFX9-NEXT: v_mov_b32_e32 v8 , v5
1170
+ ; GFX9-NEXT: v_mul_i32_i24_e32 v8 , 3, v6
1171
+ ; GFX9-NEXT: v_lshl_add_u32 v9, v6, 31 , v6
1172
+ ; GFX9-NEXT: v_mov_b32_e32 v10 , v5
1171
1173
; GFX9-NEXT: v_mov_b32_e32 v5, v3
1172
- ; GFX9-NEXT: v_mad_u64_u32 v[3:4], s[4:5], v0, s6, v[4:5]
1173
- ; GFX9-NEXT: v_lshl_add_u32 v6, v6, 31, v6
1174
- ; GFX9-NEXT: v_add3_u32 v3, v7, v6, v2
1175
- ; GFX9-NEXT: v_add_co_u32_e32 v4, vcc, v8, v4
1176
- ; GFX9-NEXT: v_mad_u64_u32 v[2:3], s[4:5], v0, -1, v[2:3]
1177
- ; GFX9-NEXT: v_addc_co_u32_e64 v5, s[4:5], 0, 0, vcc
1178
- ; GFX9-NEXT: v_mad_u64_u32 v[4:5], s[4:5], v1, s6, v[4:5]
1179
- ; GFX9-NEXT: v_sub_u32_e32 v3, v3, v1
1180
- ; GFX9-NEXT: v_sub_u32_e32 v3, v3, v0
1181
- ; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, v4, v2
1182
- ; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, v5, v3, vcc
1174
+ ; GFX9-NEXT: v_mad_u64_u32 v[2:3], s[4:5], v0, s6, v[4:5]
1175
+ ; GFX9-NEXT: v_mad_u64_u32 v[6:7], s[4:5], v6, 3, 0
1176
+ ; GFX9-NEXT: v_mov_b32_e32 v2, v3
1177
+ ; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, v10, v2
1178
+ ; GFX9-NEXT: v_add3_u32 v7, v7, v9, v8
1179
+ ; GFX9-NEXT: v_mad_u64_u32 v[4:5], s[4:5], v0, -1, v[6:7]
1180
+ ; GFX9-NEXT: v_addc_co_u32_e64 v3, s[4:5], 0, 0, vcc
1181
+ ; GFX9-NEXT: v_mad_u64_u32 v[2:3], s[4:5], v1, s6, v[2:3]
1182
+ ; GFX9-NEXT: v_sub_u32_e32 v5, v5, v1
1183
+ ; GFX9-NEXT: v_sub_u32_e32 v5, v5, v0
1184
+ ; GFX9-NEXT: v_add_co_u32_e32 v2, vcc, v2, v4
1185
+ ; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, v3, v5, vcc
1183
1186
; GFX9-NEXT: v_mad_u64_u32 v[2:3], s[4:5], v0, 1, v[2:3]
1184
1187
; GFX9-NEXT: v_add_u32_e32 v3, v1, v3
1185
1188
; GFX9-NEXT: v_ashrrev_i64 v[0:1], 30, v[2:3]
@@ -1191,11 +1194,11 @@ define noundef i64 @sdiv64_i32max(i64 noundef %i) {
1191
1194
; GFX942-LABEL: sdiv64_i32max:
1192
1195
; GFX942: ; %bb.0: ; %entry
1193
1196
; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1194
- ; GFX942-NEXT: v_ashrrev_i32_e32 v3 , 31, v1
1195
- ; GFX942-NEXT: v_mul_i32_i24_e32 v2 , 3, v3
1196
- ; GFX942-NEXT: v_mul_hi_i32_i24_e32 v4, 3, v3
1197
- ; GFX942-NEXT: v_lshl_add_u32 v3, v3, 31, v3
1198
- ; GFX942-NEXT: v_add3_u32 v3, v4, v3, v2
1197
+ ; GFX942-NEXT: v_ashrrev_i32_e32 v2 , 31, v1
1198
+ ; GFX942-NEXT: v_mul_i32_i24_e32 v4 , 3, v2
1199
+ ; GFX942-NEXT: v_lshl_add_u32 v5, v2, 31, v2
1200
+ ; GFX942-NEXT: v_mad_u64_u32 v[2:3], s[0:1], v2, 3, 0
1201
+ ; GFX942-NEXT: v_add3_u32 v3, v3, v5, v4
1199
1202
; GFX942-NEXT: v_mul_hi_u32 v4, v0, 3
1200
1203
; GFX942-NEXT: v_mov_b32_e32 v5, 0
1201
1204
; GFX942-NEXT: v_mad_u64_u32 v[6:7], s[0:1], v1, 3, v[4:5]
@@ -1224,16 +1227,17 @@ define noundef i64 @sdiv64_i32max(i64 noundef %i) {
1224
1227
; GFX1030-NEXT: v_mul_hi_u32 v2, v0, 3
1225
1228
; GFX1030-NEXT: v_mov_b32_e32 v3, 0
1226
1229
; GFX1030-NEXT: v_ashrrev_i32_e32 v6, 31, v1
1227
- ; GFX1030-NEXT: v_mul_hi_i32_i24_e32 v8 , 3, v6
1230
+ ; GFX1030-NEXT: v_mul_i32_i24_e32 v7 , 3, v6
1228
1231
; GFX1030-NEXT: v_mad_u64_u32 v[4:5], null, v1, 3, v[2:3]
1229
- ; GFX1030-NEXT: v_mul_i32_i24_e32 v2, 3, v6
1230
- ; GFX1030-NEXT: v_lshl_add_u32 v6, v6, 31, v6
1231
- ; GFX1030-NEXT: v_mov_b32_e32 v7, v5
1232
+ ; GFX1030-NEXT: v_mov_b32_e32 v8, v5
1232
1233
; GFX1030-NEXT: v_mov_b32_e32 v5, v3
1233
- ; GFX1030-NEXT: v_mad_u64_u32 v[3:4], null, 0x80000001, v0, v[4:5]
1234
- ; GFX1030-NEXT: v_add3_u32 v3, v8, v6, v2
1234
+ ; GFX1030-NEXT: v_mad_u64_u32 v[2:3], null, v6, 3, 0
1235
+ ; GFX1030-NEXT: v_lshl_add_u32 v6, v6, 31, v6
1236
+ ; GFX1030-NEXT: v_mad_u64_u32 v[4:5], null, 0x80000001, v0, v[4:5]
1237
+ ; GFX1030-NEXT: v_add3_u32 v3, v3, v6, v7
1238
+ ; GFX1030-NEXT: v_mov_b32_e32 v4, v5
1235
1239
; GFX1030-NEXT: v_mad_u64_u32 v[2:3], null, v0, -1, v[2:3]
1236
- ; GFX1030-NEXT: v_add_co_u32 v4, s4, v7 , v4
1240
+ ; GFX1030-NEXT: v_add_co_u32 v4, s4, v8 , v4
1237
1241
; GFX1030-NEXT: v_add_co_ci_u32_e64 v5, null, 0, 0, s4
1238
1242
; GFX1030-NEXT: v_sub_nc_u32_e32 v6, v3, v1
1239
1243
; GFX1030-NEXT: v_mad_u64_u32 v[3:4], null, 0x80000001, v1, v[4:5]
0 commit comments