brintos

brintos / llvm-project-archived public Read only

0
0
Text · 82.9 KiB · fdb20f3 Raw
2067 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=gfx600 -amdgpu-bypass-slow-div=0 < %s | FileCheck -check-prefix=GCN %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx600 -amdgpu-bypass-slow-div=0 -amdgpu-codegenprepare-expand-div64 < %s | FileCheck -check-prefix=GCN-IR %s4 5define amdgpu_kernel void @s_test_sdiv(ptr addrspace(1) %out, i64 %x, i64 %y) {6; GCN-LABEL: s_test_sdiv:7; GCN:       ; %bb.0:8; GCN-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0xd9; GCN-NEXT:    s_load_dwordx4 s[4:7], s[4:5], 0x910; GCN-NEXT:    s_mov_b32 s3, 0xf00011; GCN-NEXT:    s_waitcnt lgkmcnt(0)12; GCN-NEXT:    s_ashr_i32 s8, s1, 3113; GCN-NEXT:    s_add_u32 s0, s0, s814; GCN-NEXT:    s_mov_b32 s9, s815; GCN-NEXT:    s_addc_u32 s1, s1, s816; GCN-NEXT:    s_xor_b64 s[10:11], s[0:1], s[8:9]17; GCN-NEXT:    v_cvt_f32_u32_e32 v0, s1018; GCN-NEXT:    v_cvt_f32_u32_e32 v1, s1119; GCN-NEXT:    s_sub_u32 s0, 0, s1020; GCN-NEXT:    s_subb_u32 s1, 0, s1121; GCN-NEXT:    v_madmk_f32 v0, v1, 0x4f800000, v022; GCN-NEXT:    v_rcp_f32_e32 v0, v023; GCN-NEXT:    v_mul_f32_e32 v0, 0x5f7ffffc, v024; GCN-NEXT:    v_mul_f32_e32 v1, 0x2f800000, v025; GCN-NEXT:    v_trunc_f32_e32 v1, v126; GCN-NEXT:    v_madmk_f32 v0, v1, 0xcf800000, v027; GCN-NEXT:    v_cvt_u32_f32_e32 v0, v028; GCN-NEXT:    v_cvt_u32_f32_e32 v1, v129; GCN-NEXT:    v_mul_hi_u32 v2, s0, v030; GCN-NEXT:    v_readfirstlane_b32 s12, v131; GCN-NEXT:    v_readfirstlane_b32 s2, v032; GCN-NEXT:    s_mul_i32 s13, s0, s1233; GCN-NEXT:    v_readfirstlane_b32 s16, v234; GCN-NEXT:    s_mul_i32 s14, s1, s235; GCN-NEXT:    s_mul_i32 s15, s0, s236; GCN-NEXT:    s_add_i32 s13, s16, s1337; GCN-NEXT:    v_mul_hi_u32 v3, v0, s1538; GCN-NEXT:    s_add_i32 s13, s13, s1439; GCN-NEXT:    v_mul_hi_u32 v0, v0, s1340; GCN-NEXT:    v_mul_hi_u32 v4, v1, s1541; GCN-NEXT:    v_readfirstlane_b32 s14, v342; GCN-NEXT:    s_mul_i32 s16, s2, s1343; GCN-NEXT:    v_mul_hi_u32 v1, v1, s1344; GCN-NEXT:    s_add_u32 s14, s14, s1645; GCN-NEXT:    v_readfirstlane_b32 s16, v046; GCN-NEXT:    s_mul_i32 s15, s12, s1547; GCN-NEXT:    s_addc_u32 s16, 0, s1648; GCN-NEXT:    v_readfirstlane_b32 s17, v449; GCN-NEXT:    s_add_u32 s14, s14, s1550; GCN-NEXT:    s_addc_u32 s14, s16, s1751; GCN-NEXT:    v_readfirstlane_b32 s15, v152; GCN-NEXT:    s_addc_u32 s15, s15, 053; GCN-NEXT:    s_mul_i32 s13, s12, s1354; GCN-NEXT:    s_add_u32 s13, s14, s1355; GCN-NEXT:    s_addc_u32 s14, 0, s1556; GCN-NEXT:    s_add_u32 s13, s2, s1357; GCN-NEXT:    v_mov_b32_e32 v0, s1358; GCN-NEXT:    v_mul_hi_u32 v0, s0, v059; GCN-NEXT:    s_addc_u32 s12, s12, s1460; GCN-NEXT:    s_mul_i32 s14, s0, s1261; GCN-NEXT:    s_mul_i32 s1, s1, s1362; GCN-NEXT:    v_readfirstlane_b32 s15, v063; GCN-NEXT:    s_add_i32 s14, s15, s1464; GCN-NEXT:    s_mul_i32 s0, s0, s1365; GCN-NEXT:    s_add_i32 s1, s14, s166; GCN-NEXT:    v_mov_b32_e32 v2, s067; GCN-NEXT:    v_mov_b32_e32 v0, s168; GCN-NEXT:    v_mul_hi_u32 v3, s12, v269; GCN-NEXT:    v_mul_hi_u32 v2, s13, v270; GCN-NEXT:    v_mul_hi_u32 v1, s12, v071; GCN-NEXT:    v_mul_hi_u32 v0, s13, v072; GCN-NEXT:    s_mul_i32 s15, s13, s173; GCN-NEXT:    v_readfirstlane_b32 s17, v274; GCN-NEXT:    s_add_u32 s15, s17, s1575; GCN-NEXT:    v_readfirstlane_b32 s16, v076; GCN-NEXT:    s_mul_i32 s0, s12, s077; GCN-NEXT:    s_addc_u32 s16, 0, s1678; GCN-NEXT:    v_readfirstlane_b32 s14, v379; GCN-NEXT:    s_add_u32 s0, s15, s080; GCN-NEXT:    s_addc_u32 s0, s16, s1481; GCN-NEXT:    v_readfirstlane_b32 s14, v182; GCN-NEXT:    s_addc_u32 s14, s14, 083; GCN-NEXT:    s_mul_i32 s1, s12, s184; GCN-NEXT:    s_add_u32 s0, s0, s185; GCN-NEXT:    s_addc_u32 s1, 0, s1486; GCN-NEXT:    s_add_u32 s14, s13, s087; GCN-NEXT:    s_addc_u32 s15, s12, s188; GCN-NEXT:    s_ashr_i32 s12, s7, 3189; GCN-NEXT:    s_add_u32 s0, s6, s1290; GCN-NEXT:    s_mov_b32 s13, s1291; GCN-NEXT:    s_addc_u32 s1, s7, s1292; GCN-NEXT:    s_xor_b64 s[6:7], s[0:1], s[12:13]93; GCN-NEXT:    v_mov_b32_e32 v0, s1594; GCN-NEXT:    v_mul_hi_u32 v1, s6, v095; GCN-NEXT:    v_mov_b32_e32 v2, s1496; GCN-NEXT:    v_mul_hi_u32 v3, s6, v297; GCN-NEXT:    s_mov_b32 s0, s498; GCN-NEXT:    v_readfirstlane_b32 s4, v199; GCN-NEXT:    v_mul_hi_u32 v1, s7, v2100; GCN-NEXT:    s_mul_i32 s1, s6, s15101; GCN-NEXT:    v_readfirstlane_b32 s16, v3102; GCN-NEXT:    v_mul_hi_u32 v0, s7, v0103; GCN-NEXT:    s_add_u32 s1, s16, s1104; GCN-NEXT:    s_addc_u32 s4, 0, s4105; GCN-NEXT:    s_mul_i32 s14, s7, s14106; GCN-NEXT:    v_readfirstlane_b32 s16, v1107; GCN-NEXT:    s_add_u32 s1, s1, s14108; GCN-NEXT:    s_addc_u32 s1, s4, s16109; GCN-NEXT:    v_readfirstlane_b32 s4, v0110; GCN-NEXT:    s_addc_u32 s4, s4, 0111; GCN-NEXT:    s_mul_i32 s14, s7, s15112; GCN-NEXT:    s_add_u32 s14, s1, s14113; GCN-NEXT:    v_mov_b32_e32 v0, s14114; GCN-NEXT:    v_mul_hi_u32 v0, s10, v0115; GCN-NEXT:    s_addc_u32 s15, 0, s4116; GCN-NEXT:    s_mov_b32 s1, s5117; GCN-NEXT:    s_mul_i32 s4, s10, s15118; GCN-NEXT:    v_readfirstlane_b32 s5, v0119; GCN-NEXT:    s_add_i32 s4, s5, s4120; GCN-NEXT:    s_mul_i32 s5, s11, s14121; GCN-NEXT:    s_add_i32 s16, s4, s5122; GCN-NEXT:    s_sub_i32 s17, s7, s16123; GCN-NEXT:    s_mul_i32 s4, s10, s14124; GCN-NEXT:    s_sub_u32 s6, s6, s4125; GCN-NEXT:    s_cselect_b64 s[4:5], -1, 0126; GCN-NEXT:    s_subb_u32 s17, s17, s11127; GCN-NEXT:    s_sub_u32 s18, s6, s10128; GCN-NEXT:    s_subb_u32 s17, s17, 0129; GCN-NEXT:    s_cmp_ge_u32 s17, s11130; GCN-NEXT:    s_cselect_b32 s19, -1, 0131; GCN-NEXT:    s_cmp_ge_u32 s18, s10132; GCN-NEXT:    s_cselect_b32 s18, -1, 0133; GCN-NEXT:    s_cmp_eq_u32 s17, s11134; GCN-NEXT:    s_cselect_b32 s17, s18, s19135; GCN-NEXT:    s_add_u32 s18, s14, 1136; GCN-NEXT:    s_addc_u32 s19, s15, 0137; GCN-NEXT:    s_add_u32 s20, s14, 2138; GCN-NEXT:    s_addc_u32 s21, s15, 0139; GCN-NEXT:    s_cmp_lg_u32 s17, 0140; GCN-NEXT:    s_cselect_b32 s17, s20, s18141; GCN-NEXT:    s_cselect_b32 s18, s21, s19142; GCN-NEXT:    s_or_b32 s4, s4, s5143; GCN-NEXT:    s_subb_u32 s4, s7, s16144; GCN-NEXT:    s_cmp_ge_u32 s4, s11145; GCN-NEXT:    s_cselect_b32 s5, -1, 0146; GCN-NEXT:    s_cmp_ge_u32 s6, s10147; GCN-NEXT:    s_cselect_b32 s6, -1, 0148; GCN-NEXT:    s_cmp_eq_u32 s4, s11149; GCN-NEXT:    s_cselect_b32 s4, s6, s5150; GCN-NEXT:    s_cmp_lg_u32 s4, 0151; GCN-NEXT:    s_cselect_b32 s5, s18, s15152; GCN-NEXT:    s_cselect_b32 s4, s17, s14153; GCN-NEXT:    s_xor_b64 s[6:7], s[12:13], s[8:9]154; GCN-NEXT:    s_xor_b64 s[4:5], s[4:5], s[6:7]155; GCN-NEXT:    s_sub_u32 s4, s4, s6156; GCN-NEXT:    s_subb_u32 s5, s5, s7157; GCN-NEXT:    v_mov_b32_e32 v0, s4158; GCN-NEXT:    s_mov_b32 s2, -1159; GCN-NEXT:    v_mov_b32_e32 v1, s5160; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0161; GCN-NEXT:    s_endpgm162;163; GCN-IR-LABEL: s_test_sdiv:164; GCN-IR:       ; %bb.0: ; %_udiv-special-cases165; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9166; GCN-IR-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd167; GCN-IR-NEXT:    s_mov_b32 s15, 0168; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)169; GCN-IR-NEXT:    s_ashr_i32 s4, s3, 31170; GCN-IR-NEXT:    s_mov_b32 s5, s4171; GCN-IR-NEXT:    s_ashr_i32 s6, s9, 31172; GCN-IR-NEXT:    s_xor_b64 s[2:3], s[2:3], s[4:5]173; GCN-IR-NEXT:    s_mov_b32 s7, s6174; GCN-IR-NEXT:    s_sub_u32 s12, s2, s4175; GCN-IR-NEXT:    s_subb_u32 s13, s3, s4176; GCN-IR-NEXT:    s_xor_b64 s[2:3], s[8:9], s[6:7]177; GCN-IR-NEXT:    s_sub_u32 s2, s2, s6178; GCN-IR-NEXT:    s_subb_u32 s3, s3, s6179; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[8:9], s[12:13], 0180; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[10:11], s[2:3], 0181; GCN-IR-NEXT:    s_flbit_i32_b64 s14, s[2:3]182; GCN-IR-NEXT:    s_or_b64 s[10:11], s[10:11], s[8:9]183; GCN-IR-NEXT:    s_flbit_i32_b64 s20, s[12:13]184; GCN-IR-NEXT:    s_sub_u32 s16, s14, s20185; GCN-IR-NEXT:    s_subb_u32 s17, 0, 0186; GCN-IR-NEXT:    v_cmp_gt_u64_e64 s[18:19], s[16:17], 63187; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[22:23], s[16:17], 63188; GCN-IR-NEXT:    s_or_b64 s[18:19], s[10:11], s[18:19]189; GCN-IR-NEXT:    s_and_b64 s[10:11], s[18:19], exec190; GCN-IR-NEXT:    s_cselect_b32 s11, 0, s13191; GCN-IR-NEXT:    s_cselect_b32 s10, 0, s12192; GCN-IR-NEXT:    s_or_b64 s[18:19], s[18:19], s[22:23]193; GCN-IR-NEXT:    s_mov_b64 s[8:9], 0194; GCN-IR-NEXT:    s_andn2_b64 vcc, exec, s[18:19]195; GCN-IR-NEXT:    s_cbranch_vccz .LBB0_5196; GCN-IR-NEXT:  ; %bb.1: ; %udiv-bb1197; GCN-IR-NEXT:    s_add_u32 s18, s16, 1198; GCN-IR-NEXT:    s_addc_u32 s10, s17, 0199; GCN-IR-NEXT:    s_cselect_b64 s[10:11], -1, 0200; GCN-IR-NEXT:    s_sub_i32 s16, 63, s16201; GCN-IR-NEXT:    s_andn2_b64 vcc, exec, s[10:11]202; GCN-IR-NEXT:    s_lshl_b64 s[10:11], s[12:13], s16203; GCN-IR-NEXT:    s_cbranch_vccz .LBB0_4204; GCN-IR-NEXT:  ; %bb.2: ; %udiv-preheader205; GCN-IR-NEXT:    s_lshr_b64 s[16:17], s[12:13], s18206; GCN-IR-NEXT:    s_add_u32 s18, s2, -1207; GCN-IR-NEXT:    s_addc_u32 s19, s3, -1208; GCN-IR-NEXT:    s_not_b64 s[8:9], s[14:15]209; GCN-IR-NEXT:    s_add_u32 s14, s8, s20210; GCN-IR-NEXT:    s_addc_u32 s15, s9, 0211; GCN-IR-NEXT:    s_mov_b64 s[12:13], 0212; GCN-IR-NEXT:    s_mov_b32 s9, 0213; GCN-IR-NEXT:  .LBB0_3: ; %udiv-do-while214; GCN-IR-NEXT:    ; =>This Inner Loop Header: Depth=1215; GCN-IR-NEXT:    s_lshl_b64 s[16:17], s[16:17], 1216; GCN-IR-NEXT:    s_lshr_b32 s8, s11, 31217; GCN-IR-NEXT:    s_lshl_b64 s[10:11], s[10:11], 1218; GCN-IR-NEXT:    s_or_b64 s[16:17], s[16:17], s[8:9]219; GCN-IR-NEXT:    s_or_b64 s[10:11], s[12:13], s[10:11]220; GCN-IR-NEXT:    s_sub_u32 s8, s18, s16221; GCN-IR-NEXT:    s_subb_u32 s8, s19, s17222; GCN-IR-NEXT:    s_ashr_i32 s12, s8, 31223; GCN-IR-NEXT:    s_mov_b32 s13, s12224; GCN-IR-NEXT:    s_and_b32 s8, s12, 1225; GCN-IR-NEXT:    s_and_b64 s[20:21], s[12:13], s[2:3]226; GCN-IR-NEXT:    s_sub_u32 s16, s16, s20227; GCN-IR-NEXT:    s_subb_u32 s17, s17, s21228; GCN-IR-NEXT:    s_add_u32 s14, s14, 1229; GCN-IR-NEXT:    s_addc_u32 s15, s15, 0230; GCN-IR-NEXT:    s_cselect_b64 s[20:21], -1, 0231; GCN-IR-NEXT:    s_mov_b64 s[12:13], s[8:9]232; GCN-IR-NEXT:    s_and_b64 vcc, exec, s[20:21]233; GCN-IR-NEXT:    s_cbranch_vccz .LBB0_3234; GCN-IR-NEXT:  .LBB0_4: ; %Flow7235; GCN-IR-NEXT:    s_lshl_b64 s[2:3], s[10:11], 1236; GCN-IR-NEXT:    s_or_b64 s[10:11], s[8:9], s[2:3]237; GCN-IR-NEXT:  .LBB0_5: ; %udiv-end238; GCN-IR-NEXT:    s_xor_b64 s[4:5], s[6:7], s[4:5]239; GCN-IR-NEXT:    s_xor_b64 s[6:7], s[10:11], s[4:5]240; GCN-IR-NEXT:    s_sub_u32 s4, s6, s4241; GCN-IR-NEXT:    s_subb_u32 s5, s7, s5242; GCN-IR-NEXT:    v_mov_b32_e32 v0, s4243; GCN-IR-NEXT:    s_mov_b32 s3, 0xf000244; GCN-IR-NEXT:    s_mov_b32 s2, -1245; GCN-IR-NEXT:    v_mov_b32_e32 v1, s5246; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0247; GCN-IR-NEXT:    s_endpgm248  %result = sdiv i64 %x, %y249  store i64 %result, ptr addrspace(1) %out250  ret void251}252 253define i64 @v_test_sdiv(i64 %x, i64 %y) {254; GCN-LABEL: v_test_sdiv:255; GCN:       ; %bb.0:256; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)257; GCN-NEXT:    v_ashrrev_i32_e32 v4, 31, v3258; GCN-NEXT:    v_add_i32_e32 v5, vcc, v2, v4259; GCN-NEXT:    v_addc_u32_e32 v2, vcc, v3, v4, vcc260; GCN-NEXT:    v_xor_b32_e32 v2, v2, v4261; GCN-NEXT:    v_xor_b32_e32 v3, v5, v4262; GCN-NEXT:    v_cvt_f32_u32_e32 v5, v3263; GCN-NEXT:    v_cvt_f32_u32_e32 v6, v2264; GCN-NEXT:    v_sub_i32_e32 v7, vcc, 0, v3265; GCN-NEXT:    v_subb_u32_e32 v8, vcc, 0, v2, vcc266; GCN-NEXT:    v_madmk_f32 v5, v6, 0x4f800000, v5267; GCN-NEXT:    v_rcp_f32_e32 v5, v5268; GCN-NEXT:    v_mul_f32_e32 v5, 0x5f7ffffc, v5269; GCN-NEXT:    v_mul_f32_e32 v6, 0x2f800000, v5270; GCN-NEXT:    v_trunc_f32_e32 v6, v6271; GCN-NEXT:    v_madmk_f32 v5, v6, 0xcf800000, v5272; GCN-NEXT:    v_cvt_u32_f32_e32 v5, v5273; GCN-NEXT:    v_cvt_u32_f32_e32 v6, v6274; GCN-NEXT:    v_mul_hi_u32 v9, v7, v5275; GCN-NEXT:    v_mul_lo_u32 v10, v7, v6276; GCN-NEXT:    v_mul_lo_u32 v11, v8, v5277; GCN-NEXT:    v_add_i32_e32 v9, vcc, v9, v10278; GCN-NEXT:    v_mul_lo_u32 v10, v7, v5279; GCN-NEXT:    v_add_i32_e32 v9, vcc, v9, v11280; GCN-NEXT:    v_mul_lo_u32 v11, v5, v9281; GCN-NEXT:    v_mul_hi_u32 v12, v5, v10282; GCN-NEXT:    v_mul_hi_u32 v13, v5, v9283; GCN-NEXT:    v_mul_hi_u32 v14, v6, v9284; GCN-NEXT:    v_mul_lo_u32 v9, v6, v9285; GCN-NEXT:    v_add_i32_e32 v11, vcc, v12, v11286; GCN-NEXT:    v_addc_u32_e32 v12, vcc, 0, v13, vcc287; GCN-NEXT:    v_mul_lo_u32 v13, v6, v10288; GCN-NEXT:    v_mul_hi_u32 v10, v6, v10289; GCN-NEXT:    v_add_i32_e32 v11, vcc, v11, v13290; GCN-NEXT:    v_addc_u32_e32 v10, vcc, v12, v10, vcc291; GCN-NEXT:    v_addc_u32_e32 v11, vcc, 0, v14, vcc292; GCN-NEXT:    v_add_i32_e32 v9, vcc, v10, v9293; GCN-NEXT:    v_addc_u32_e32 v10, vcc, 0, v11, vcc294; GCN-NEXT:    v_add_i32_e32 v5, vcc, v5, v9295; GCN-NEXT:    v_addc_u32_e32 v6, vcc, v6, v10, vcc296; GCN-NEXT:    v_mul_lo_u32 v9, v7, v6297; GCN-NEXT:    v_mul_hi_u32 v10, v7, v5298; GCN-NEXT:    v_mul_lo_u32 v8, v8, v5299; GCN-NEXT:    v_mul_lo_u32 v7, v7, v5300; GCN-NEXT:    v_add_i32_e32 v9, vcc, v10, v9301; GCN-NEXT:    v_add_i32_e32 v8, vcc, v9, v8302; GCN-NEXT:    v_mul_lo_u32 v11, v5, v8303; GCN-NEXT:    v_mul_hi_u32 v12, v5, v7304; GCN-NEXT:    v_mul_hi_u32 v13, v5, v8305; GCN-NEXT:    v_mul_hi_u32 v10, v6, v7306; GCN-NEXT:    v_mul_lo_u32 v7, v6, v7307; GCN-NEXT:    v_mul_hi_u32 v9, v6, v8308; GCN-NEXT:    v_add_i32_e32 v11, vcc, v12, v11309; GCN-NEXT:    v_addc_u32_e32 v12, vcc, 0, v13, vcc310; GCN-NEXT:    v_mul_lo_u32 v8, v6, v8311; GCN-NEXT:    v_add_i32_e32 v7, vcc, v11, v7312; GCN-NEXT:    v_addc_u32_e32 v7, vcc, v12, v10, vcc313; GCN-NEXT:    v_addc_u32_e32 v9, vcc, 0, v9, vcc314; GCN-NEXT:    v_add_i32_e32 v7, vcc, v7, v8315; GCN-NEXT:    v_addc_u32_e32 v8, vcc, 0, v9, vcc316; GCN-NEXT:    v_add_i32_e32 v5, vcc, v5, v7317; GCN-NEXT:    v_addc_u32_e32 v6, vcc, v6, v8, vcc318; GCN-NEXT:    v_ashrrev_i32_e32 v7, 31, v1319; GCN-NEXT:    v_add_i32_e32 v0, vcc, v0, v7320; GCN-NEXT:    v_xor_b32_e32 v0, v0, v7321; GCN-NEXT:    v_mul_lo_u32 v8, v0, v6322; GCN-NEXT:    v_mul_hi_u32 v9, v0, v5323; GCN-NEXT:    v_mul_hi_u32 v10, v0, v6324; GCN-NEXT:    v_addc_u32_e32 v1, vcc, v1, v7, vcc325; GCN-NEXT:    v_xor_b32_e32 v1, v1, v7326; GCN-NEXT:    v_add_i32_e32 v8, vcc, v9, v8327; GCN-NEXT:    v_addc_u32_e32 v9, vcc, 0, v10, vcc328; GCN-NEXT:    v_mul_lo_u32 v10, v1, v5329; GCN-NEXT:    v_mul_hi_u32 v5, v1, v5330; GCN-NEXT:    v_mul_hi_u32 v11, v1, v6331; GCN-NEXT:    v_mul_lo_u32 v6, v1, v6332; GCN-NEXT:    v_add_i32_e32 v8, vcc, v8, v10333; GCN-NEXT:    v_addc_u32_e32 v5, vcc, v9, v5, vcc334; GCN-NEXT:    v_addc_u32_e32 v8, vcc, 0, v11, vcc335; GCN-NEXT:    v_add_i32_e32 v5, vcc, v5, v6336; GCN-NEXT:    v_addc_u32_e32 v6, vcc, 0, v8, vcc337; GCN-NEXT:    v_mul_lo_u32 v8, v3, v6338; GCN-NEXT:    v_mul_hi_u32 v9, v3, v5339; GCN-NEXT:    v_mul_lo_u32 v10, v2, v5340; GCN-NEXT:    v_add_i32_e32 v8, vcc, v9, v8341; GCN-NEXT:    v_mul_lo_u32 v9, v3, v5342; GCN-NEXT:    v_add_i32_e32 v8, vcc, v8, v10343; GCN-NEXT:    v_sub_i32_e32 v10, vcc, v1, v8344; GCN-NEXT:    v_sub_i32_e32 v0, vcc, v0, v9345; GCN-NEXT:    v_subb_u32_e64 v9, s[4:5], v10, v2, vcc346; GCN-NEXT:    v_sub_i32_e64 v10, s[4:5], v0, v3347; GCN-NEXT:    v_subbrev_u32_e64 v9, s[4:5], 0, v9, s[4:5]348; GCN-NEXT:    v_cmp_ge_u32_e64 s[4:5], v9, v2349; GCN-NEXT:    v_cndmask_b32_e64 v11, 0, -1, s[4:5]350; GCN-NEXT:    v_cmp_ge_u32_e64 s[4:5], v10, v3351; GCN-NEXT:    v_cndmask_b32_e64 v10, 0, -1, s[4:5]352; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], v9, v2353; GCN-NEXT:    v_cndmask_b32_e64 v9, v11, v10, s[4:5]354; GCN-NEXT:    v_add_i32_e64 v10, s[4:5], 2, v5355; GCN-NEXT:    v_subb_u32_e32 v1, vcc, v1, v8, vcc356; GCN-NEXT:    v_addc_u32_e64 v11, s[4:5], 0, v6, s[4:5]357; GCN-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v2358; GCN-NEXT:    v_add_i32_e64 v12, s[4:5], 1, v5359; GCN-NEXT:    v_cndmask_b32_e64 v8, 0, -1, vcc360; GCN-NEXT:    v_cmp_ge_u32_e32 vcc, v0, v3361; GCN-NEXT:    v_addc_u32_e64 v13, s[4:5], 0, v6, s[4:5]362; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, -1, vcc363; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v2364; GCN-NEXT:    v_cmp_ne_u32_e64 s[4:5], 0, v9365; GCN-NEXT:    v_cndmask_b32_e32 v0, v8, v0, vcc366; GCN-NEXT:    v_cndmask_b32_e64 v9, v13, v11, s[4:5]367; GCN-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0368; GCN-NEXT:    v_cndmask_b32_e64 v1, v12, v10, s[4:5]369; GCN-NEXT:    v_cndmask_b32_e32 v0, v6, v9, vcc370; GCN-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc371; GCN-NEXT:    v_xor_b32_e32 v2, v7, v4372; GCN-NEXT:    v_xor_b32_e32 v3, v0, v2373; GCN-NEXT:    v_xor_b32_e32 v0, v1, v2374; GCN-NEXT:    v_sub_i32_e32 v0, vcc, v0, v2375; GCN-NEXT:    v_subb_u32_e32 v1, vcc, v3, v2, vcc376; GCN-NEXT:    s_setpc_b64 s[30:31]377;378; GCN-IR-LABEL: v_test_sdiv:379; GCN-IR:       ; %bb.0: ; %_udiv-special-cases380; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)381; GCN-IR-NEXT:    v_ashrrev_i32_e32 v10, 31, v1382; GCN-IR-NEXT:    v_xor_b32_e32 v0, v0, v10383; GCN-IR-NEXT:    v_ashrrev_i32_e32 v11, 31, v3384; GCN-IR-NEXT:    v_xor_b32_e32 v1, v1, v10385; GCN-IR-NEXT:    v_sub_i32_e32 v6, vcc, v0, v10386; GCN-IR-NEXT:    v_subb_u32_e32 v7, vcc, v1, v10, vcc387; GCN-IR-NEXT:    v_xor_b32_e32 v0, v2, v11388; GCN-IR-NEXT:    v_xor_b32_e32 v1, v3, v11389; GCN-IR-NEXT:    v_sub_i32_e32 v0, vcc, v0, v11390; GCN-IR-NEXT:    v_subb_u32_e32 v1, vcc, v1, v11, vcc391; GCN-IR-NEXT:    v_ffbh_u32_e32 v2, v0392; GCN-IR-NEXT:    v_add_i32_e64 v2, s[6:7], 32, v2393; GCN-IR-NEXT:    v_ffbh_u32_e32 v3, v1394; GCN-IR-NEXT:    v_min_u32_e32 v8, v2, v3395; GCN-IR-NEXT:    v_ffbh_u32_e32 v2, v6396; GCN-IR-NEXT:    v_add_i32_e64 v2, s[6:7], 32, v2397; GCN-IR-NEXT:    v_ffbh_u32_e32 v3, v7398; GCN-IR-NEXT:    v_min_u32_e32 v9, v2, v3399; GCN-IR-NEXT:    v_sub_i32_e64 v2, s[6:7], v8, v9400; GCN-IR-NEXT:    v_cmp_eq_u64_e32 vcc, 0, v[0:1]401; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[4:5], 0, v[6:7]402; GCN-IR-NEXT:    v_subb_u32_e64 v3, s[6:7], 0, 0, s[6:7]403; GCN-IR-NEXT:    v_cmp_lt_u64_e64 s[6:7], 63, v[2:3]404; GCN-IR-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]405; GCN-IR-NEXT:    s_or_b64 s[4:5], s[4:5], s[6:7]406; GCN-IR-NEXT:    v_cmp_ne_u64_e32 vcc, 63, v[2:3]407; GCN-IR-NEXT:    s_xor_b64 s[6:7], s[4:5], -1408; GCN-IR-NEXT:    v_mov_b32_e32 v12, v10409; GCN-IR-NEXT:    v_mov_b32_e32 v13, v11410; GCN-IR-NEXT:    v_cndmask_b32_e64 v5, v7, 0, s[4:5]411; GCN-IR-NEXT:    v_cndmask_b32_e64 v4, v6, 0, s[4:5]412; GCN-IR-NEXT:    s_and_b64 s[4:5], s[6:7], vcc413; GCN-IR-NEXT:    s_and_saveexec_b64 s[6:7], s[4:5]414; GCN-IR-NEXT:    s_cbranch_execz .LBB1_6415; GCN-IR-NEXT:  ; %bb.1: ; %udiv-bb1416; GCN-IR-NEXT:    v_add_i32_e32 v14, vcc, 1, v2417; GCN-IR-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc418; GCN-IR-NEXT:    v_sub_i32_e64 v2, s[4:5], 63, v2419; GCN-IR-NEXT:    v_lshl_b64 v[2:3], v[6:7], v2420; GCN-IR-NEXT:    v_mov_b32_e32 v4, 0421; GCN-IR-NEXT:    v_mov_b32_e32 v5, 0422; GCN-IR-NEXT:    s_xor_b64 s[4:5], vcc, -1423; GCN-IR-NEXT:    s_and_saveexec_b64 s[8:9], s[4:5]424; GCN-IR-NEXT:    s_xor_b64 s[4:5], exec, s[8:9]425; GCN-IR-NEXT:    s_cbranch_execz .LBB1_5426; GCN-IR-NEXT:  ; %bb.2: ; %udiv-preheader427; GCN-IR-NEXT:    v_lshr_b64 v[6:7], v[6:7], v14428; GCN-IR-NEXT:    v_add_i32_e32 v14, vcc, -1, v0429; GCN-IR-NEXT:    v_addc_u32_e32 v15, vcc, -1, v1, vcc430; GCN-IR-NEXT:    v_not_b32_e32 v4, v8431; GCN-IR-NEXT:    v_add_i32_e32 v16, vcc, v4, v9432; GCN-IR-NEXT:    v_addc_u32_e64 v17, s[8:9], -1, 0, vcc433; GCN-IR-NEXT:    v_mov_b32_e32 v8, 0434; GCN-IR-NEXT:    s_mov_b64 s[8:9], 0435; GCN-IR-NEXT:    v_mov_b32_e32 v9, 0436; GCN-IR-NEXT:    v_mov_b32_e32 v5, 0437; GCN-IR-NEXT:  .LBB1_3: ; %udiv-do-while438; GCN-IR-NEXT:    ; =>This Inner Loop Header: Depth=1439; GCN-IR-NEXT:    v_lshl_b64 v[6:7], v[6:7], 1440; GCN-IR-NEXT:    v_lshrrev_b32_e32 v4, 31, v3441; GCN-IR-NEXT:    v_or_b32_e32 v6, v6, v4442; GCN-IR-NEXT:    v_lshl_b64 v[2:3], v[2:3], 1443; GCN-IR-NEXT:    v_sub_i32_e32 v4, vcc, v14, v6444; GCN-IR-NEXT:    v_subb_u32_e32 v4, vcc, v15, v7, vcc445; GCN-IR-NEXT:    v_or_b32_e32 v2, v8, v2446; GCN-IR-NEXT:    v_ashrrev_i32_e32 v8, 31, v4447; GCN-IR-NEXT:    v_or_b32_e32 v3, v9, v3448; GCN-IR-NEXT:    v_and_b32_e32 v4, 1, v8449; GCN-IR-NEXT:    v_and_b32_e32 v9, v8, v1450; GCN-IR-NEXT:    v_and_b32_e32 v8, v8, v0451; GCN-IR-NEXT:    v_sub_i32_e32 v6, vcc, v6, v8452; GCN-IR-NEXT:    v_subb_u32_e32 v7, vcc, v7, v9, vcc453; GCN-IR-NEXT:    v_add_i32_e32 v16, vcc, 1, v16454; GCN-IR-NEXT:    v_addc_u32_e32 v17, vcc, 0, v17, vcc455; GCN-IR-NEXT:    v_mov_b32_e32 v9, v5456; GCN-IR-NEXT:    s_or_b64 s[8:9], vcc, s[8:9]457; GCN-IR-NEXT:    v_mov_b32_e32 v8, v4458; GCN-IR-NEXT:    s_andn2_b64 exec, exec, s[8:9]459; GCN-IR-NEXT:    s_cbranch_execnz .LBB1_3460; GCN-IR-NEXT:  ; %bb.4: ; %Flow461; GCN-IR-NEXT:    s_or_b64 exec, exec, s[8:9]462; GCN-IR-NEXT:  .LBB1_5: ; %Flow4463; GCN-IR-NEXT:    s_or_b64 exec, exec, s[4:5]464; GCN-IR-NEXT:    v_lshl_b64 v[0:1], v[2:3], 1465; GCN-IR-NEXT:    v_or_b32_e32 v5, v5, v1466; GCN-IR-NEXT:    v_or_b32_e32 v4, v4, v0467; GCN-IR-NEXT:  .LBB1_6: ; %Flow5468; GCN-IR-NEXT:    s_or_b64 exec, exec, s[6:7]469; GCN-IR-NEXT:    v_xor_b32_e32 v0, v11, v10470; GCN-IR-NEXT:    v_xor_b32_e32 v1, v13, v12471; GCN-IR-NEXT:    v_xor_b32_e32 v3, v4, v0472; GCN-IR-NEXT:    v_xor_b32_e32 v2, v5, v1473; GCN-IR-NEXT:    v_sub_i32_e32 v0, vcc, v3, v0474; GCN-IR-NEXT:    v_subb_u32_e32 v1, vcc, v2, v1, vcc475; GCN-IR-NEXT:    s_setpc_b64 s[30:31]476  %result = sdiv i64 %x, %y477  ret i64 %result478}479 480define amdgpu_kernel void @s_test_sdiv24_64(ptr addrspace(1) %out, i64 %x, i64 %y) {481; GCN-LABEL: s_test_sdiv24_64:482; GCN:       ; %bb.0:483; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9484; GCN-NEXT:    s_waitcnt lgkmcnt(0)485; GCN-NEXT:    s_load_dword s2, s[4:5], 0xe486; GCN-NEXT:    s_mov_b32 s7, 0xf000487; GCN-NEXT:    s_mov_b32 s6, -1488; GCN-NEXT:    s_mov_b32 s4, s0489; GCN-NEXT:    s_waitcnt lgkmcnt(0)490; GCN-NEXT:    s_ashr_i32 s0, s2, 8491; GCN-NEXT:    v_cvt_f32_i32_e32 v0, s0492; GCN-NEXT:    s_mov_b32 s5, s1493; GCN-NEXT:    s_ashr_i32 s1, s3, 8494; GCN-NEXT:    v_cvt_f32_i32_e32 v1, s1495; GCN-NEXT:    v_rcp_iflag_f32_e32 v2, v0496; GCN-NEXT:    s_xor_b32 s0, s1, s0497; GCN-NEXT:    s_ashr_i32 s0, s0, 30498; GCN-NEXT:    s_or_b32 s2, s0, 1499; GCN-NEXT:    v_mul_f32_e32 v2, v1, v2500; GCN-NEXT:    v_trunc_f32_e32 v2, v2501; GCN-NEXT:    v_mad_f32 v1, -v2, v0, v1502; GCN-NEXT:    v_cvt_i32_f32_e32 v2, v2503; GCN-NEXT:    v_cmp_ge_f32_e64 s[0:1], |v1|, |v0|504; GCN-NEXT:    s_and_b64 s[0:1], s[0:1], exec505; GCN-NEXT:    s_cselect_b32 s0, s2, 0506; GCN-NEXT:    v_add_i32_e32 v0, vcc, s0, v2507; GCN-NEXT:    v_bfe_i32 v0, v0, 0, 24508; GCN-NEXT:    v_ashrrev_i32_e32 v1, 31, v0509; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0510; GCN-NEXT:    s_endpgm511;512; GCN-IR-LABEL: s_test_sdiv24_64:513; GCN-IR:       ; %bb.0:514; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9515; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)516; GCN-IR-NEXT:    s_load_dword s2, s[4:5], 0xe517; GCN-IR-NEXT:    s_mov_b32 s7, 0xf000518; GCN-IR-NEXT:    s_mov_b32 s6, -1519; GCN-IR-NEXT:    s_mov_b32 s4, s0520; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)521; GCN-IR-NEXT:    s_ashr_i32 s0, s2, 8522; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v0, s0523; GCN-IR-NEXT:    s_mov_b32 s5, s1524; GCN-IR-NEXT:    s_ashr_i32 s1, s3, 8525; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v1, s1526; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v2, v0527; GCN-IR-NEXT:    s_xor_b32 s0, s1, s0528; GCN-IR-NEXT:    s_ashr_i32 s0, s0, 30529; GCN-IR-NEXT:    s_or_b32 s2, s0, 1530; GCN-IR-NEXT:    v_mul_f32_e32 v2, v1, v2531; GCN-IR-NEXT:    v_trunc_f32_e32 v2, v2532; GCN-IR-NEXT:    v_mad_f32 v1, -v2, v0, v1533; GCN-IR-NEXT:    v_cvt_i32_f32_e32 v2, v2534; GCN-IR-NEXT:    v_cmp_ge_f32_e64 s[0:1], |v1|, |v0|535; GCN-IR-NEXT:    s_and_b64 s[0:1], s[0:1], exec536; GCN-IR-NEXT:    s_cselect_b32 s0, s2, 0537; GCN-IR-NEXT:    v_add_i32_e32 v0, vcc, s0, v2538; GCN-IR-NEXT:    v_bfe_i32 v0, v0, 0, 24539; GCN-IR-NEXT:    v_ashrrev_i32_e32 v1, 31, v0540; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0541; GCN-IR-NEXT:    s_endpgm542  %1 = ashr i64 %x, 40543  %2 = ashr i64 %y, 40544  %result = sdiv i64 %1, %2545  store i64 %result, ptr addrspace(1) %out546  ret void547}548 549define i64 @v_test_sdiv24_64(i64 %x, i64 %y) {550; GCN-LABEL: v_test_sdiv24_64:551; GCN:       ; %bb.0:552; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)553; GCN-NEXT:    v_lshrrev_b32_e32 v0, 8, v3554; GCN-NEXT:    v_cvt_f32_u32_e32 v2, v0555; GCN-NEXT:    v_sub_i32_e32 v3, vcc, 0, v0556; GCN-NEXT:    v_lshrrev_b32_e32 v1, 8, v1557; GCN-NEXT:    v_rcp_iflag_f32_e32 v2, v2558; GCN-NEXT:    v_mul_f32_e32 v2, 0x4f7ffffe, v2559; GCN-NEXT:    v_cvt_u32_f32_e32 v2, v2560; GCN-NEXT:    v_mul_lo_u32 v3, v3, v2561; GCN-NEXT:    v_mul_hi_u32 v3, v2, v3562; GCN-NEXT:    v_add_i32_e32 v2, vcc, v2, v3563; GCN-NEXT:    v_mul_hi_u32 v2, v1, v2564; GCN-NEXT:    v_mul_u32_u24_e32 v3, v2, v0565; GCN-NEXT:    v_add_i32_e32 v4, vcc, 1, v2566; GCN-NEXT:    v_sub_i32_e32 v1, vcc, v1, v3567; GCN-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v0568; GCN-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc569; GCN-NEXT:    v_sub_i32_e64 v3, s[4:5], v1, v0570; GCN-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc571; GCN-NEXT:    v_add_i32_e32 v3, vcc, 1, v2572; GCN-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v0573; GCN-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc574; GCN-NEXT:    v_ashrrev_i32_e32 v1, 31, v0575; GCN-NEXT:    s_setpc_b64 s[30:31]576;577; GCN-IR-LABEL: v_test_sdiv24_64:578; GCN-IR:       ; %bb.0:579; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)580; GCN-IR-NEXT:    v_lshrrev_b32_e32 v0, 8, v3581; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v2, v0582; GCN-IR-NEXT:    v_sub_i32_e32 v3, vcc, 0, v0583; GCN-IR-NEXT:    v_lshrrev_b32_e32 v1, 8, v1584; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v2, v2585; GCN-IR-NEXT:    v_mul_f32_e32 v2, 0x4f7ffffe, v2586; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v2, v2587; GCN-IR-NEXT:    v_mul_lo_u32 v3, v3, v2588; GCN-IR-NEXT:    v_mul_hi_u32 v3, v2, v3589; GCN-IR-NEXT:    v_add_i32_e32 v2, vcc, v2, v3590; GCN-IR-NEXT:    v_mul_hi_u32 v2, v1, v2591; GCN-IR-NEXT:    v_mul_u32_u24_e32 v3, v2, v0592; GCN-IR-NEXT:    v_add_i32_e32 v4, vcc, 1, v2593; GCN-IR-NEXT:    v_sub_i32_e32 v1, vcc, v1, v3594; GCN-IR-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v0595; GCN-IR-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc596; GCN-IR-NEXT:    v_sub_i32_e64 v3, s[4:5], v1, v0597; GCN-IR-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc598; GCN-IR-NEXT:    v_add_i32_e32 v3, vcc, 1, v2599; GCN-IR-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v0600; GCN-IR-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc601; GCN-IR-NEXT:    v_ashrrev_i32_e32 v1, 31, v0602; GCN-IR-NEXT:    s_setpc_b64 s[30:31]603  %1 = lshr i64 %x, 40604  %2 = lshr i64 %y, 40605  %result = sdiv i64 %1, %2606  ret i64 %result607}608 609define amdgpu_kernel void @s_test_sdiv32_64(ptr addrspace(1) %out, i64 %x, i64 %y) {610; GCN-LABEL: s_test_sdiv32_64:611; GCN:       ; %bb.0:612; GCN-NEXT:    s_load_dword s8, s[4:5], 0xe613; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9614; GCN-NEXT:    s_mov_b32 s7, 0xf000615; GCN-NEXT:    s_mov_b32 s6, -1616; GCN-NEXT:    s_waitcnt lgkmcnt(0)617; GCN-NEXT:    s_abs_i32 s9, s8618; GCN-NEXT:    v_cvt_f32_u32_e32 v0, s9619; GCN-NEXT:    s_sub_i32 s2, 0, s9620; GCN-NEXT:    s_mov_b32 s4, s0621; GCN-NEXT:    s_abs_i32 s0, s3622; GCN-NEXT:    v_rcp_iflag_f32_e32 v0, v0623; GCN-NEXT:    s_mov_b32 s5, s1624; GCN-NEXT:    s_xor_b32 s1, s3, s8625; GCN-NEXT:    s_ashr_i32 s1, s1, 31626; GCN-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0627; GCN-NEXT:    v_cvt_u32_f32_e32 v0, v0628; GCN-NEXT:    v_mul_lo_u32 v1, s2, v0629; GCN-NEXT:    v_mul_hi_u32 v1, v0, v1630; GCN-NEXT:    v_add_i32_e32 v0, vcc, v0, v1631; GCN-NEXT:    v_mul_hi_u32 v0, s0, v0632; GCN-NEXT:    v_readfirstlane_b32 s2, v0633; GCN-NEXT:    s_mul_i32 s3, s2, s9634; GCN-NEXT:    s_sub_i32 s0, s0, s3635; GCN-NEXT:    s_add_i32 s8, s2, 1636; GCN-NEXT:    s_sub_i32 s3, s0, s9637; GCN-NEXT:    s_cmp_ge_u32 s0, s9638; GCN-NEXT:    s_cselect_b32 s2, s8, s2639; GCN-NEXT:    s_cselect_b32 s0, s3, s0640; GCN-NEXT:    s_add_i32 s3, s2, 1641; GCN-NEXT:    s_cmp_ge_u32 s0, s9642; GCN-NEXT:    s_cselect_b32 s0, s3, s2643; GCN-NEXT:    s_xor_b32 s0, s0, s1644; GCN-NEXT:    s_sub_i32 s0, s0, s1645; GCN-NEXT:    s_ashr_i32 s1, s0, 31646; GCN-NEXT:    v_mov_b32_e32 v0, s0647; GCN-NEXT:    v_mov_b32_e32 v1, s1648; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0649; GCN-NEXT:    s_endpgm650;651; GCN-IR-LABEL: s_test_sdiv32_64:652; GCN-IR:       ; %bb.0:653; GCN-IR-NEXT:    s_load_dword s8, s[4:5], 0xe654; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9655; GCN-IR-NEXT:    s_mov_b32 s7, 0xf000656; GCN-IR-NEXT:    s_mov_b32 s6, -1657; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)658; GCN-IR-NEXT:    s_abs_i32 s9, s8659; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v0, s9660; GCN-IR-NEXT:    s_sub_i32 s2, 0, s9661; GCN-IR-NEXT:    s_mov_b32 s4, s0662; GCN-IR-NEXT:    s_abs_i32 s0, s3663; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v0, v0664; GCN-IR-NEXT:    s_mov_b32 s5, s1665; GCN-IR-NEXT:    s_xor_b32 s1, s3, s8666; GCN-IR-NEXT:    s_ashr_i32 s1, s1, 31667; GCN-IR-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0668; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v0, v0669; GCN-IR-NEXT:    v_mul_lo_u32 v1, s2, v0670; GCN-IR-NEXT:    v_mul_hi_u32 v1, v0, v1671; GCN-IR-NEXT:    v_add_i32_e32 v0, vcc, v0, v1672; GCN-IR-NEXT:    v_mul_hi_u32 v0, s0, v0673; GCN-IR-NEXT:    v_readfirstlane_b32 s2, v0674; GCN-IR-NEXT:    s_mul_i32 s3, s2, s9675; GCN-IR-NEXT:    s_sub_i32 s0, s0, s3676; GCN-IR-NEXT:    s_add_i32 s8, s2, 1677; GCN-IR-NEXT:    s_sub_i32 s3, s0, s9678; GCN-IR-NEXT:    s_cmp_ge_u32 s0, s9679; GCN-IR-NEXT:    s_cselect_b32 s2, s8, s2680; GCN-IR-NEXT:    s_cselect_b32 s0, s3, s0681; GCN-IR-NEXT:    s_add_i32 s3, s2, 1682; GCN-IR-NEXT:    s_cmp_ge_u32 s0, s9683; GCN-IR-NEXT:    s_cselect_b32 s0, s3, s2684; GCN-IR-NEXT:    s_xor_b32 s0, s0, s1685; GCN-IR-NEXT:    s_sub_i32 s0, s0, s1686; GCN-IR-NEXT:    s_ashr_i32 s1, s0, 31687; GCN-IR-NEXT:    v_mov_b32_e32 v0, s0688; GCN-IR-NEXT:    v_mov_b32_e32 v1, s1689; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0690; GCN-IR-NEXT:    s_endpgm691  %1 = ashr i64 %x, 32692  %2 = ashr i64 %y, 32693  %result = sdiv i64 %1, %2694  store i64 %result, ptr addrspace(1) %out695  ret void696}697 698define amdgpu_kernel void @s_test_sdiv31_64(ptr addrspace(1) %out, i64 %x, i64 %y) {699; GCN-LABEL: s_test_sdiv31_64:700; GCN:       ; %bb.0:701; GCN-NEXT:    s_load_dword s0, s[4:5], 0xe702; GCN-NEXT:    s_mov_b32 s7, 0xf000703; GCN-NEXT:    s_mov_b32 s6, -1704; GCN-NEXT:    s_waitcnt lgkmcnt(0)705; GCN-NEXT:    s_ashr_i32 s8, s0, 1706; GCN-NEXT:    s_abs_i32 s9, s8707; GCN-NEXT:    v_cvt_f32_u32_e32 v0, s9708; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9709; GCN-NEXT:    s_waitcnt lgkmcnt(0)710; GCN-NEXT:    s_sub_i32 s2, 0, s9711; GCN-NEXT:    v_rcp_iflag_f32_e32 v0, v0712; GCN-NEXT:    s_mov_b32 s4, s0713; GCN-NEXT:    s_ashr_i32 s0, s3, 1714; GCN-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0715; GCN-NEXT:    v_cvt_u32_f32_e32 v0, v0716; GCN-NEXT:    s_mov_b32 s5, s1717; GCN-NEXT:    v_mul_lo_u32 v1, s2, v0718; GCN-NEXT:    s_abs_i32 s2, s0719; GCN-NEXT:    s_xor_b32 s0, s0, s8720; GCN-NEXT:    s_ashr_i32 s0, s0, 31721; GCN-NEXT:    v_mul_hi_u32 v1, v0, v1722; GCN-NEXT:    v_add_i32_e32 v0, vcc, v0, v1723; GCN-NEXT:    v_mul_hi_u32 v0, s2, v0724; GCN-NEXT:    v_readfirstlane_b32 s1, v0725; GCN-NEXT:    s_mul_i32 s3, s1, s9726; GCN-NEXT:    s_sub_i32 s2, s2, s3727; GCN-NEXT:    s_add_i32 s8, s1, 1728; GCN-NEXT:    s_sub_i32 s3, s2, s9729; GCN-NEXT:    s_cmp_ge_u32 s2, s9730; GCN-NEXT:    s_cselect_b32 s1, s8, s1731; GCN-NEXT:    s_cselect_b32 s2, s3, s2732; GCN-NEXT:    s_add_i32 s3, s1, 1733; GCN-NEXT:    s_cmp_ge_u32 s2, s9734; GCN-NEXT:    s_cselect_b32 s1, s3, s1735; GCN-NEXT:    s_xor_b32 s1, s1, s0736; GCN-NEXT:    s_sub_i32 s0, s1, s0737; GCN-NEXT:    s_ashr_i32 s1, s0, 31738; GCN-NEXT:    v_mov_b32_e32 v0, s0739; GCN-NEXT:    v_mov_b32_e32 v1, s1740; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0741; GCN-NEXT:    s_endpgm742;743; GCN-IR-LABEL: s_test_sdiv31_64:744; GCN-IR:       ; %bb.0:745; GCN-IR-NEXT:    s_load_dword s0, s[4:5], 0xe746; GCN-IR-NEXT:    s_mov_b32 s7, 0xf000747; GCN-IR-NEXT:    s_mov_b32 s6, -1748; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)749; GCN-IR-NEXT:    s_ashr_i32 s8, s0, 1750; GCN-IR-NEXT:    s_abs_i32 s9, s8751; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v0, s9752; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9753; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)754; GCN-IR-NEXT:    s_sub_i32 s2, 0, s9755; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v0, v0756; GCN-IR-NEXT:    s_mov_b32 s4, s0757; GCN-IR-NEXT:    s_ashr_i32 s0, s3, 1758; GCN-IR-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0759; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v0, v0760; GCN-IR-NEXT:    s_mov_b32 s5, s1761; GCN-IR-NEXT:    v_mul_lo_u32 v1, s2, v0762; GCN-IR-NEXT:    s_abs_i32 s2, s0763; GCN-IR-NEXT:    s_xor_b32 s0, s0, s8764; GCN-IR-NEXT:    s_ashr_i32 s0, s0, 31765; GCN-IR-NEXT:    v_mul_hi_u32 v1, v0, v1766; GCN-IR-NEXT:    v_add_i32_e32 v0, vcc, v0, v1767; GCN-IR-NEXT:    v_mul_hi_u32 v0, s2, v0768; GCN-IR-NEXT:    v_readfirstlane_b32 s1, v0769; GCN-IR-NEXT:    s_mul_i32 s3, s1, s9770; GCN-IR-NEXT:    s_sub_i32 s2, s2, s3771; GCN-IR-NEXT:    s_add_i32 s8, s1, 1772; GCN-IR-NEXT:    s_sub_i32 s3, s2, s9773; GCN-IR-NEXT:    s_cmp_ge_u32 s2, s9774; GCN-IR-NEXT:    s_cselect_b32 s1, s8, s1775; GCN-IR-NEXT:    s_cselect_b32 s2, s3, s2776; GCN-IR-NEXT:    s_add_i32 s3, s1, 1777; GCN-IR-NEXT:    s_cmp_ge_u32 s2, s9778; GCN-IR-NEXT:    s_cselect_b32 s1, s3, s1779; GCN-IR-NEXT:    s_xor_b32 s1, s1, s0780; GCN-IR-NEXT:    s_sub_i32 s0, s1, s0781; GCN-IR-NEXT:    s_ashr_i32 s1, s0, 31782; GCN-IR-NEXT:    v_mov_b32_e32 v0, s0783; GCN-IR-NEXT:    v_mov_b32_e32 v1, s1784; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0785; GCN-IR-NEXT:    s_endpgm786  %1 = ashr i64 %x, 33787  %2 = ashr i64 %y, 33788  %result = sdiv i64 %1, %2789  store i64 %result, ptr addrspace(1) %out790  ret void791}792 793define amdgpu_kernel void @s_test_sdiv23_64(ptr addrspace(1) %out, i64 %x, i64 %y) {794; GCN-LABEL: s_test_sdiv23_64:795; GCN:       ; %bb.0:796; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9797; GCN-NEXT:    s_waitcnt lgkmcnt(0)798; GCN-NEXT:    s_load_dword s2, s[4:5], 0xe799; GCN-NEXT:    s_mov_b32 s7, 0xf000800; GCN-NEXT:    s_mov_b32 s6, -1801; GCN-NEXT:    s_mov_b32 s4, s0802; GCN-NEXT:    s_waitcnt lgkmcnt(0)803; GCN-NEXT:    s_ashr_i32 s0, s2, 9804; GCN-NEXT:    v_cvt_f32_i32_e32 v0, s0805; GCN-NEXT:    s_mov_b32 s5, s1806; GCN-NEXT:    s_ashr_i32 s1, s3, 9807; GCN-NEXT:    v_cvt_f32_i32_e32 v1, s1808; GCN-NEXT:    v_rcp_iflag_f32_e32 v2, v0809; GCN-NEXT:    s_xor_b32 s0, s1, s0810; GCN-NEXT:    s_ashr_i32 s0, s0, 30811; GCN-NEXT:    s_or_b32 s2, s0, 1812; GCN-NEXT:    v_mul_f32_e32 v2, v1, v2813; GCN-NEXT:    v_trunc_f32_e32 v2, v2814; GCN-NEXT:    v_mad_f32 v1, -v2, v0, v1815; GCN-NEXT:    v_cvt_i32_f32_e32 v2, v2816; GCN-NEXT:    v_cmp_ge_f32_e64 s[0:1], |v1|, |v0|817; GCN-NEXT:    s_and_b64 s[0:1], s[0:1], exec818; GCN-NEXT:    s_cselect_b32 s0, s2, 0819; GCN-NEXT:    v_add_i32_e32 v0, vcc, s0, v2820; GCN-NEXT:    v_bfe_i32 v0, v0, 0, 23821; GCN-NEXT:    v_ashrrev_i32_e32 v1, 31, v0822; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0823; GCN-NEXT:    s_endpgm824;825; GCN-IR-LABEL: s_test_sdiv23_64:826; GCN-IR:       ; %bb.0:827; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9828; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)829; GCN-IR-NEXT:    s_load_dword s2, s[4:5], 0xe830; GCN-IR-NEXT:    s_mov_b32 s7, 0xf000831; GCN-IR-NEXT:    s_mov_b32 s6, -1832; GCN-IR-NEXT:    s_mov_b32 s4, s0833; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)834; GCN-IR-NEXT:    s_ashr_i32 s0, s2, 9835; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v0, s0836; GCN-IR-NEXT:    s_mov_b32 s5, s1837; GCN-IR-NEXT:    s_ashr_i32 s1, s3, 9838; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v1, s1839; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v2, v0840; GCN-IR-NEXT:    s_xor_b32 s0, s1, s0841; GCN-IR-NEXT:    s_ashr_i32 s0, s0, 30842; GCN-IR-NEXT:    s_or_b32 s2, s0, 1843; GCN-IR-NEXT:    v_mul_f32_e32 v2, v1, v2844; GCN-IR-NEXT:    v_trunc_f32_e32 v2, v2845; GCN-IR-NEXT:    v_mad_f32 v1, -v2, v0, v1846; GCN-IR-NEXT:    v_cvt_i32_f32_e32 v2, v2847; GCN-IR-NEXT:    v_cmp_ge_f32_e64 s[0:1], |v1|, |v0|848; GCN-IR-NEXT:    s_and_b64 s[0:1], s[0:1], exec849; GCN-IR-NEXT:    s_cselect_b32 s0, s2, 0850; GCN-IR-NEXT:    v_add_i32_e32 v0, vcc, s0, v2851; GCN-IR-NEXT:    v_bfe_i32 v0, v0, 0, 23852; GCN-IR-NEXT:    v_ashrrev_i32_e32 v1, 31, v0853; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0854; GCN-IR-NEXT:    s_endpgm855  %1 = ashr i64 %x, 41856  %2 = ashr i64 %y, 41857  %result = sdiv i64 %1, %2858  store i64 %result, ptr addrspace(1) %out859  ret void860}861 862define amdgpu_kernel void @s_test_sdiv25_64(ptr addrspace(1) %out, i64 %x, i64 %y) {863; GCN-LABEL: s_test_sdiv25_64:864; GCN:       ; %bb.0:865; GCN-NEXT:    s_load_dword s0, s[4:5], 0xe866; GCN-NEXT:    s_mov_b32 s7, 0xf000867; GCN-NEXT:    s_mov_b32 s6, -1868; GCN-NEXT:    s_waitcnt lgkmcnt(0)869; GCN-NEXT:    s_ashr_i32 s8, s0, 7870; GCN-NEXT:    s_abs_i32 s9, s8871; GCN-NEXT:    v_cvt_f32_u32_e32 v0, s9872; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9873; GCN-NEXT:    s_waitcnt lgkmcnt(0)874; GCN-NEXT:    s_sub_i32 s2, 0, s9875; GCN-NEXT:    v_rcp_iflag_f32_e32 v0, v0876; GCN-NEXT:    s_mov_b32 s4, s0877; GCN-NEXT:    s_ashr_i32 s0, s3, 7878; GCN-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0879; GCN-NEXT:    v_cvt_u32_f32_e32 v0, v0880; GCN-NEXT:    s_mov_b32 s5, s1881; GCN-NEXT:    v_mul_lo_u32 v1, s2, v0882; GCN-NEXT:    s_abs_i32 s2, s0883; GCN-NEXT:    s_xor_b32 s0, s0, s8884; GCN-NEXT:    s_ashr_i32 s0, s0, 31885; GCN-NEXT:    v_mul_hi_u32 v1, v0, v1886; GCN-NEXT:    v_add_i32_e32 v0, vcc, v0, v1887; GCN-NEXT:    v_mul_hi_u32 v0, s2, v0888; GCN-NEXT:    v_readfirstlane_b32 s1, v0889; GCN-NEXT:    s_mul_i32 s3, s1, s9890; GCN-NEXT:    s_sub_i32 s2, s2, s3891; GCN-NEXT:    s_add_i32 s8, s1, 1892; GCN-NEXT:    s_sub_i32 s3, s2, s9893; GCN-NEXT:    s_cmp_ge_u32 s2, s9894; GCN-NEXT:    s_cselect_b32 s1, s8, s1895; GCN-NEXT:    s_cselect_b32 s2, s3, s2896; GCN-NEXT:    s_add_i32 s3, s1, 1897; GCN-NEXT:    s_cmp_ge_u32 s2, s9898; GCN-NEXT:    s_cselect_b32 s1, s3, s1899; GCN-NEXT:    s_xor_b32 s1, s1, s0900; GCN-NEXT:    s_sub_i32 s0, s1, s0901; GCN-NEXT:    s_ashr_i32 s1, s0, 31902; GCN-NEXT:    v_mov_b32_e32 v0, s0903; GCN-NEXT:    v_mov_b32_e32 v1, s1904; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0905; GCN-NEXT:    s_endpgm906;907; GCN-IR-LABEL: s_test_sdiv25_64:908; GCN-IR:       ; %bb.0:909; GCN-IR-NEXT:    s_load_dword s0, s[4:5], 0xe910; GCN-IR-NEXT:    s_mov_b32 s7, 0xf000911; GCN-IR-NEXT:    s_mov_b32 s6, -1912; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)913; GCN-IR-NEXT:    s_ashr_i32 s8, s0, 7914; GCN-IR-NEXT:    s_abs_i32 s9, s8915; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v0, s9916; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9917; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)918; GCN-IR-NEXT:    s_sub_i32 s2, 0, s9919; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v0, v0920; GCN-IR-NEXT:    s_mov_b32 s4, s0921; GCN-IR-NEXT:    s_ashr_i32 s0, s3, 7922; GCN-IR-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0923; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v0, v0924; GCN-IR-NEXT:    s_mov_b32 s5, s1925; GCN-IR-NEXT:    v_mul_lo_u32 v1, s2, v0926; GCN-IR-NEXT:    s_abs_i32 s2, s0927; GCN-IR-NEXT:    s_xor_b32 s0, s0, s8928; GCN-IR-NEXT:    s_ashr_i32 s0, s0, 31929; GCN-IR-NEXT:    v_mul_hi_u32 v1, v0, v1930; GCN-IR-NEXT:    v_add_i32_e32 v0, vcc, v0, v1931; GCN-IR-NEXT:    v_mul_hi_u32 v0, s2, v0932; GCN-IR-NEXT:    v_readfirstlane_b32 s1, v0933; GCN-IR-NEXT:    s_mul_i32 s3, s1, s9934; GCN-IR-NEXT:    s_sub_i32 s2, s2, s3935; GCN-IR-NEXT:    s_add_i32 s8, s1, 1936; GCN-IR-NEXT:    s_sub_i32 s3, s2, s9937; GCN-IR-NEXT:    s_cmp_ge_u32 s2, s9938; GCN-IR-NEXT:    s_cselect_b32 s1, s8, s1939; GCN-IR-NEXT:    s_cselect_b32 s2, s3, s2940; GCN-IR-NEXT:    s_add_i32 s3, s1, 1941; GCN-IR-NEXT:    s_cmp_ge_u32 s2, s9942; GCN-IR-NEXT:    s_cselect_b32 s1, s3, s1943; GCN-IR-NEXT:    s_xor_b32 s1, s1, s0944; GCN-IR-NEXT:    s_sub_i32 s0, s1, s0945; GCN-IR-NEXT:    s_ashr_i32 s1, s0, 31946; GCN-IR-NEXT:    v_mov_b32_e32 v0, s0947; GCN-IR-NEXT:    v_mov_b32_e32 v1, s1948; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0949; GCN-IR-NEXT:    s_endpgm950  %1 = ashr i64 %x, 39951  %2 = ashr i64 %y, 39952  %result = sdiv i64 %1, %2953  store i64 %result, ptr addrspace(1) %out954  ret void955}956 957define amdgpu_kernel void @s_test_sdiv24_v2i64(ptr addrspace(1) %out, <2 x i64> %x, <2 x i64> %y) {958; GCN-LABEL: s_test_sdiv24_v2i64:959; GCN:       ; %bb.0:960; GCN-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0xd961; GCN-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9962; GCN-NEXT:    s_mov_b32 s3, 0xf000963; GCN-NEXT:    s_mov_b32 s2, -1964; GCN-NEXT:    s_waitcnt lgkmcnt(0)965; GCN-NEXT:    s_ashr_i32 s4, s13, 8966; GCN-NEXT:    v_cvt_f32_i32_e32 v0, s4967; GCN-NEXT:    s_ashr_i32 s5, s9, 8968; GCN-NEXT:    v_cvt_f32_i32_e32 v1, s5969; GCN-NEXT:    s_xor_b32 s4, s5, s4970; GCN-NEXT:    v_rcp_iflag_f32_e32 v2, v0971; GCN-NEXT:    s_ashr_i32 s4, s4, 30972; GCN-NEXT:    s_ashr_i32 s6, s11, 8973; GCN-NEXT:    s_ashr_i32 s7, s15, 8974; GCN-NEXT:    v_mul_f32_e32 v2, v1, v2975; GCN-NEXT:    v_trunc_f32_e32 v2, v2976; GCN-NEXT:    v_mad_f32 v1, -v2, v0, v1977; GCN-NEXT:    v_cvt_i32_f32_e32 v2, v2978; GCN-NEXT:    s_or_b32 s8, s4, 1979; GCN-NEXT:    v_cmp_ge_f32_e64 s[4:5], |v1|, |v0|980; GCN-NEXT:    s_and_b64 s[4:5], s[4:5], exec981; GCN-NEXT:    s_cselect_b32 s4, s8, 0982; GCN-NEXT:    v_add_i32_e32 v0, vcc, s4, v2983; GCN-NEXT:    v_cvt_f32_i32_e32 v2, s7984; GCN-NEXT:    v_cvt_f32_i32_e32 v3, s6985; GCN-NEXT:    s_xor_b32 s4, s6, s7986; GCN-NEXT:    s_ashr_i32 s4, s4, 30987; GCN-NEXT:    v_rcp_iflag_f32_e32 v4, v2988; GCN-NEXT:    s_or_b32 s6, s4, 1989; GCN-NEXT:    v_bfe_i32 v0, v0, 0, 24990; GCN-NEXT:    v_ashrrev_i32_e32 v1, 31, v0991; GCN-NEXT:    v_mul_f32_e32 v4, v3, v4992; GCN-NEXT:    v_trunc_f32_e32 v4, v4993; GCN-NEXT:    v_mad_f32 v3, -v4, v2, v3994; GCN-NEXT:    v_cvt_i32_f32_e32 v4, v4995; GCN-NEXT:    v_cmp_ge_f32_e64 s[4:5], |v3|, |v2|996; GCN-NEXT:    s_and_b64 s[4:5], s[4:5], exec997; GCN-NEXT:    s_cselect_b32 s4, s6, 0998; GCN-NEXT:    v_add_i32_e32 v2, vcc, s4, v4999; GCN-NEXT:    v_bfe_i32 v2, v2, 0, 241000; GCN-NEXT:    v_ashrrev_i32_e32 v3, 31, v21001; GCN-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 01002; GCN-NEXT:    s_endpgm1003;1004; GCN-IR-LABEL: s_test_sdiv24_v2i64:1005; GCN-IR:       ; %bb.0:1006; GCN-IR-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0xd1007; GCN-IR-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x91008; GCN-IR-NEXT:    s_mov_b32 s3, 0xf0001009; GCN-IR-NEXT:    s_mov_b32 s2, -11010; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)1011; GCN-IR-NEXT:    s_ashr_i32 s4, s13, 81012; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v0, s41013; GCN-IR-NEXT:    s_ashr_i32 s5, s9, 81014; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v1, s51015; GCN-IR-NEXT:    s_xor_b32 s4, s5, s41016; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v2, v01017; GCN-IR-NEXT:    s_ashr_i32 s4, s4, 301018; GCN-IR-NEXT:    s_ashr_i32 s6, s11, 81019; GCN-IR-NEXT:    s_ashr_i32 s7, s15, 81020; GCN-IR-NEXT:    v_mul_f32_e32 v2, v1, v21021; GCN-IR-NEXT:    v_trunc_f32_e32 v2, v21022; GCN-IR-NEXT:    v_mad_f32 v1, -v2, v0, v11023; GCN-IR-NEXT:    v_cvt_i32_f32_e32 v2, v21024; GCN-IR-NEXT:    s_or_b32 s8, s4, 11025; GCN-IR-NEXT:    v_cmp_ge_f32_e64 s[4:5], |v1|, |v0|1026; GCN-IR-NEXT:    s_and_b64 s[4:5], s[4:5], exec1027; GCN-IR-NEXT:    s_cselect_b32 s4, s8, 01028; GCN-IR-NEXT:    v_add_i32_e32 v0, vcc, s4, v21029; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v2, s71030; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v3, s61031; GCN-IR-NEXT:    s_xor_b32 s4, s6, s71032; GCN-IR-NEXT:    s_ashr_i32 s4, s4, 301033; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v4, v21034; GCN-IR-NEXT:    s_or_b32 s6, s4, 11035; GCN-IR-NEXT:    v_bfe_i32 v0, v0, 0, 241036; GCN-IR-NEXT:    v_ashrrev_i32_e32 v1, 31, v01037; GCN-IR-NEXT:    v_mul_f32_e32 v4, v3, v41038; GCN-IR-NEXT:    v_trunc_f32_e32 v4, v41039; GCN-IR-NEXT:    v_mad_f32 v3, -v4, v2, v31040; GCN-IR-NEXT:    v_cvt_i32_f32_e32 v4, v41041; GCN-IR-NEXT:    v_cmp_ge_f32_e64 s[4:5], |v3|, |v2|1042; GCN-IR-NEXT:    s_and_b64 s[4:5], s[4:5], exec1043; GCN-IR-NEXT:    s_cselect_b32 s4, s6, 01044; GCN-IR-NEXT:    v_add_i32_e32 v2, vcc, s4, v41045; GCN-IR-NEXT:    v_bfe_i32 v2, v2, 0, 241046; GCN-IR-NEXT:    v_ashrrev_i32_e32 v3, 31, v21047; GCN-IR-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 01048; GCN-IR-NEXT:    s_endpgm1049  %1 = ashr <2 x i64> %x, <i64 40, i64 40>1050  %2 = ashr <2 x i64> %y, <i64 40, i64 40>1051  %result = sdiv <2 x i64> %1, %21052  store <2 x i64> %result, ptr addrspace(1) %out1053  ret void1054}1055 1056define amdgpu_kernel void @s_test_sdiv24_48(ptr addrspace(1) %out, i48 %x, i48 %y) {1057; GCN-LABEL: s_test_sdiv24_48:1058; GCN:       ; %bb.0:1059; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91060; GCN-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd1061; GCN-NEXT:    s_mov_b32 s7, 0xf0001062; GCN-NEXT:    s_mov_b32 s6, -11063; GCN-NEXT:    s_waitcnt lgkmcnt(0)1064; GCN-NEXT:    s_mov_b32 s4, s01065; GCN-NEXT:    s_sext_i32_i16 s9, s91066; GCN-NEXT:    s_mov_b32 s5, s11067; GCN-NEXT:    s_lshr_b64 s[0:1], s[8:9], 241068; GCN-NEXT:    v_cvt_f32_i32_e32 v0, s01069; GCN-NEXT:    s_sext_i32_i16 s3, s31070; GCN-NEXT:    s_lshr_b64 s[2:3], s[2:3], 241071; GCN-NEXT:    v_cvt_f32_i32_e32 v1, s21072; GCN-NEXT:    v_rcp_iflag_f32_e32 v2, v01073; GCN-NEXT:    s_xor_b32 s0, s2, s01074; GCN-NEXT:    s_ashr_i32 s0, s0, 301075; GCN-NEXT:    s_or_b32 s2, s0, 11076; GCN-NEXT:    v_mul_f32_e32 v2, v1, v21077; GCN-NEXT:    v_trunc_f32_e32 v2, v21078; GCN-NEXT:    v_mad_f32 v1, -v2, v0, v11079; GCN-NEXT:    v_cvt_i32_f32_e32 v2, v21080; GCN-NEXT:    v_cmp_ge_f32_e64 s[0:1], |v1|, |v0|1081; GCN-NEXT:    s_and_b64 s[0:1], s[0:1], exec1082; GCN-NEXT:    s_cselect_b32 s0, s2, 01083; GCN-NEXT:    v_add_i32_e32 v0, vcc, s0, v21084; GCN-NEXT:    v_bfe_i32 v0, v0, 0, 241085; GCN-NEXT:    v_ashrrev_i32_e32 v1, 31, v01086; GCN-NEXT:    buffer_store_dword v0, off, s[4:7], 01087; GCN-NEXT:    buffer_store_short v1, off, s[4:7], 0 offset:41088; GCN-NEXT:    s_endpgm1089;1090; GCN-IR-LABEL: s_test_sdiv24_48:1091; GCN-IR:       ; %bb.0:1092; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91093; GCN-IR-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd1094; GCN-IR-NEXT:    s_mov_b32 s7, 0xf0001095; GCN-IR-NEXT:    s_mov_b32 s6, -11096; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)1097; GCN-IR-NEXT:    s_mov_b32 s4, s01098; GCN-IR-NEXT:    s_sext_i32_i16 s9, s91099; GCN-IR-NEXT:    s_mov_b32 s5, s11100; GCN-IR-NEXT:    s_lshr_b64 s[0:1], s[8:9], 241101; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v0, s01102; GCN-IR-NEXT:    s_sext_i32_i16 s3, s31103; GCN-IR-NEXT:    s_lshr_b64 s[2:3], s[2:3], 241104; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v1, s21105; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v2, v01106; GCN-IR-NEXT:    s_xor_b32 s0, s2, s01107; GCN-IR-NEXT:    s_ashr_i32 s0, s0, 301108; GCN-IR-NEXT:    s_or_b32 s2, s0, 11109; GCN-IR-NEXT:    v_mul_f32_e32 v2, v1, v21110; GCN-IR-NEXT:    v_trunc_f32_e32 v2, v21111; GCN-IR-NEXT:    v_mad_f32 v1, -v2, v0, v11112; GCN-IR-NEXT:    v_cvt_i32_f32_e32 v2, v21113; GCN-IR-NEXT:    v_cmp_ge_f32_e64 s[0:1], |v1|, |v0|1114; GCN-IR-NEXT:    s_and_b64 s[0:1], s[0:1], exec1115; GCN-IR-NEXT:    s_cselect_b32 s0, s2, 01116; GCN-IR-NEXT:    v_add_i32_e32 v0, vcc, s0, v21117; GCN-IR-NEXT:    v_bfe_i32 v0, v0, 0, 241118; GCN-IR-NEXT:    v_ashrrev_i32_e32 v1, 31, v01119; GCN-IR-NEXT:    buffer_store_dword v0, off, s[4:7], 01120; GCN-IR-NEXT:    buffer_store_short v1, off, s[4:7], 0 offset:41121; GCN-IR-NEXT:    s_endpgm1122  %1 = ashr i48 %x, 241123  %2 = ashr i48 %y, 241124  %result = sdiv i48 %1, %21125  store i48 %result, ptr addrspace(1) %out1126  ret void1127}1128 1129define amdgpu_kernel void @s_test_sdiv_k_num_i64(ptr addrspace(1) %out, i64 %x) {1130; GCN-LABEL: s_test_sdiv_k_num_i64:1131; GCN:       ; %bb.0:1132; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91133; GCN-NEXT:    s_waitcnt lgkmcnt(0)1134; GCN-NEXT:    s_ashr_i32 s4, s3, 311135; GCN-NEXT:    s_add_u32 s2, s2, s41136; GCN-NEXT:    s_mov_b32 s5, s41137; GCN-NEXT:    s_addc_u32 s3, s3, s41138; GCN-NEXT:    s_xor_b64 s[6:7], s[2:3], s[4:5]1139; GCN-NEXT:    v_cvt_f32_u32_e32 v0, s61140; GCN-NEXT:    v_cvt_f32_u32_e32 v1, s71141; GCN-NEXT:    s_sub_u32 s2, 0, s61142; GCN-NEXT:    s_subb_u32 s8, 0, s71143; GCN-NEXT:    v_madmk_f32 v0, v1, 0x4f800000, v01144; GCN-NEXT:    v_rcp_f32_e32 v0, v01145; GCN-NEXT:    v_mul_f32_e32 v0, 0x5f7ffffc, v01146; GCN-NEXT:    v_mul_f32_e32 v1, 0x2f800000, v01147; GCN-NEXT:    v_trunc_f32_e32 v1, v11148; GCN-NEXT:    v_madmk_f32 v0, v1, 0xcf800000, v01149; GCN-NEXT:    v_cvt_u32_f32_e32 v0, v01150; GCN-NEXT:    v_cvt_u32_f32_e32 v1, v11151; GCN-NEXT:    v_mul_hi_u32 v2, s2, v01152; GCN-NEXT:    v_readfirstlane_b32 s9, v11153; GCN-NEXT:    v_readfirstlane_b32 s3, v01154; GCN-NEXT:    s_mul_i32 s10, s2, s91155; GCN-NEXT:    v_readfirstlane_b32 s13, v21156; GCN-NEXT:    s_mul_i32 s11, s8, s31157; GCN-NEXT:    s_mul_i32 s12, s2, s31158; GCN-NEXT:    s_add_i32 s10, s13, s101159; GCN-NEXT:    v_mul_hi_u32 v3, v0, s121160; GCN-NEXT:    s_add_i32 s10, s10, s111161; GCN-NEXT:    v_mul_hi_u32 v0, v0, s101162; GCN-NEXT:    v_mul_hi_u32 v4, v1, s121163; GCN-NEXT:    v_readfirstlane_b32 s11, v31164; GCN-NEXT:    v_mul_hi_u32 v1, v1, s101165; GCN-NEXT:    s_mul_i32 s14, s3, s101166; GCN-NEXT:    s_add_u32 s11, s11, s141167; GCN-NEXT:    v_readfirstlane_b32 s14, v01168; GCN-NEXT:    s_mul_i32 s12, s9, s121169; GCN-NEXT:    s_addc_u32 s14, 0, s141170; GCN-NEXT:    v_readfirstlane_b32 s13, v41171; GCN-NEXT:    s_add_u32 s11, s11, s121172; GCN-NEXT:    v_readfirstlane_b32 s15, v11173; GCN-NEXT:    s_addc_u32 s11, s14, s131174; GCN-NEXT:    s_addc_u32 s12, s15, 01175; GCN-NEXT:    s_mul_i32 s10, s9, s101176; GCN-NEXT:    s_add_u32 s10, s11, s101177; GCN-NEXT:    s_addc_u32 s11, 0, s121178; GCN-NEXT:    s_add_u32 s10, s3, s101179; GCN-NEXT:    v_mov_b32_e32 v0, s101180; GCN-NEXT:    v_mul_hi_u32 v0, s2, v01181; GCN-NEXT:    s_addc_u32 s9, s9, s111182; GCN-NEXT:    s_mul_i32 s11, s2, s91183; GCN-NEXT:    s_mul_i32 s8, s8, s101184; GCN-NEXT:    v_readfirstlane_b32 s12, v01185; GCN-NEXT:    s_add_i32 s11, s12, s111186; GCN-NEXT:    s_mul_i32 s2, s2, s101187; GCN-NEXT:    s_add_i32 s8, s11, s81188; GCN-NEXT:    v_mov_b32_e32 v2, s21189; GCN-NEXT:    v_mov_b32_e32 v0, s81190; GCN-NEXT:    v_mul_hi_u32 v3, s9, v21191; GCN-NEXT:    v_mul_hi_u32 v2, s10, v21192; GCN-NEXT:    v_mul_hi_u32 v1, s9, v01193; GCN-NEXT:    v_mul_hi_u32 v0, s10, v01194; GCN-NEXT:    s_mul_i32 s12, s10, s81195; GCN-NEXT:    v_readfirstlane_b32 s14, v21196; GCN-NEXT:    s_add_u32 s12, s14, s121197; GCN-NEXT:    v_readfirstlane_b32 s13, v01198; GCN-NEXT:    s_mul_i32 s2, s9, s21199; GCN-NEXT:    s_addc_u32 s13, 0, s131200; GCN-NEXT:    v_readfirstlane_b32 s11, v31201; GCN-NEXT:    s_add_u32 s2, s12, s21202; GCN-NEXT:    s_addc_u32 s2, s13, s111203; GCN-NEXT:    v_readfirstlane_b32 s11, v11204; GCN-NEXT:    s_addc_u32 s11, s11, 01205; GCN-NEXT:    s_mul_i32 s8, s9, s81206; GCN-NEXT:    s_add_u32 s2, s2, s81207; GCN-NEXT:    s_addc_u32 s8, 0, s111208; GCN-NEXT:    s_add_u32 s2, s10, s21209; GCN-NEXT:    s_addc_u32 s8, s9, s81210; GCN-NEXT:    v_mul_hi_u32 v1, s2, 241211; GCN-NEXT:    v_mul_hi_u32 v0, s8, 241212; GCN-NEXT:    s_mul_i32 s8, s8, 241213; GCN-NEXT:    s_mov_b32 s3, 0xf0001214; GCN-NEXT:    v_readfirstlane_b32 s10, v11215; GCN-NEXT:    v_readfirstlane_b32 s9, v01216; GCN-NEXT:    s_add_u32 s8, s10, s81217; GCN-NEXT:    s_addc_u32 s10, 0, s91218; GCN-NEXT:    v_mov_b32_e32 v0, s101219; GCN-NEXT:    v_mul_hi_u32 v0, s6, v01220; GCN-NEXT:    s_mul_i32 s8, s7, s101221; GCN-NEXT:    s_mov_b32 s2, -11222; GCN-NEXT:    v_readfirstlane_b32 s9, v01223; GCN-NEXT:    s_add_i32 s11, s9, s81224; GCN-NEXT:    s_sub_i32 s12, 0, s111225; GCN-NEXT:    s_mul_i32 s8, s6, s101226; GCN-NEXT:    s_sub_u32 s13, 24, s81227; GCN-NEXT:    s_cselect_b64 s[8:9], -1, 01228; GCN-NEXT:    s_subb_u32 s12, s12, s71229; GCN-NEXT:    s_sub_u32 s14, s13, s61230; GCN-NEXT:    s_subb_u32 s12, s12, 01231; GCN-NEXT:    s_cmp_ge_u32 s12, s71232; GCN-NEXT:    s_cselect_b32 s15, -1, 01233; GCN-NEXT:    s_cmp_ge_u32 s14, s61234; GCN-NEXT:    s_cselect_b32 s14, -1, 01235; GCN-NEXT:    s_cmp_eq_u32 s12, s71236; GCN-NEXT:    s_cselect_b32 s12, s14, s151237; GCN-NEXT:    s_add_u32 s14, s10, 11238; GCN-NEXT:    s_addc_u32 s15, 0, 01239; GCN-NEXT:    s_add_u32 s16, s10, 21240; GCN-NEXT:    s_addc_u32 s17, 0, 01241; GCN-NEXT:    s_cmp_lg_u32 s12, 01242; GCN-NEXT:    s_cselect_b32 s12, s16, s141243; GCN-NEXT:    s_cselect_b32 s14, s17, s151244; GCN-NEXT:    s_or_b32 s8, s8, s91245; GCN-NEXT:    s_subb_u32 s8, 0, s111246; GCN-NEXT:    s_cmp_ge_u32 s8, s71247; GCN-NEXT:    s_cselect_b32 s9, -1, 01248; GCN-NEXT:    s_cmp_ge_u32 s13, s61249; GCN-NEXT:    s_cselect_b32 s6, -1, 01250; GCN-NEXT:    s_cmp_eq_u32 s8, s71251; GCN-NEXT:    s_cselect_b32 s6, s6, s91252; GCN-NEXT:    s_cmp_lg_u32 s6, 01253; GCN-NEXT:    s_cselect_b32 s7, s14, 01254; GCN-NEXT:    s_cselect_b32 s6, s12, s101255; GCN-NEXT:    s_xor_b64 s[6:7], s[6:7], s[4:5]1256; GCN-NEXT:    s_sub_u32 s6, s6, s41257; GCN-NEXT:    s_subb_u32 s7, s7, s41258; GCN-NEXT:    v_mov_b32_e32 v0, s61259; GCN-NEXT:    v_mov_b32_e32 v1, s71260; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 01261; GCN-NEXT:    s_endpgm1262;1263; GCN-IR-LABEL: s_test_sdiv_k_num_i64:1264; GCN-IR:       ; %bb.0: ; %_udiv-special-cases1265; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91266; GCN-IR-NEXT:    s_mov_b64 s[6:7], 01267; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)1268; GCN-IR-NEXT:    s_ashr_i32 s4, s3, 311269; GCN-IR-NEXT:    s_mov_b32 s5, s41270; GCN-IR-NEXT:    s_xor_b64 s[2:3], s[2:3], s[4:5]1271; GCN-IR-NEXT:    s_sub_u32 s2, s2, s41272; GCN-IR-NEXT:    s_subb_u32 s3, s3, s41273; GCN-IR-NEXT:    s_flbit_i32_b64 s16, s[2:3]1274; GCN-IR-NEXT:    s_add_u32 s10, s16, 0xffffffc51275; GCN-IR-NEXT:    s_addc_u32 s11, 0, -11276; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[8:9], s[2:3], 01277; GCN-IR-NEXT:    v_cmp_gt_u64_e64 s[12:13], s[10:11], 631278; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[14:15], s[10:11], 631279; GCN-IR-NEXT:    s_or_b64 s[12:13], s[8:9], s[12:13]1280; GCN-IR-NEXT:    s_and_b64 s[8:9], s[12:13], exec1281; GCN-IR-NEXT:    s_cselect_b32 s8, 0, 241282; GCN-IR-NEXT:    s_or_b64 s[12:13], s[12:13], s[14:15]1283; GCN-IR-NEXT:    s_andn2_b64 vcc, exec, s[12:13]1284; GCN-IR-NEXT:    s_mov_b32 s9, 01285; GCN-IR-NEXT:    s_cbranch_vccz .LBB10_51286; GCN-IR-NEXT:  ; %bb.1: ; %udiv-bb11287; GCN-IR-NEXT:    s_add_u32 s12, s10, 11288; GCN-IR-NEXT:    s_addc_u32 s8, s11, 01289; GCN-IR-NEXT:    s_cselect_b64 s[8:9], -1, 01290; GCN-IR-NEXT:    s_sub_i32 s10, 63, s101291; GCN-IR-NEXT:    s_andn2_b64 vcc, exec, s[8:9]1292; GCN-IR-NEXT:    s_lshl_b64 s[8:9], 24, s101293; GCN-IR-NEXT:    s_cbranch_vccz .LBB10_41294; GCN-IR-NEXT:  ; %bb.2: ; %udiv-preheader1295; GCN-IR-NEXT:    s_lshr_b64 s[12:13], 24, s121296; GCN-IR-NEXT:    s_add_u32 s14, s2, -11297; GCN-IR-NEXT:    s_addc_u32 s15, s3, -11298; GCN-IR-NEXT:    s_sub_u32 s16, 58, s161299; GCN-IR-NEXT:    s_subb_u32 s17, 0, 01300; GCN-IR-NEXT:    s_mov_b64 s[10:11], 01301; GCN-IR-NEXT:    s_mov_b32 s7, 01302; GCN-IR-NEXT:  .LBB10_3: ; %udiv-do-while1303; GCN-IR-NEXT:    ; =>This Inner Loop Header: Depth=11304; GCN-IR-NEXT:    s_lshl_b64 s[12:13], s[12:13], 11305; GCN-IR-NEXT:    s_lshr_b32 s6, s9, 311306; GCN-IR-NEXT:    s_lshl_b64 s[8:9], s[8:9], 11307; GCN-IR-NEXT:    s_or_b64 s[12:13], s[12:13], s[6:7]1308; GCN-IR-NEXT:    s_or_b64 s[8:9], s[10:11], s[8:9]1309; GCN-IR-NEXT:    s_sub_u32 s6, s14, s121310; GCN-IR-NEXT:    s_subb_u32 s6, s15, s131311; GCN-IR-NEXT:    s_ashr_i32 s10, s6, 311312; GCN-IR-NEXT:    s_mov_b32 s11, s101313; GCN-IR-NEXT:    s_and_b32 s6, s10, 11314; GCN-IR-NEXT:    s_and_b64 s[18:19], s[10:11], s[2:3]1315; GCN-IR-NEXT:    s_sub_u32 s12, s12, s181316; GCN-IR-NEXT:    s_subb_u32 s13, s13, s191317; GCN-IR-NEXT:    s_add_u32 s16, s16, 11318; GCN-IR-NEXT:    s_addc_u32 s17, s17, 01319; GCN-IR-NEXT:    s_cselect_b64 s[18:19], -1, 01320; GCN-IR-NEXT:    s_mov_b64 s[10:11], s[6:7]1321; GCN-IR-NEXT:    s_and_b64 vcc, exec, s[18:19]1322; GCN-IR-NEXT:    s_cbranch_vccz .LBB10_31323; GCN-IR-NEXT:  .LBB10_4: ; %Flow61324; GCN-IR-NEXT:    s_lshl_b64 s[2:3], s[8:9], 11325; GCN-IR-NEXT:    s_or_b64 s[8:9], s[6:7], s[2:3]1326; GCN-IR-NEXT:  .LBB10_5: ; %udiv-end1327; GCN-IR-NEXT:    s_xor_b64 s[6:7], s[8:9], s[4:5]1328; GCN-IR-NEXT:    s_sub_u32 s4, s6, s41329; GCN-IR-NEXT:    s_subb_u32 s5, s7, s51330; GCN-IR-NEXT:    v_mov_b32_e32 v0, s41331; GCN-IR-NEXT:    s_mov_b32 s3, 0xf0001332; GCN-IR-NEXT:    s_mov_b32 s2, -11333; GCN-IR-NEXT:    v_mov_b32_e32 v1, s51334; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 01335; GCN-IR-NEXT:    s_endpgm1336  %result = sdiv i64 24, %x1337  store i64 %result, ptr addrspace(1) %out1338  ret void1339}1340 1341define i64 @v_test_sdiv_k_num_i64(i64 %x) {1342; GCN-LABEL: v_test_sdiv_k_num_i64:1343; GCN:       ; %bb.0:1344; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1345; GCN-NEXT:    v_ashrrev_i32_e32 v2, 31, v11346; GCN-NEXT:    v_add_i32_e32 v0, vcc, v0, v21347; GCN-NEXT:    v_addc_u32_e32 v1, vcc, v1, v2, vcc1348; GCN-NEXT:    v_xor_b32_e32 v1, v1, v21349; GCN-NEXT:    v_xor_b32_e32 v0, v0, v21350; GCN-NEXT:    v_cvt_f32_u32_e32 v3, v01351; GCN-NEXT:    v_cvt_f32_u32_e32 v4, v11352; GCN-NEXT:    v_sub_i32_e32 v5, vcc, 0, v01353; GCN-NEXT:    v_subb_u32_e32 v6, vcc, 0, v1, vcc1354; GCN-NEXT:    v_madmk_f32 v3, v4, 0x4f800000, v31355; GCN-NEXT:    v_rcp_f32_e32 v3, v31356; GCN-NEXT:    v_mul_f32_e32 v3, 0x5f7ffffc, v31357; GCN-NEXT:    v_mul_f32_e32 v4, 0x2f800000, v31358; GCN-NEXT:    v_trunc_f32_e32 v4, v41359; GCN-NEXT:    v_madmk_f32 v3, v4, 0xcf800000, v31360; GCN-NEXT:    v_cvt_u32_f32_e32 v3, v31361; GCN-NEXT:    v_cvt_u32_f32_e32 v4, v41362; GCN-NEXT:    v_mul_hi_u32 v7, v5, v31363; GCN-NEXT:    v_mul_lo_u32 v8, v5, v41364; GCN-NEXT:    v_mul_lo_u32 v9, v6, v31365; GCN-NEXT:    v_add_i32_e32 v7, vcc, v7, v81366; GCN-NEXT:    v_mul_lo_u32 v8, v5, v31367; GCN-NEXT:    v_add_i32_e32 v7, vcc, v7, v91368; GCN-NEXT:    v_mul_lo_u32 v9, v3, v71369; GCN-NEXT:    v_mul_hi_u32 v10, v3, v81370; GCN-NEXT:    v_mul_hi_u32 v11, v3, v71371; GCN-NEXT:    v_mul_hi_u32 v12, v4, v71372; GCN-NEXT:    v_mul_lo_u32 v7, v4, v71373; GCN-NEXT:    v_add_i32_e32 v9, vcc, v10, v91374; GCN-NEXT:    v_addc_u32_e32 v10, vcc, 0, v11, vcc1375; GCN-NEXT:    v_mul_lo_u32 v11, v4, v81376; GCN-NEXT:    v_mul_hi_u32 v8, v4, v81377; GCN-NEXT:    v_add_i32_e32 v9, vcc, v9, v111378; GCN-NEXT:    v_addc_u32_e32 v8, vcc, v10, v8, vcc1379; GCN-NEXT:    v_addc_u32_e32 v9, vcc, 0, v12, vcc1380; GCN-NEXT:    v_add_i32_e32 v7, vcc, v8, v71381; GCN-NEXT:    v_addc_u32_e32 v8, vcc, 0, v9, vcc1382; GCN-NEXT:    v_add_i32_e32 v3, vcc, v3, v71383; GCN-NEXT:    v_addc_u32_e32 v4, vcc, v4, v8, vcc1384; GCN-NEXT:    v_mul_lo_u32 v7, v5, v41385; GCN-NEXT:    v_mul_hi_u32 v8, v5, v31386; GCN-NEXT:    v_mul_lo_u32 v6, v6, v31387; GCN-NEXT:    v_mul_lo_u32 v5, v5, v31388; GCN-NEXT:    v_add_i32_e32 v7, vcc, v8, v71389; GCN-NEXT:    v_add_i32_e32 v6, vcc, v7, v61390; GCN-NEXT:    v_mul_lo_u32 v9, v3, v61391; GCN-NEXT:    v_mul_hi_u32 v10, v3, v51392; GCN-NEXT:    v_mul_hi_u32 v11, v3, v61393; GCN-NEXT:    v_mul_hi_u32 v8, v4, v51394; GCN-NEXT:    v_mul_lo_u32 v5, v4, v51395; GCN-NEXT:    v_mul_hi_u32 v7, v4, v61396; GCN-NEXT:    v_add_i32_e32 v9, vcc, v10, v91397; GCN-NEXT:    v_addc_u32_e32 v10, vcc, 0, v11, vcc1398; GCN-NEXT:    v_mul_lo_u32 v6, v4, v61399; GCN-NEXT:    v_add_i32_e32 v5, vcc, v9, v51400; GCN-NEXT:    v_addc_u32_e32 v5, vcc, v10, v8, vcc1401; GCN-NEXT:    v_addc_u32_e32 v7, vcc, 0, v7, vcc1402; GCN-NEXT:    v_add_i32_e32 v5, vcc, v5, v61403; GCN-NEXT:    v_addc_u32_e32 v6, vcc, 0, v7, vcc1404; GCN-NEXT:    v_add_i32_e32 v3, vcc, v3, v51405; GCN-NEXT:    v_addc_u32_e32 v4, vcc, v4, v6, vcc1406; GCN-NEXT:    v_mul_lo_u32 v5, v4, 241407; GCN-NEXT:    v_mul_hi_u32 v3, v3, 241408; GCN-NEXT:    v_mul_hi_u32 v4, v4, 241409; GCN-NEXT:    v_add_i32_e32 v3, vcc, v3, v51410; GCN-NEXT:    v_addc_u32_e32 v3, vcc, 0, v4, vcc1411; GCN-NEXT:    v_mul_lo_u32 v4, v1, v31412; GCN-NEXT:    v_mul_hi_u32 v5, v0, v31413; GCN-NEXT:    v_add_i32_e32 v4, vcc, v5, v41414; GCN-NEXT:    v_mul_lo_u32 v5, v0, v31415; GCN-NEXT:    v_sub_i32_e32 v6, vcc, 0, v41416; GCN-NEXT:    v_sub_i32_e32 v5, vcc, 24, v51417; GCN-NEXT:    v_subb_u32_e64 v6, s[4:5], v6, v1, vcc1418; GCN-NEXT:    v_sub_i32_e64 v7, s[4:5], v5, v01419; GCN-NEXT:    v_subbrev_u32_e64 v6, s[4:5], 0, v6, s[4:5]1420; GCN-NEXT:    v_cmp_ge_u32_e64 s[4:5], v6, v11421; GCN-NEXT:    v_cndmask_b32_e64 v8, 0, -1, s[4:5]1422; GCN-NEXT:    v_cmp_ge_u32_e64 s[4:5], v7, v01423; GCN-NEXT:    v_cndmask_b32_e64 v7, 0, -1, s[4:5]1424; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], v6, v11425; GCN-NEXT:    v_cndmask_b32_e64 v6, v8, v7, s[4:5]1426; GCN-NEXT:    v_add_i32_e64 v7, s[4:5], 2, v31427; GCN-NEXT:    v_addc_u32_e64 v8, s[4:5], 0, 0, s[4:5]1428; GCN-NEXT:    v_add_i32_e64 v9, s[4:5], 1, v31429; GCN-NEXT:    v_addc_u32_e64 v10, s[4:5], 0, 0, s[4:5]1430; GCN-NEXT:    v_subb_u32_e32 v4, vcc, 0, v4, vcc1431; GCN-NEXT:    v_cmp_ne_u32_e64 s[4:5], 0, v61432; GCN-NEXT:    v_cmp_ge_u32_e32 vcc, v4, v11433; GCN-NEXT:    v_cndmask_b32_e64 v6, v10, v8, s[4:5]1434; GCN-NEXT:    v_cndmask_b32_e64 v8, 0, -1, vcc1435; GCN-NEXT:    v_cmp_ge_u32_e32 vcc, v5, v01436; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, -1, vcc1437; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v11438; GCN-NEXT:    v_cndmask_b32_e32 v0, v8, v0, vcc1439; GCN-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v01440; GCN-NEXT:    v_cndmask_b32_e64 v1, v9, v7, s[4:5]1441; GCN-NEXT:    v_cndmask_b32_e32 v0, 0, v6, vcc1442; GCN-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc1443; GCN-NEXT:    v_xor_b32_e32 v3, v0, v21444; GCN-NEXT:    v_xor_b32_e32 v0, v1, v21445; GCN-NEXT:    v_sub_i32_e32 v0, vcc, v0, v21446; GCN-NEXT:    v_subb_u32_e32 v1, vcc, v3, v2, vcc1447; GCN-NEXT:    s_setpc_b64 s[30:31]1448;1449; GCN-IR-LABEL: v_test_sdiv_k_num_i64:1450; GCN-IR:       ; %bb.0: ; %_udiv-special-cases1451; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1452; GCN-IR-NEXT:    v_ashrrev_i32_e32 v10, 31, v11453; GCN-IR-NEXT:    v_xor_b32_e32 v0, v0, v101454; GCN-IR-NEXT:    v_xor_b32_e32 v1, v1, v101455; GCN-IR-NEXT:    v_sub_i32_e32 v0, vcc, v0, v101456; GCN-IR-NEXT:    v_subb_u32_e32 v1, vcc, v1, v10, vcc1457; GCN-IR-NEXT:    v_ffbh_u32_e32 v2, v01458; GCN-IR-NEXT:    v_add_i32_e32 v2, vcc, 32, v21459; GCN-IR-NEXT:    v_ffbh_u32_e32 v3, v11460; GCN-IR-NEXT:    v_min_u32_e32 v8, v2, v31461; GCN-IR-NEXT:    v_add_i32_e32 v2, vcc, 0xffffffc5, v81462; GCN-IR-NEXT:    v_addc_u32_e64 v3, s[6:7], 0, -1, vcc1463; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[4:5], 0, v[0:1]1464; GCN-IR-NEXT:    v_cmp_lt_u64_e32 vcc, 63, v[2:3]1465; GCN-IR-NEXT:    v_cmp_ne_u64_e64 s[6:7], 63, v[2:3]1466; GCN-IR-NEXT:    s_or_b64 s[4:5], s[4:5], vcc1467; GCN-IR-NEXT:    v_cndmask_b32_e64 v4, 24, 0, s[4:5]1468; GCN-IR-NEXT:    s_xor_b64 s[4:5], s[4:5], -11469; GCN-IR-NEXT:    v_mov_b32_e32 v11, v101470; GCN-IR-NEXT:    v_mov_b32_e32 v5, 01471; GCN-IR-NEXT:    s_and_b64 s[4:5], s[4:5], s[6:7]1472; GCN-IR-NEXT:    s_and_saveexec_b64 s[6:7], s[4:5]1473; GCN-IR-NEXT:    s_cbranch_execz .LBB11_61474; GCN-IR-NEXT:  ; %bb.1: ; %udiv-bb11475; GCN-IR-NEXT:    v_add_i32_e32 v6, vcc, 1, v21476; GCN-IR-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc1477; GCN-IR-NEXT:    v_sub_i32_e64 v2, s[4:5], 63, v21478; GCN-IR-NEXT:    v_lshl_b64 v[2:3], 24, v21479; GCN-IR-NEXT:    v_mov_b32_e32 v4, 01480; GCN-IR-NEXT:    v_mov_b32_e32 v5, 01481; GCN-IR-NEXT:    s_xor_b64 s[4:5], vcc, -11482; GCN-IR-NEXT:    s_and_saveexec_b64 s[8:9], s[4:5]1483; GCN-IR-NEXT:    s_xor_b64 s[4:5], exec, s[8:9]1484; GCN-IR-NEXT:    s_cbranch_execz .LBB11_51485; GCN-IR-NEXT:  ; %bb.2: ; %udiv-preheader1486; GCN-IR-NEXT:    v_add_i32_e32 v12, vcc, -1, v01487; GCN-IR-NEXT:    v_addc_u32_e32 v13, vcc, -1, v1, vcc1488; GCN-IR-NEXT:    v_sub_i32_e32 v14, vcc, 58, v81489; GCN-IR-NEXT:    v_lshr_b64 v[6:7], 24, v61490; GCN-IR-NEXT:    v_subb_u32_e64 v15, s[8:9], 0, 0, vcc1491; GCN-IR-NEXT:    v_mov_b32_e32 v8, 01492; GCN-IR-NEXT:    s_mov_b64 s[8:9], 01493; GCN-IR-NEXT:    v_mov_b32_e32 v9, 01494; GCN-IR-NEXT:    v_mov_b32_e32 v5, 01495; GCN-IR-NEXT:  .LBB11_3: ; %udiv-do-while1496; GCN-IR-NEXT:    ; =>This Inner Loop Header: Depth=11497; GCN-IR-NEXT:    v_lshl_b64 v[6:7], v[6:7], 11498; GCN-IR-NEXT:    v_lshrrev_b32_e32 v4, 31, v31499; GCN-IR-NEXT:    v_or_b32_e32 v6, v6, v41500; GCN-IR-NEXT:    v_lshl_b64 v[2:3], v[2:3], 11501; GCN-IR-NEXT:    v_sub_i32_e32 v4, vcc, v12, v61502; GCN-IR-NEXT:    v_subb_u32_e32 v4, vcc, v13, v7, vcc1503; GCN-IR-NEXT:    v_or_b32_e32 v2, v8, v21504; GCN-IR-NEXT:    v_ashrrev_i32_e32 v8, 31, v41505; GCN-IR-NEXT:    v_or_b32_e32 v3, v9, v31506; GCN-IR-NEXT:    v_and_b32_e32 v4, 1, v81507; GCN-IR-NEXT:    v_and_b32_e32 v9, v8, v11508; GCN-IR-NEXT:    v_and_b32_e32 v8, v8, v01509; GCN-IR-NEXT:    v_sub_i32_e32 v6, vcc, v6, v81510; GCN-IR-NEXT:    v_subb_u32_e32 v7, vcc, v7, v9, vcc1511; GCN-IR-NEXT:    v_add_i32_e32 v14, vcc, 1, v141512; GCN-IR-NEXT:    v_addc_u32_e32 v15, vcc, 0, v15, vcc1513; GCN-IR-NEXT:    v_mov_b32_e32 v9, v51514; GCN-IR-NEXT:    s_or_b64 s[8:9], vcc, s[8:9]1515; GCN-IR-NEXT:    v_mov_b32_e32 v8, v41516; GCN-IR-NEXT:    s_andn2_b64 exec, exec, s[8:9]1517; GCN-IR-NEXT:    s_cbranch_execnz .LBB11_31518; GCN-IR-NEXT:  ; %bb.4: ; %Flow1519; GCN-IR-NEXT:    s_or_b64 exec, exec, s[8:9]1520; GCN-IR-NEXT:  .LBB11_5: ; %Flow41521; GCN-IR-NEXT:    s_or_b64 exec, exec, s[4:5]1522; GCN-IR-NEXT:    v_lshl_b64 v[0:1], v[2:3], 11523; GCN-IR-NEXT:    v_or_b32_e32 v5, v5, v11524; GCN-IR-NEXT:    v_or_b32_e32 v4, v4, v01525; GCN-IR-NEXT:  .LBB11_6: ; %Flow51526; GCN-IR-NEXT:    s_or_b64 exec, exec, s[6:7]1527; GCN-IR-NEXT:    v_xor_b32_e32 v0, v4, v101528; GCN-IR-NEXT:    v_xor_b32_e32 v1, v5, v111529; GCN-IR-NEXT:    v_sub_i32_e32 v0, vcc, v0, v101530; GCN-IR-NEXT:    v_subb_u32_e32 v1, vcc, v1, v11, vcc1531; GCN-IR-NEXT:    s_setpc_b64 s[30:31]1532  %result = sdiv i64 24, %x1533  ret i64 %result1534}1535 1536define i64 @v_test_sdiv_pow2_k_num_i64(i64 %x) {1537; GCN-LABEL: v_test_sdiv_pow2_k_num_i64:1538; GCN:       ; %bb.0:1539; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1540; GCN-NEXT:    v_ashrrev_i32_e32 v2, 31, v11541; GCN-NEXT:    v_add_i32_e32 v0, vcc, v0, v21542; GCN-NEXT:    v_addc_u32_e32 v1, vcc, v1, v2, vcc1543; GCN-NEXT:    v_xor_b32_e32 v1, v1, v21544; GCN-NEXT:    v_xor_b32_e32 v0, v0, v21545; GCN-NEXT:    v_cvt_f32_u32_e32 v3, v01546; GCN-NEXT:    v_cvt_f32_u32_e32 v4, v11547; GCN-NEXT:    v_sub_i32_e32 v5, vcc, 0, v01548; GCN-NEXT:    v_subb_u32_e32 v6, vcc, 0, v1, vcc1549; GCN-NEXT:    v_madmk_f32 v3, v4, 0x4f800000, v31550; GCN-NEXT:    v_rcp_f32_e32 v3, v31551; GCN-NEXT:    v_mul_f32_e32 v3, 0x5f7ffffc, v31552; GCN-NEXT:    v_mul_f32_e32 v4, 0x2f800000, v31553; GCN-NEXT:    v_trunc_f32_e32 v4, v41554; GCN-NEXT:    v_madmk_f32 v3, v4, 0xcf800000, v31555; GCN-NEXT:    v_cvt_u32_f32_e32 v3, v31556; GCN-NEXT:    v_cvt_u32_f32_e32 v4, v41557; GCN-NEXT:    v_mul_hi_u32 v7, v5, v31558; GCN-NEXT:    v_mul_lo_u32 v8, v5, v41559; GCN-NEXT:    v_mul_lo_u32 v9, v6, v31560; GCN-NEXT:    v_add_i32_e32 v7, vcc, v7, v81561; GCN-NEXT:    v_mul_lo_u32 v8, v5, v31562; GCN-NEXT:    v_add_i32_e32 v7, vcc, v7, v91563; GCN-NEXT:    v_mul_lo_u32 v9, v3, v71564; GCN-NEXT:    v_mul_hi_u32 v10, v3, v81565; GCN-NEXT:    v_mul_hi_u32 v11, v3, v71566; GCN-NEXT:    v_mul_hi_u32 v12, v4, v71567; GCN-NEXT:    v_mul_lo_u32 v7, v4, v71568; GCN-NEXT:    v_add_i32_e32 v9, vcc, v10, v91569; GCN-NEXT:    v_addc_u32_e32 v10, vcc, 0, v11, vcc1570; GCN-NEXT:    v_mul_lo_u32 v11, v4, v81571; GCN-NEXT:    v_mul_hi_u32 v8, v4, v81572; GCN-NEXT:    v_add_i32_e32 v9, vcc, v9, v111573; GCN-NEXT:    v_addc_u32_e32 v8, vcc, v10, v8, vcc1574; GCN-NEXT:    v_addc_u32_e32 v9, vcc, 0, v12, vcc1575; GCN-NEXT:    v_add_i32_e32 v7, vcc, v8, v71576; GCN-NEXT:    v_addc_u32_e32 v8, vcc, 0, v9, vcc1577; GCN-NEXT:    v_add_i32_e32 v3, vcc, v3, v71578; GCN-NEXT:    v_addc_u32_e32 v4, vcc, v4, v8, vcc1579; GCN-NEXT:    v_mul_lo_u32 v7, v5, v41580; GCN-NEXT:    v_mul_hi_u32 v8, v5, v31581; GCN-NEXT:    v_mul_lo_u32 v6, v6, v31582; GCN-NEXT:    v_mul_lo_u32 v5, v5, v31583; GCN-NEXT:    v_add_i32_e32 v7, vcc, v8, v71584; GCN-NEXT:    v_add_i32_e32 v6, vcc, v7, v61585; GCN-NEXT:    v_mul_lo_u32 v9, v3, v61586; GCN-NEXT:    v_mul_hi_u32 v10, v3, v51587; GCN-NEXT:    v_mul_hi_u32 v11, v3, v61588; GCN-NEXT:    v_mul_hi_u32 v8, v4, v51589; GCN-NEXT:    v_mul_lo_u32 v5, v4, v51590; GCN-NEXT:    v_mul_hi_u32 v7, v4, v61591; GCN-NEXT:    v_add_i32_e32 v9, vcc, v10, v91592; GCN-NEXT:    v_addc_u32_e32 v10, vcc, 0, v11, vcc1593; GCN-NEXT:    v_mul_lo_u32 v6, v4, v61594; GCN-NEXT:    v_add_i32_e32 v5, vcc, v9, v51595; GCN-NEXT:    v_addc_u32_e32 v5, vcc, v10, v8, vcc1596; GCN-NEXT:    v_addc_u32_e32 v7, vcc, 0, v7, vcc1597; GCN-NEXT:    v_add_i32_e32 v5, vcc, v5, v61598; GCN-NEXT:    v_addc_u32_e32 v6, vcc, 0, v7, vcc1599; GCN-NEXT:    v_add_i32_e32 v3, vcc, v3, v51600; GCN-NEXT:    v_addc_u32_e32 v3, vcc, v4, v6, vcc1601; GCN-NEXT:    v_lshrrev_b32_e32 v3, 17, v31602; GCN-NEXT:    v_mul_lo_u32 v4, v1, v31603; GCN-NEXT:    v_mul_hi_u32 v5, v0, v31604; GCN-NEXT:    v_add_i32_e32 v4, vcc, v5, v41605; GCN-NEXT:    v_mul_lo_u32 v5, v0, v31606; GCN-NEXT:    v_sub_i32_e32 v6, vcc, 0, v41607; GCN-NEXT:    v_sub_i32_e32 v5, vcc, 0x8000, v51608; GCN-NEXT:    v_subb_u32_e64 v6, s[4:5], v6, v1, vcc1609; GCN-NEXT:    v_sub_i32_e64 v7, s[4:5], v5, v01610; GCN-NEXT:    v_subbrev_u32_e64 v6, s[4:5], 0, v6, s[4:5]1611; GCN-NEXT:    v_cmp_ge_u32_e64 s[4:5], v6, v11612; GCN-NEXT:    v_cndmask_b32_e64 v8, 0, -1, s[4:5]1613; GCN-NEXT:    v_cmp_ge_u32_e64 s[4:5], v7, v01614; GCN-NEXT:    v_cndmask_b32_e64 v7, 0, -1, s[4:5]1615; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], v6, v11616; GCN-NEXT:    v_cndmask_b32_e64 v6, v8, v7, s[4:5]1617; GCN-NEXT:    v_add_i32_e64 v7, s[4:5], 2, v31618; GCN-NEXT:    v_addc_u32_e64 v8, s[4:5], 0, 0, s[4:5]1619; GCN-NEXT:    v_add_i32_e64 v9, s[4:5], 1, v31620; GCN-NEXT:    v_addc_u32_e64 v10, s[4:5], 0, 0, s[4:5]1621; GCN-NEXT:    v_subb_u32_e32 v4, vcc, 0, v4, vcc1622; GCN-NEXT:    v_cmp_ne_u32_e64 s[4:5], 0, v61623; GCN-NEXT:    v_cmp_ge_u32_e32 vcc, v4, v11624; GCN-NEXT:    v_cndmask_b32_e64 v6, v10, v8, s[4:5]1625; GCN-NEXT:    v_cndmask_b32_e64 v8, 0, -1, vcc1626; GCN-NEXT:    v_cmp_ge_u32_e32 vcc, v5, v01627; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, -1, vcc1628; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v11629; GCN-NEXT:    v_cndmask_b32_e32 v0, v8, v0, vcc1630; GCN-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v01631; GCN-NEXT:    v_cndmask_b32_e64 v1, v9, v7, s[4:5]1632; GCN-NEXT:    v_cndmask_b32_e32 v0, 0, v6, vcc1633; GCN-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc1634; GCN-NEXT:    v_xor_b32_e32 v3, v0, v21635; GCN-NEXT:    v_xor_b32_e32 v0, v1, v21636; GCN-NEXT:    v_sub_i32_e32 v0, vcc, v0, v21637; GCN-NEXT:    v_subb_u32_e32 v1, vcc, v3, v2, vcc1638; GCN-NEXT:    s_setpc_b64 s[30:31]1639;1640; GCN-IR-LABEL: v_test_sdiv_pow2_k_num_i64:1641; GCN-IR:       ; %bb.0: ; %_udiv-special-cases1642; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1643; GCN-IR-NEXT:    v_ashrrev_i32_e32 v10, 31, v11644; GCN-IR-NEXT:    v_xor_b32_e32 v0, v0, v101645; GCN-IR-NEXT:    v_xor_b32_e32 v1, v1, v101646; GCN-IR-NEXT:    v_sub_i32_e32 v0, vcc, v0, v101647; GCN-IR-NEXT:    v_subb_u32_e32 v1, vcc, v1, v10, vcc1648; GCN-IR-NEXT:    v_ffbh_u32_e32 v2, v01649; GCN-IR-NEXT:    v_add_i32_e32 v2, vcc, 32, v21650; GCN-IR-NEXT:    v_ffbh_u32_e32 v3, v11651; GCN-IR-NEXT:    v_min_u32_e32 v8, v2, v31652; GCN-IR-NEXT:    v_add_i32_e32 v2, vcc, 0xffffffd0, v81653; GCN-IR-NEXT:    v_addc_u32_e64 v3, s[6:7], 0, -1, vcc1654; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[4:5], 0, v[0:1]1655; GCN-IR-NEXT:    v_cmp_lt_u64_e32 vcc, 63, v[2:3]1656; GCN-IR-NEXT:    v_cmp_ne_u64_e64 s[6:7], 63, v[2:3]1657; GCN-IR-NEXT:    v_mov_b32_e32 v4, 0x80001658; GCN-IR-NEXT:    s_or_b64 s[4:5], s[4:5], vcc1659; GCN-IR-NEXT:    v_cndmask_b32_e64 v4, v4, 0, s[4:5]1660; GCN-IR-NEXT:    s_xor_b64 s[4:5], s[4:5], -11661; GCN-IR-NEXT:    v_mov_b32_e32 v11, v101662; GCN-IR-NEXT:    v_mov_b32_e32 v5, 01663; GCN-IR-NEXT:    s_and_b64 s[4:5], s[4:5], s[6:7]1664; GCN-IR-NEXT:    s_and_saveexec_b64 s[6:7], s[4:5]1665; GCN-IR-NEXT:    s_cbranch_execz .LBB12_61666; GCN-IR-NEXT:  ; %bb.1: ; %udiv-bb11667; GCN-IR-NEXT:    v_add_i32_e32 v6, vcc, 1, v21668; GCN-IR-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc1669; GCN-IR-NEXT:    v_sub_i32_e64 v2, s[4:5], 63, v21670; GCN-IR-NEXT:    s_mov_b64 s[8:9], 0x80001671; GCN-IR-NEXT:    v_lshl_b64 v[2:3], s[8:9], v21672; GCN-IR-NEXT:    v_mov_b32_e32 v4, 01673; GCN-IR-NEXT:    v_mov_b32_e32 v5, 01674; GCN-IR-NEXT:    s_xor_b64 s[4:5], vcc, -11675; GCN-IR-NEXT:    s_and_saveexec_b64 s[10:11], s[4:5]1676; GCN-IR-NEXT:    s_xor_b64 s[4:5], exec, s[10:11]1677; GCN-IR-NEXT:    s_cbranch_execz .LBB12_51678; GCN-IR-NEXT:  ; %bb.2: ; %udiv-preheader1679; GCN-IR-NEXT:    v_add_i32_e32 v12, vcc, -1, v01680; GCN-IR-NEXT:    v_addc_u32_e32 v13, vcc, -1, v1, vcc1681; GCN-IR-NEXT:    v_sub_i32_e32 v14, vcc, 47, v81682; GCN-IR-NEXT:    v_lshr_b64 v[6:7], s[8:9], v61683; GCN-IR-NEXT:    v_subb_u32_e64 v15, s[8:9], 0, 0, vcc1684; GCN-IR-NEXT:    v_mov_b32_e32 v8, 01685; GCN-IR-NEXT:    s_mov_b64 s[8:9], 01686; GCN-IR-NEXT:    v_mov_b32_e32 v9, 01687; GCN-IR-NEXT:    v_mov_b32_e32 v5, 01688; GCN-IR-NEXT:  .LBB12_3: ; %udiv-do-while1689; GCN-IR-NEXT:    ; =>This Inner Loop Header: Depth=11690; GCN-IR-NEXT:    v_lshl_b64 v[6:7], v[6:7], 11691; GCN-IR-NEXT:    v_lshrrev_b32_e32 v4, 31, v31692; GCN-IR-NEXT:    v_or_b32_e32 v6, v6, v41693; GCN-IR-NEXT:    v_lshl_b64 v[2:3], v[2:3], 11694; GCN-IR-NEXT:    v_sub_i32_e32 v4, vcc, v12, v61695; GCN-IR-NEXT:    v_subb_u32_e32 v4, vcc, v13, v7, vcc1696; GCN-IR-NEXT:    v_or_b32_e32 v2, v8, v21697; GCN-IR-NEXT:    v_ashrrev_i32_e32 v8, 31, v41698; GCN-IR-NEXT:    v_or_b32_e32 v3, v9, v31699; GCN-IR-NEXT:    v_and_b32_e32 v4, 1, v81700; GCN-IR-NEXT:    v_and_b32_e32 v9, v8, v11701; GCN-IR-NEXT:    v_and_b32_e32 v8, v8, v01702; GCN-IR-NEXT:    v_sub_i32_e32 v6, vcc, v6, v81703; GCN-IR-NEXT:    v_subb_u32_e32 v7, vcc, v7, v9, vcc1704; GCN-IR-NEXT:    v_add_i32_e32 v14, vcc, 1, v141705; GCN-IR-NEXT:    v_addc_u32_e32 v15, vcc, 0, v15, vcc1706; GCN-IR-NEXT:    v_mov_b32_e32 v9, v51707; GCN-IR-NEXT:    s_or_b64 s[8:9], vcc, s[8:9]1708; GCN-IR-NEXT:    v_mov_b32_e32 v8, v41709; GCN-IR-NEXT:    s_andn2_b64 exec, exec, s[8:9]1710; GCN-IR-NEXT:    s_cbranch_execnz .LBB12_31711; GCN-IR-NEXT:  ; %bb.4: ; %Flow1712; GCN-IR-NEXT:    s_or_b64 exec, exec, s[8:9]1713; GCN-IR-NEXT:  .LBB12_5: ; %Flow41714; GCN-IR-NEXT:    s_or_b64 exec, exec, s[4:5]1715; GCN-IR-NEXT:    v_lshl_b64 v[0:1], v[2:3], 11716; GCN-IR-NEXT:    v_or_b32_e32 v5, v5, v11717; GCN-IR-NEXT:    v_or_b32_e32 v4, v4, v01718; GCN-IR-NEXT:  .LBB12_6: ; %Flow51719; GCN-IR-NEXT:    s_or_b64 exec, exec, s[6:7]1720; GCN-IR-NEXT:    v_xor_b32_e32 v0, v4, v101721; GCN-IR-NEXT:    v_xor_b32_e32 v1, v5, v111722; GCN-IR-NEXT:    v_sub_i32_e32 v0, vcc, v0, v101723; GCN-IR-NEXT:    v_subb_u32_e32 v1, vcc, v1, v11, vcc1724; GCN-IR-NEXT:    s_setpc_b64 s[30:31]1725  %result = sdiv i64 32768, %x1726  ret i64 %result1727}1728 1729define i64 @v_test_sdiv_pow2_k_den_i64(i64 %x) {1730; GCN-LABEL: v_test_sdiv_pow2_k_den_i64:1731; GCN:       ; %bb.0:1732; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1733; GCN-NEXT:    v_ashrrev_i32_e32 v2, 31, v11734; GCN-NEXT:    v_lshrrev_b32_e32 v2, 17, v21735; GCN-NEXT:    v_add_i32_e32 v0, vcc, v0, v21736; GCN-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1737; GCN-NEXT:    v_ashr_i64 v[0:1], v[0:1], 151738; GCN-NEXT:    s_setpc_b64 s[30:31]1739;1740; GCN-IR-LABEL: v_test_sdiv_pow2_k_den_i64:1741; GCN-IR:       ; %bb.0: ; %_udiv-special-cases1742; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1743; GCN-IR-NEXT:    v_ashrrev_i32_e32 v8, 31, v11744; GCN-IR-NEXT:    v_xor_b32_e32 v0, v0, v81745; GCN-IR-NEXT:    v_xor_b32_e32 v1, v1, v81746; GCN-IR-NEXT:    v_sub_i32_e32 v4, vcc, v0, v81747; GCN-IR-NEXT:    v_subb_u32_e32 v5, vcc, v1, v8, vcc1748; GCN-IR-NEXT:    v_ffbh_u32_e32 v0, v41749; GCN-IR-NEXT:    v_add_i32_e64 v0, s[4:5], 32, v01750; GCN-IR-NEXT:    v_ffbh_u32_e32 v1, v51751; GCN-IR-NEXT:    v_min_u32_e32 v6, v0, v11752; GCN-IR-NEXT:    v_sub_i32_e64 v0, s[4:5], 48, v61753; GCN-IR-NEXT:    v_subb_u32_e64 v1, s[4:5], 0, 0, s[4:5]1754; GCN-IR-NEXT:    v_cmp_eq_u64_e32 vcc, 0, v[4:5]1755; GCN-IR-NEXT:    v_cmp_lt_u64_e64 s[4:5], 63, v[0:1]1756; GCN-IR-NEXT:    v_mov_b32_e32 v9, v81757; GCN-IR-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1758; GCN-IR-NEXT:    v_cmp_ne_u64_e32 vcc, 63, v[0:1]1759; GCN-IR-NEXT:    s_xor_b64 s[6:7], s[4:5], -11760; GCN-IR-NEXT:    v_cndmask_b32_e64 v3, v5, 0, s[4:5]1761; GCN-IR-NEXT:    v_cndmask_b32_e64 v2, v4, 0, s[4:5]1762; GCN-IR-NEXT:    s_and_b64 s[4:5], s[6:7], vcc1763; GCN-IR-NEXT:    s_and_saveexec_b64 s[6:7], s[4:5]1764; GCN-IR-NEXT:    s_cbranch_execz .LBB13_61765; GCN-IR-NEXT:  ; %bb.1: ; %udiv-bb11766; GCN-IR-NEXT:    v_add_i32_e32 v7, vcc, 1, v01767; GCN-IR-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1768; GCN-IR-NEXT:    v_sub_i32_e64 v0, s[4:5], 63, v01769; GCN-IR-NEXT:    v_lshl_b64 v[0:1], v[4:5], v01770; GCN-IR-NEXT:    v_mov_b32_e32 v2, 01771; GCN-IR-NEXT:    v_mov_b32_e32 v3, 01772; GCN-IR-NEXT:    s_xor_b64 s[4:5], vcc, -11773; GCN-IR-NEXT:    s_and_saveexec_b64 s[8:9], s[4:5]1774; GCN-IR-NEXT:    s_xor_b64 s[4:5], exec, s[8:9]1775; GCN-IR-NEXT:    s_cbranch_execz .LBB13_51776; GCN-IR-NEXT:  ; %bb.2: ; %udiv-preheader1777; GCN-IR-NEXT:    v_add_i32_e32 v10, vcc, 0xffffffcf, v61778; GCN-IR-NEXT:    v_lshr_b64 v[4:5], v[4:5], v71779; GCN-IR-NEXT:    v_addc_u32_e64 v11, s[8:9], 0, -1, vcc1780; GCN-IR-NEXT:    v_mov_b32_e32 v6, 01781; GCN-IR-NEXT:    s_mov_b64 s[8:9], 01782; GCN-IR-NEXT:    v_mov_b32_e32 v7, 01783; GCN-IR-NEXT:    v_mov_b32_e32 v3, 01784; GCN-IR-NEXT:    s_movk_i32 s10, 0x7fff1785; GCN-IR-NEXT:  .LBB13_3: ; %udiv-do-while1786; GCN-IR-NEXT:    ; =>This Inner Loop Header: Depth=11787; GCN-IR-NEXT:    v_lshl_b64 v[4:5], v[4:5], 11788; GCN-IR-NEXT:    v_lshrrev_b32_e32 v2, 31, v11789; GCN-IR-NEXT:    v_or_b32_e32 v4, v4, v21790; GCN-IR-NEXT:    v_lshl_b64 v[0:1], v[0:1], 11791; GCN-IR-NEXT:    v_sub_i32_e32 v2, vcc, s10, v41792; GCN-IR-NEXT:    v_subb_u32_e32 v2, vcc, 0, v5, vcc1793; GCN-IR-NEXT:    v_or_b32_e32 v0, v6, v01794; GCN-IR-NEXT:    v_ashrrev_i32_e32 v6, 31, v21795; GCN-IR-NEXT:    v_and_b32_e32 v2, 1, v61796; GCN-IR-NEXT:    v_and_b32_e32 v6, 0x8000, v61797; GCN-IR-NEXT:    v_sub_i32_e32 v4, vcc, v4, v61798; GCN-IR-NEXT:    v_subbrev_u32_e32 v5, vcc, 0, v5, vcc1799; GCN-IR-NEXT:    v_add_i32_e32 v10, vcc, 1, v101800; GCN-IR-NEXT:    v_or_b32_e32 v1, v7, v11801; GCN-IR-NEXT:    v_addc_u32_e32 v11, vcc, 0, v11, vcc1802; GCN-IR-NEXT:    v_mov_b32_e32 v7, v31803; GCN-IR-NEXT:    s_or_b64 s[8:9], vcc, s[8:9]1804; GCN-IR-NEXT:    v_mov_b32_e32 v6, v21805; GCN-IR-NEXT:    s_andn2_b64 exec, exec, s[8:9]1806; GCN-IR-NEXT:    s_cbranch_execnz .LBB13_31807; GCN-IR-NEXT:  ; %bb.4: ; %Flow1808; GCN-IR-NEXT:    s_or_b64 exec, exec, s[8:9]1809; GCN-IR-NEXT:  .LBB13_5: ; %Flow41810; GCN-IR-NEXT:    s_or_b64 exec, exec, s[4:5]1811; GCN-IR-NEXT:    v_lshl_b64 v[0:1], v[0:1], 11812; GCN-IR-NEXT:    v_or_b32_e32 v3, v3, v11813; GCN-IR-NEXT:    v_or_b32_e32 v2, v2, v01814; GCN-IR-NEXT:  .LBB13_6: ; %Flow51815; GCN-IR-NEXT:    s_or_b64 exec, exec, s[6:7]1816; GCN-IR-NEXT:    v_xor_b32_e32 v0, v2, v81817; GCN-IR-NEXT:    v_xor_b32_e32 v1, v3, v91818; GCN-IR-NEXT:    v_sub_i32_e32 v0, vcc, v0, v81819; GCN-IR-NEXT:    v_subb_u32_e32 v1, vcc, v1, v9, vcc1820; GCN-IR-NEXT:    s_setpc_b64 s[30:31]1821  %result = sdiv i64 %x, 327681822  ret i64 %result1823}1824 1825define amdgpu_kernel void @s_test_sdiv24_k_num_i64(ptr addrspace(1) %out, i64 %x) {1826; GCN-LABEL: s_test_sdiv24_k_num_i64:1827; GCN:       ; %bb.0:1828; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91829; GCN-NEXT:    s_mov_b32 s7, 0xf0001830; GCN-NEXT:    s_mov_b32 s6, -11831; GCN-NEXT:    s_waitcnt lgkmcnt(0)1832; GCN-NEXT:    s_ashr_i32 s2, s3, 81833; GCN-NEXT:    v_cvt_f32_i32_e32 v0, s21834; GCN-NEXT:    s_mov_b32 s2, 0x41c000001835; GCN-NEXT:    s_mov_b32 s4, s01836; GCN-NEXT:    s_ashr_i32 s0, s3, 311837; GCN-NEXT:    v_rcp_iflag_f32_e32 v1, v01838; GCN-NEXT:    s_mov_b32 s5, s11839; GCN-NEXT:    s_or_b32 s3, s0, 11840; GCN-NEXT:    v_mul_f32_e32 v1, 0x41c00000, v11841; GCN-NEXT:    v_trunc_f32_e32 v1, v11842; GCN-NEXT:    v_mad_f32 v2, -v1, v0, s21843; GCN-NEXT:    v_cvt_i32_f32_e32 v1, v11844; GCN-NEXT:    v_cmp_ge_f32_e64 s[0:1], |v2|, |v0|1845; GCN-NEXT:    s_and_b64 s[0:1], s[0:1], exec1846; GCN-NEXT:    s_cselect_b32 s0, s3, 01847; GCN-NEXT:    v_add_i32_e32 v0, vcc, s0, v11848; GCN-NEXT:    v_bfe_i32 v0, v0, 0, 241849; GCN-NEXT:    v_ashrrev_i32_e32 v1, 31, v01850; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 01851; GCN-NEXT:    s_endpgm1852;1853; GCN-IR-LABEL: s_test_sdiv24_k_num_i64:1854; GCN-IR:       ; %bb.0:1855; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91856; GCN-IR-NEXT:    s_mov_b32 s7, 0xf0001857; GCN-IR-NEXT:    s_mov_b32 s6, -11858; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)1859; GCN-IR-NEXT:    s_ashr_i32 s2, s3, 81860; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v0, s21861; GCN-IR-NEXT:    s_mov_b32 s2, 0x41c000001862; GCN-IR-NEXT:    s_mov_b32 s4, s01863; GCN-IR-NEXT:    s_ashr_i32 s0, s3, 311864; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v1, v01865; GCN-IR-NEXT:    s_mov_b32 s5, s11866; GCN-IR-NEXT:    s_or_b32 s3, s0, 11867; GCN-IR-NEXT:    v_mul_f32_e32 v1, 0x41c00000, v11868; GCN-IR-NEXT:    v_trunc_f32_e32 v1, v11869; GCN-IR-NEXT:    v_mad_f32 v2, -v1, v0, s21870; GCN-IR-NEXT:    v_cvt_i32_f32_e32 v1, v11871; GCN-IR-NEXT:    v_cmp_ge_f32_e64 s[0:1], |v2|, |v0|1872; GCN-IR-NEXT:    s_and_b64 s[0:1], s[0:1], exec1873; GCN-IR-NEXT:    s_cselect_b32 s0, s3, 01874; GCN-IR-NEXT:    v_add_i32_e32 v0, vcc, s0, v11875; GCN-IR-NEXT:    v_bfe_i32 v0, v0, 0, 241876; GCN-IR-NEXT:    v_ashrrev_i32_e32 v1, 31, v01877; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 01878; GCN-IR-NEXT:    s_endpgm1879  %x.shr = ashr i64 %x, 401880  %result = sdiv i64 24, %x.shr1881  store i64 %result, ptr addrspace(1) %out1882  ret void1883}1884 1885define amdgpu_kernel void @s_test_sdiv24_k_den_i64(ptr addrspace(1) %out, i64 %x) {1886; GCN-LABEL: s_test_sdiv24_k_den_i64:1887; GCN:       ; %bb.0:1888; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91889; GCN-NEXT:    s_waitcnt lgkmcnt(0)1890; GCN-NEXT:    s_mov_b32 s2, 0x46b6fe001891; GCN-NEXT:    s_mov_b32 s7, 0xf0001892; GCN-NEXT:    s_mov_b32 s6, -11893; GCN-NEXT:    s_mov_b32 s4, s01894; GCN-NEXT:    s_ashr_i32 s0, s3, 81895; GCN-NEXT:    v_cvt_f32_i32_e32 v0, s01896; GCN-NEXT:    s_ashr_i32 s0, s3, 311897; GCN-NEXT:    s_mov_b32 s5, s11898; GCN-NEXT:    s_or_b32 s3, s0, 11899; GCN-NEXT:    v_mul_f32_e32 v1, 0x38331158, v01900; GCN-NEXT:    v_trunc_f32_e32 v1, v11901; GCN-NEXT:    v_mad_f32 v0, -v1, s2, v01902; GCN-NEXT:    v_cvt_i32_f32_e32 v1, v11903; GCN-NEXT:    v_cmp_ge_f32_e64 s[0:1], |v0|, s21904; GCN-NEXT:    s_and_b64 s[0:1], s[0:1], exec1905; GCN-NEXT:    s_cselect_b32 s0, s3, 01906; GCN-NEXT:    v_add_i32_e32 v0, vcc, s0, v11907; GCN-NEXT:    v_bfe_i32 v0, v0, 0, 241908; GCN-NEXT:    v_ashrrev_i32_e32 v1, 31, v01909; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 01910; GCN-NEXT:    s_endpgm1911;1912; GCN-IR-LABEL: s_test_sdiv24_k_den_i64:1913; GCN-IR:       ; %bb.0:1914; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91915; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)1916; GCN-IR-NEXT:    s_mov_b32 s2, 0x46b6fe001917; GCN-IR-NEXT:    s_mov_b32 s7, 0xf0001918; GCN-IR-NEXT:    s_mov_b32 s6, -11919; GCN-IR-NEXT:    s_mov_b32 s4, s01920; GCN-IR-NEXT:    s_ashr_i32 s0, s3, 81921; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v0, s01922; GCN-IR-NEXT:    s_ashr_i32 s0, s3, 311923; GCN-IR-NEXT:    s_mov_b32 s5, s11924; GCN-IR-NEXT:    s_or_b32 s3, s0, 11925; GCN-IR-NEXT:    v_mul_f32_e32 v1, 0x38331158, v01926; GCN-IR-NEXT:    v_trunc_f32_e32 v1, v11927; GCN-IR-NEXT:    v_mad_f32 v0, -v1, s2, v01928; GCN-IR-NEXT:    v_cvt_i32_f32_e32 v1, v11929; GCN-IR-NEXT:    v_cmp_ge_f32_e64 s[0:1], |v0|, s21930; GCN-IR-NEXT:    s_and_b64 s[0:1], s[0:1], exec1931; GCN-IR-NEXT:    s_cselect_b32 s0, s3, 01932; GCN-IR-NEXT:    v_add_i32_e32 v0, vcc, s0, v11933; GCN-IR-NEXT:    v_bfe_i32 v0, v0, 0, 241934; GCN-IR-NEXT:    v_ashrrev_i32_e32 v1, 31, v01935; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 01936; GCN-IR-NEXT:    s_endpgm1937  %x.shr = ashr i64 %x, 401938  %result = sdiv i64 %x.shr, 234231939  store i64 %result, ptr addrspace(1) %out1940  ret void1941}1942 1943define i64 @v_test_sdiv24_k_num_i64(i64 %x) {1944; GCN-LABEL: v_test_sdiv24_k_num_i64:1945; GCN:       ; %bb.0:1946; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1947; GCN-NEXT:    v_ashrrev_i32_e32 v0, 8, v11948; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v01949; GCN-NEXT:    s_mov_b32 s4, 0x41c000001950; GCN-NEXT:    v_ashrrev_i32_e32 v1, 31, v11951; GCN-NEXT:    v_or_b32_e32 v1, 1, v11952; GCN-NEXT:    v_rcp_iflag_f32_e32 v2, v01953; GCN-NEXT:    v_mul_f32_e32 v2, 0x41c00000, v21954; GCN-NEXT:    v_trunc_f32_e32 v2, v21955; GCN-NEXT:    v_mad_f32 v3, -v2, v0, s41956; GCN-NEXT:    v_cvt_i32_f32_e32 v2, v21957; GCN-NEXT:    v_cmp_ge_f32_e64 vcc, |v3|, |v0|1958; GCN-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc1959; GCN-NEXT:    v_add_i32_e32 v0, vcc, v2, v01960; GCN-NEXT:    v_bfe_i32 v0, v0, 0, 241961; GCN-NEXT:    v_ashrrev_i32_e32 v1, 31, v01962; GCN-NEXT:    s_setpc_b64 s[30:31]1963;1964; GCN-IR-LABEL: v_test_sdiv24_k_num_i64:1965; GCN-IR:       ; %bb.0:1966; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1967; GCN-IR-NEXT:    v_ashrrev_i32_e32 v0, 8, v11968; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v0, v01969; GCN-IR-NEXT:    s_mov_b32 s4, 0x41c000001970; GCN-IR-NEXT:    v_ashrrev_i32_e32 v1, 31, v11971; GCN-IR-NEXT:    v_or_b32_e32 v1, 1, v11972; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v2, v01973; GCN-IR-NEXT:    v_mul_f32_e32 v2, 0x41c00000, v21974; GCN-IR-NEXT:    v_trunc_f32_e32 v2, v21975; GCN-IR-NEXT:    v_mad_f32 v3, -v2, v0, s41976; GCN-IR-NEXT:    v_cvt_i32_f32_e32 v2, v21977; GCN-IR-NEXT:    v_cmp_ge_f32_e64 vcc, |v3|, |v0|1978; GCN-IR-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc1979; GCN-IR-NEXT:    v_add_i32_e32 v0, vcc, v2, v01980; GCN-IR-NEXT:    v_bfe_i32 v0, v0, 0, 241981; GCN-IR-NEXT:    v_ashrrev_i32_e32 v1, 31, v01982; GCN-IR-NEXT:    s_setpc_b64 s[30:31]1983  %x.shr = ashr i64 %x, 401984  %result = sdiv i64 24, %x.shr1985  ret i64 %result1986}1987 1988define i64 @v_test_sdiv24_pow2_k_num_i64(i64 %x) {1989; GCN-LABEL: v_test_sdiv24_pow2_k_num_i64:1990; GCN:       ; %bb.0:1991; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1992; GCN-NEXT:    v_ashrrev_i32_e32 v0, 8, v11993; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v01994; GCN-NEXT:    s_mov_b32 s4, 0x470000001995; GCN-NEXT:    v_ashrrev_i32_e32 v1, 31, v11996; GCN-NEXT:    v_or_b32_e32 v1, 1, v11997; GCN-NEXT:    v_rcp_iflag_f32_e32 v2, v01998; GCN-NEXT:    v_mul_f32_e32 v2, 0x47000000, v21999; GCN-NEXT:    v_trunc_f32_e32 v2, v22000; GCN-NEXT:    v_mad_f32 v3, -v2, v0, s42001; GCN-NEXT:    v_cvt_i32_f32_e32 v2, v22002; GCN-NEXT:    v_cmp_ge_f32_e64 vcc, |v3|, |v0|2003; GCN-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc2004; GCN-NEXT:    v_add_i32_e32 v0, vcc, v2, v02005; GCN-NEXT:    v_bfe_i32 v0, v0, 0, 242006; GCN-NEXT:    v_ashrrev_i32_e32 v1, 31, v02007; GCN-NEXT:    s_setpc_b64 s[30:31]2008;2009; GCN-IR-LABEL: v_test_sdiv24_pow2_k_num_i64:2010; GCN-IR:       ; %bb.0:2011; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2012; GCN-IR-NEXT:    v_ashrrev_i32_e32 v0, 8, v12013; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v0, v02014; GCN-IR-NEXT:    s_mov_b32 s4, 0x470000002015; GCN-IR-NEXT:    v_ashrrev_i32_e32 v1, 31, v12016; GCN-IR-NEXT:    v_or_b32_e32 v1, 1, v12017; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v2, v02018; GCN-IR-NEXT:    v_mul_f32_e32 v2, 0x47000000, v22019; GCN-IR-NEXT:    v_trunc_f32_e32 v2, v22020; GCN-IR-NEXT:    v_mad_f32 v3, -v2, v0, s42021; GCN-IR-NEXT:    v_cvt_i32_f32_e32 v2, v22022; GCN-IR-NEXT:    v_cmp_ge_f32_e64 vcc, |v3|, |v0|2023; GCN-IR-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc2024; GCN-IR-NEXT:    v_add_i32_e32 v0, vcc, v2, v02025; GCN-IR-NEXT:    v_bfe_i32 v0, v0, 0, 242026; GCN-IR-NEXT:    v_ashrrev_i32_e32 v1, 31, v02027; GCN-IR-NEXT:    s_setpc_b64 s[30:31]2028  %x.shr = ashr i64 %x, 402029  %result = sdiv i64 32768, %x.shr2030  ret i64 %result2031}2032 2033define i64 @v_test_sdiv24_pow2_k_den_i64(i64 %x) {2034; GCN-LABEL: v_test_sdiv24_pow2_k_den_i64:2035; GCN:       ; %bb.0:2036; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2037; GCN-NEXT:    v_ashrrev_i32_e32 v2, 31, v12038; GCN-NEXT:    v_ashrrev_i32_e32 v0, 8, v12039; GCN-NEXT:    v_lshrrev_b32_e32 v1, 17, v22040; GCN-NEXT:    v_add_i32_e32 v0, vcc, v0, v12041; GCN-NEXT:    v_addc_u32_e32 v1, vcc, 0, v2, vcc2042; GCN-NEXT:    v_ashr_i64 v[0:1], v[0:1], 152043; GCN-NEXT:    s_setpc_b64 s[30:31]2044;2045; GCN-IR-LABEL: v_test_sdiv24_pow2_k_den_i64:2046; GCN-IR:       ; %bb.0:2047; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2048; GCN-IR-NEXT:    v_ashrrev_i32_e32 v0, 8, v12049; GCN-IR-NEXT:    v_cvt_f32_i32_e32 v0, v02050; GCN-IR-NEXT:    s_mov_b32 s4, 0x470000002051; GCN-IR-NEXT:    v_ashrrev_i32_e32 v1, 31, v12052; GCN-IR-NEXT:    v_or_b32_e32 v1, 1, v12053; GCN-IR-NEXT:    v_mul_f32_e32 v2, 0x38000000, v02054; GCN-IR-NEXT:    v_trunc_f32_e32 v2, v22055; GCN-IR-NEXT:    v_mad_f32 v0, -v2, s4, v02056; GCN-IR-NEXT:    v_cvt_i32_f32_e32 v2, v22057; GCN-IR-NEXT:    v_cmp_ge_f32_e64 vcc, |v0|, s42058; GCN-IR-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc2059; GCN-IR-NEXT:    v_add_i32_e32 v0, vcc, v2, v02060; GCN-IR-NEXT:    v_bfe_i32 v0, v0, 0, 242061; GCN-IR-NEXT:    v_ashrrev_i32_e32 v1, 31, v02062; GCN-IR-NEXT:    s_setpc_b64 s[30:31]2063  %x.shr = ashr i64 %x, 402064  %result = sdiv i64 %x.shr, 327682065  ret i64 %result2066}2067