@@ -1188,109 +1188,39 @@ define amdgpu_kernel void @s_test_srem24_48(ptr addrspace(1) %out, i48 %x, i48 %
11881188; GCN-NEXT: s_endpgm
11891189;
11901190; 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
11941196; GCN-IR-NEXT: s_waitcnt lgkmcnt(0)
1195- ; GCN-IR-NEXT: s_sext_i32_i16 s1, s1
11961197; 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
12941224; GCN-IR-NEXT: s_endpgm
12951225 %1 = ashr i48 %x , 24
12961226 %2 = ashr i48 %y , 24
0 commit comments