@@ -1188,109 +1188,39 @@ define amdgpu_kernel void @s_test_srem24_48(ptr addrspace(1) %out, i48 %x, i48 %
1188
1188
; GCN-NEXT: s_endpgm
1189
1189
;
1190
1190
; GCN-IR-LABEL: s_test_srem24_48:
1191
- ; GCN-IR: ; %bb.0: ; %_udiv-special-cases
1192
- ; GCN-IR-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0xb
1193
- ; GCN-IR-NEXT: s_mov_b32 s13, 0
1191
+ ; GCN-IR: ; %bb.0:
1192
+ ; GCN-IR-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9
1193
+ ; GCN-IR-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0xd
1194
+ ; GCN-IR-NEXT: s_mov_b32 s7, 0xf000
1195
+ ; GCN-IR-NEXT: s_mov_b32 s6, -1
1194
1196
; GCN-IR-NEXT: s_waitcnt lgkmcnt(0)
1195
- ; GCN-IR-NEXT: s_sext_i32_i16 s1, s1
1196
1197
; GCN-IR-NEXT: s_sext_i32_i16 s3, s3
1197
- ; GCN-IR-NEXT: s_ashr_i64 s[0:1], s[0:1], 24
1198
- ; GCN-IR-NEXT: s_ashr_i64 s[2:3], s[2:3], 24
1199
- ; GCN-IR-NEXT: s_lshl_b64 s[0:1], s[0:1], 16
1200
- ; GCN-IR-NEXT: s_lshl_b64 s[6:7], s[2:3], 16
1201
- ; GCN-IR-NEXT: s_ashr_i64 s[2:3], s[0:1], 16
1202
- ; GCN-IR-NEXT: s_ashr_i32 s0, s1, 31
1203
- ; GCN-IR-NEXT: s_mov_b32 s1, s0
1204
- ; GCN-IR-NEXT: s_ashr_i64 s[8:9], s[6:7], 16
1205
- ; GCN-IR-NEXT: s_xor_b64 s[2:3], s[2:3], s[0:1]
1206
- ; GCN-IR-NEXT: s_sub_u32 s2, s2, s0
1207
- ; GCN-IR-NEXT: s_subb_u32 s3, s3, s0
1208
- ; GCN-IR-NEXT: s_ashr_i32 s10, s7, 31
1209
- ; GCN-IR-NEXT: s_mov_b32 s11, s10
1210
- ; GCN-IR-NEXT: s_xor_b64 s[6:7], s[8:9], s[10:11]
1211
- ; GCN-IR-NEXT: s_sub_u32 s6, s6, s10
1212
- ; GCN-IR-NEXT: s_subb_u32 s7, s7, s10
1213
- ; GCN-IR-NEXT: v_cmp_eq_u64_e64 s[8:9], s[6:7], 0
1214
- ; GCN-IR-NEXT: v_cmp_eq_u64_e64 s[10:11], s[2:3], 0
1215
- ; GCN-IR-NEXT: s_flbit_i32_b64 s12, s[6:7]
1216
- ; GCN-IR-NEXT: s_or_b64 s[10:11], s[8:9], s[10:11]
1217
- ; GCN-IR-NEXT: s_flbit_i32_b64 s20, s[2:3]
1218
- ; GCN-IR-NEXT: s_sub_u32 s14, s12, s20
1219
- ; GCN-IR-NEXT: s_subb_u32 s15, 0, 0
1220
- ; GCN-IR-NEXT: v_cmp_gt_u64_e64 s[16:17], s[14:15], 63
1221
- ; GCN-IR-NEXT: v_cmp_eq_u64_e64 s[18:19], s[14:15], 63
1222
- ; GCN-IR-NEXT: s_or_b64 s[16:17], s[10:11], s[16:17]
1223
- ; GCN-IR-NEXT: s_and_b64 s[10:11], s[16:17], exec
1224
- ; GCN-IR-NEXT: s_cselect_b32 s11, 0, s3
1225
- ; GCN-IR-NEXT: s_cselect_b32 s10, 0, s2
1226
- ; GCN-IR-NEXT: s_or_b64 s[16:17], s[16:17], s[18:19]
1227
- ; GCN-IR-NEXT: s_mov_b64 s[8:9], 0
1228
- ; GCN-IR-NEXT: s_andn2_b64 vcc, exec, s[16:17]
1229
- ; GCN-IR-NEXT: s_cbranch_vccz .LBB9_5
1230
- ; GCN-IR-NEXT: ; %bb.1: ; %udiv-bb1
1231
- ; GCN-IR-NEXT: s_add_u32 s16, s14, 1
1232
- ; GCN-IR-NEXT: s_addc_u32 s17, s15, 0
1233
- ; GCN-IR-NEXT: v_cmp_eq_u64_e64 s[10:11], s[16:17], 0
1234
- ; GCN-IR-NEXT: s_sub_i32 s14, 63, s14
1235
- ; GCN-IR-NEXT: s_andn2_b64 vcc, exec, s[10:11]
1236
- ; GCN-IR-NEXT: s_lshl_b64 s[10:11], s[2:3], s14
1237
- ; GCN-IR-NEXT: s_cbranch_vccz .LBB9_4
1238
- ; GCN-IR-NEXT: ; %bb.2: ; %udiv-preheader
1239
- ; GCN-IR-NEXT: s_lshr_b64 s[14:15], s[2:3], s16
1240
- ; GCN-IR-NEXT: s_add_u32 s18, s6, -1
1241
- ; GCN-IR-NEXT: s_addc_u32 s19, s7, -1
1242
- ; GCN-IR-NEXT: s_not_b64 s[8:9], s[12:13]
1243
- ; GCN-IR-NEXT: s_add_u32 s12, s8, s20
1244
- ; GCN-IR-NEXT: s_addc_u32 s13, s9, 0
1245
- ; GCN-IR-NEXT: s_mov_b64 s[16:17], 0
1246
- ; GCN-IR-NEXT: s_mov_b32 s9, 0
1247
- ; GCN-IR-NEXT: .LBB9_3: ; %udiv-do-while
1248
- ; GCN-IR-NEXT: ; =>This Inner Loop Header: Depth=1
1249
- ; GCN-IR-NEXT: s_lshl_b64 s[14:15], s[14:15], 1
1250
- ; GCN-IR-NEXT: s_lshr_b32 s8, s11, 31
1251
- ; GCN-IR-NEXT: s_lshl_b64 s[10:11], s[10:11], 1
1252
- ; GCN-IR-NEXT: s_or_b64 s[14:15], s[14:15], s[8:9]
1253
- ; GCN-IR-NEXT: s_or_b64 s[10:11], s[16:17], s[10:11]
1254
- ; GCN-IR-NEXT: s_sub_u32 s8, s18, s14
1255
- ; GCN-IR-NEXT: s_subb_u32 s8, s19, s15
1256
- ; GCN-IR-NEXT: s_ashr_i32 s16, s8, 31
1257
- ; GCN-IR-NEXT: s_mov_b32 s17, s16
1258
- ; GCN-IR-NEXT: s_and_b32 s8, s16, 1
1259
- ; GCN-IR-NEXT: s_and_b64 s[16:17], s[16:17], s[6:7]
1260
- ; GCN-IR-NEXT: s_sub_u32 s14, s14, s16
1261
- ; GCN-IR-NEXT: s_subb_u32 s15, s15, s17
1262
- ; GCN-IR-NEXT: s_add_u32 s12, s12, 1
1263
- ; GCN-IR-NEXT: s_addc_u32 s13, s13, 0
1264
- ; GCN-IR-NEXT: v_cmp_eq_u64_e64 s[20:21], s[12:13], 0
1265
- ; GCN-IR-NEXT: s_mov_b64 s[16:17], s[8:9]
1266
- ; GCN-IR-NEXT: s_and_b64 vcc, exec, s[20:21]
1267
- ; GCN-IR-NEXT: s_cbranch_vccz .LBB9_3
1268
- ; GCN-IR-NEXT: .LBB9_4: ; %Flow4
1269
- ; GCN-IR-NEXT: s_lshl_b64 s[10:11], s[10:11], 1
1270
- ; GCN-IR-NEXT: s_or_b64 s[10:11], s[8:9], s[10:11]
1271
- ; GCN-IR-NEXT: .LBB9_5: ; %udiv-end
1272
- ; GCN-IR-NEXT: v_mov_b32_e32 v0, s10
1273
- ; GCN-IR-NEXT: v_mul_hi_u32 v0, s6, v0
1274
- ; GCN-IR-NEXT: s_load_dwordx2 s[12:13], s[4:5], 0x9
1275
- ; GCN-IR-NEXT: s_mul_i32 s4, s6, s11
1276
- ; GCN-IR-NEXT: v_mov_b32_e32 v2, s3
1277
- ; GCN-IR-NEXT: v_add_i32_e32 v0, vcc, s4, v0
1278
- ; GCN-IR-NEXT: s_mul_i32 s4, s7, s10
1279
- ; GCN-IR-NEXT: v_add_i32_e32 v0, vcc, s4, v0
1280
- ; GCN-IR-NEXT: s_mul_i32 s4, s6, s10
1281
- ; GCN-IR-NEXT: v_mov_b32_e32 v1, s4
1282
- ; GCN-IR-NEXT: v_sub_i32_e32 v1, vcc, s2, v1
1283
- ; GCN-IR-NEXT: v_subb_u32_e32 v0, vcc, v2, v0, vcc
1284
- ; GCN-IR-NEXT: v_xor_b32_e32 v1, s0, v1
1285
- ; GCN-IR-NEXT: v_xor_b32_e32 v0, s1, v0
1286
- ; GCN-IR-NEXT: v_mov_b32_e32 v2, s1
1287
- ; GCN-IR-NEXT: v_subrev_i32_e32 v1, vcc, s0, v1
1288
- ; GCN-IR-NEXT: s_mov_b32 s15, 0xf000
1289
- ; GCN-IR-NEXT: s_mov_b32 s14, -1
1290
- ; GCN-IR-NEXT: v_subb_u32_e32 v0, vcc, v0, v2, vcc
1291
- ; GCN-IR-NEXT: s_waitcnt lgkmcnt(0)
1292
- ; GCN-IR-NEXT: buffer_store_short v0, off, s[12:15], 0 offset:4
1293
- ; GCN-IR-NEXT: buffer_store_dword v1, off, s[12:15], 0
1198
+ ; GCN-IR-NEXT: s_sext_i32_i16 s5, s5
1199
+ ; GCN-IR-NEXT: v_mov_b32_e32 v0, s4
1200
+ ; GCN-IR-NEXT: v_alignbit_b32 v0, s5, v0, 24
1201
+ ; GCN-IR-NEXT: v_cvt_f32_i32_e32 v1, v0
1202
+ ; GCN-IR-NEXT: v_mov_b32_e32 v2, s2
1203
+ ; GCN-IR-NEXT: v_alignbit_b32 v2, s3, v2, 24
1204
+ ; GCN-IR-NEXT: v_cvt_f32_i32_e32 v3, v2
1205
+ ; GCN-IR-NEXT: v_rcp_iflag_f32_e32 v4, v1
1206
+ ; GCN-IR-NEXT: v_xor_b32_e32 v5, v2, v0
1207
+ ; GCN-IR-NEXT: v_ashrrev_i32_e32 v5, 30, v5
1208
+ ; GCN-IR-NEXT: v_or_b32_e32 v5, 1, v5
1209
+ ; GCN-IR-NEXT: v_mul_f32_e32 v4, v3, v4
1210
+ ; GCN-IR-NEXT: v_trunc_f32_e32 v4, v4
1211
+ ; GCN-IR-NEXT: v_mad_f32 v3, -v4, v1, v3
1212
+ ; GCN-IR-NEXT: v_cvt_i32_f32_e32 v4, v4
1213
+ ; GCN-IR-NEXT: v_cmp_ge_f32_e64 vcc, |v3|, |v1|
1214
+ ; GCN-IR-NEXT: v_cndmask_b32_e32 v1, 0, v5, vcc
1215
+ ; GCN-IR-NEXT: s_mov_b32 s4, s0
1216
+ ; GCN-IR-NEXT: v_add_i32_e32 v1, vcc, v1, v4
1217
+ ; GCN-IR-NEXT: v_mul_lo_u32 v0, v1, v0
1218
+ ; GCN-IR-NEXT: s_mov_b32 s5, s1
1219
+ ; GCN-IR-NEXT: v_subrev_i32_e32 v0, vcc, v0, v2
1220
+ ; GCN-IR-NEXT: v_bfe_i32 v0, v0, 0, 24
1221
+ ; GCN-IR-NEXT: v_ashrrev_i32_e32 v1, 31, v0
1222
+ ; GCN-IR-NEXT: buffer_store_dword v0, off, s[4:7], 0
1223
+ ; GCN-IR-NEXT: buffer_store_short v1, off, s[4:7], 0 offset:4
1294
1224
; GCN-IR-NEXT: s_endpgm
1295
1225
%1 = ashr i48 %x , 24
1296
1226
%2 = ashr i48 %y , 24
0 commit comments