brintos

brintos / llvm-project-archived public Read only

0
0
Text · 66.1 KiB · 1c50f93 Raw
1642 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_udiv_i64(ptr addrspace(1) %out, i64 %x, i64 %y) {6; GCN-LABEL: s_test_udiv_i64:7; GCN:       ; %bb.0:8; GCN-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd9; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x910; GCN-NEXT:    s_mov_b32 s7, 0xf00011; GCN-NEXT:    s_mov_b32 s6, -112; GCN-NEXT:    s_waitcnt lgkmcnt(0)13; GCN-NEXT:    v_cvt_f32_u32_e32 v0, s814; GCN-NEXT:    v_cvt_f32_u32_e32 v1, s915; GCN-NEXT:    s_sub_u32 s4, 0, s816; GCN-NEXT:    s_subb_u32 s5, 0, s917; GCN-NEXT:    v_madmk_f32 v0, v1, 0x4f800000, v018; GCN-NEXT:    v_rcp_f32_e32 v0, v019; GCN-NEXT:    v_mul_f32_e32 v0, 0x5f7ffffc, v020; GCN-NEXT:    v_mul_f32_e32 v1, 0x2f800000, v021; GCN-NEXT:    v_trunc_f32_e32 v1, v122; GCN-NEXT:    v_madmk_f32 v0, v1, 0xcf800000, v023; GCN-NEXT:    v_cvt_u32_f32_e32 v1, v124; GCN-NEXT:    v_cvt_u32_f32_e32 v0, v025; GCN-NEXT:    v_mul_lo_u32 v2, s4, v126; GCN-NEXT:    v_mul_hi_u32 v3, s4, v027; GCN-NEXT:    v_mul_lo_u32 v5, s5, v028; GCN-NEXT:    v_mul_lo_u32 v4, s4, v029; GCN-NEXT:    v_add_i32_e32 v2, vcc, v2, v330; GCN-NEXT:    v_add_i32_e32 v2, vcc, v2, v531; GCN-NEXT:    v_mul_hi_u32 v3, v0, v432; GCN-NEXT:    v_mul_lo_u32 v5, v0, v233; GCN-NEXT:    v_mul_hi_u32 v7, v0, v234; GCN-NEXT:    v_mul_hi_u32 v6, v1, v435; GCN-NEXT:    v_mul_lo_u32 v4, v1, v436; GCN-NEXT:    v_mul_hi_u32 v8, v1, v237; GCN-NEXT:    v_add_i32_e32 v3, vcc, v3, v538; GCN-NEXT:    v_addc_u32_e32 v5, vcc, 0, v7, vcc39; GCN-NEXT:    v_mul_lo_u32 v2, v1, v240; GCN-NEXT:    v_add_i32_e32 v3, vcc, v3, v441; GCN-NEXT:    v_addc_u32_e32 v3, vcc, v5, v6, vcc42; GCN-NEXT:    v_addc_u32_e32 v4, vcc, 0, v8, vcc43; GCN-NEXT:    v_add_i32_e32 v2, vcc, v3, v244; GCN-NEXT:    v_addc_u32_e32 v3, vcc, 0, v4, vcc45; GCN-NEXT:    v_add_i32_e32 v0, vcc, v0, v246; GCN-NEXT:    v_addc_u32_e32 v1, vcc, v1, v3, vcc47; GCN-NEXT:    v_mul_lo_u32 v2, s4, v148; GCN-NEXT:    v_mul_hi_u32 v3, s4, v049; GCN-NEXT:    v_mul_lo_u32 v4, s5, v050; GCN-NEXT:    s_mov_b32 s5, s151; GCN-NEXT:    v_add_i32_e32 v2, vcc, v2, v352; GCN-NEXT:    v_mul_lo_u32 v3, s4, v053; GCN-NEXT:    v_add_i32_e32 v2, vcc, v4, v254; GCN-NEXT:    v_mul_lo_u32 v6, v0, v255; GCN-NEXT:    v_mul_hi_u32 v7, v0, v356; GCN-NEXT:    v_mul_hi_u32 v8, v0, v257; GCN-NEXT:    v_mul_hi_u32 v5, v1, v358; GCN-NEXT:    v_mul_lo_u32 v3, v1, v359; GCN-NEXT:    v_mul_hi_u32 v4, v1, v260; GCN-NEXT:    v_add_i32_e32 v6, vcc, v7, v661; GCN-NEXT:    v_addc_u32_e32 v7, vcc, 0, v8, vcc62; GCN-NEXT:    v_mul_lo_u32 v2, v1, v263; GCN-NEXT:    v_add_i32_e32 v3, vcc, v6, v364; GCN-NEXT:    v_addc_u32_e32 v3, vcc, v7, v5, vcc65; GCN-NEXT:    v_addc_u32_e32 v4, vcc, 0, v4, vcc66; GCN-NEXT:    v_add_i32_e32 v2, vcc, v3, v267; GCN-NEXT:    v_addc_u32_e32 v3, vcc, 0, v4, vcc68; GCN-NEXT:    v_add_i32_e32 v0, vcc, v0, v269; GCN-NEXT:    v_addc_u32_e32 v1, vcc, v1, v3, vcc70; GCN-NEXT:    v_mul_lo_u32 v2, s2, v171; GCN-NEXT:    v_mul_hi_u32 v3, s2, v072; GCN-NEXT:    v_mul_hi_u32 v4, s2, v173; GCN-NEXT:    v_mul_hi_u32 v5, s3, v174; GCN-NEXT:    v_mul_lo_u32 v1, s3, v175; GCN-NEXT:    v_add_i32_e32 v2, vcc, v3, v276; GCN-NEXT:    v_addc_u32_e32 v3, vcc, 0, v4, vcc77; GCN-NEXT:    v_mul_lo_u32 v4, s3, v078; GCN-NEXT:    v_mul_hi_u32 v0, s3, v079; GCN-NEXT:    s_mov_b32 s4, s080; GCN-NEXT:    v_add_i32_e32 v2, vcc, v2, v481; GCN-NEXT:    v_addc_u32_e32 v0, vcc, v3, v0, vcc82; GCN-NEXT:    v_addc_u32_e32 v2, vcc, 0, v5, vcc83; GCN-NEXT:    v_add_i32_e32 v0, vcc, v0, v184; GCN-NEXT:    v_addc_u32_e32 v1, vcc, 0, v2, vcc85; GCN-NEXT:    v_mul_lo_u32 v2, s8, v186; GCN-NEXT:    v_mul_hi_u32 v3, s8, v087; GCN-NEXT:    v_mul_lo_u32 v4, s9, v088; GCN-NEXT:    v_mov_b32_e32 v5, s989; GCN-NEXT:    v_add_i32_e32 v2, vcc, v2, v390; GCN-NEXT:    v_mul_lo_u32 v3, s8, v091; GCN-NEXT:    v_add_i32_e32 v2, vcc, v4, v292; GCN-NEXT:    v_sub_i32_e32 v4, vcc, s3, v293; GCN-NEXT:    v_sub_i32_e32 v3, vcc, s2, v394; GCN-NEXT:    v_subb_u32_e64 v4, s[0:1], v4, v5, vcc95; GCN-NEXT:    v_subrev_i32_e64 v5, s[0:1], s8, v396; GCN-NEXT:    v_subbrev_u32_e64 v4, s[0:1], 0, v4, s[0:1]97; GCN-NEXT:    v_cmp_le_u32_e64 s[0:1], s9, v498; GCN-NEXT:    v_cndmask_b32_e64 v6, 0, -1, s[0:1]99; GCN-NEXT:    v_cmp_le_u32_e64 s[0:1], s8, v5100; GCN-NEXT:    v_cndmask_b32_e64 v5, 0, -1, s[0:1]101; GCN-NEXT:    v_cmp_eq_u32_e64 s[0:1], s9, v4102; GCN-NEXT:    v_cndmask_b32_e64 v4, v6, v5, s[0:1]103; GCN-NEXT:    v_add_i32_e64 v5, s[0:1], 1, v0104; GCN-NEXT:    v_addc_u32_e64 v6, s[0:1], 0, v1, s[0:1]105; GCN-NEXT:    v_add_i32_e64 v7, s[0:1], 2, v0106; GCN-NEXT:    v_addc_u32_e64 v8, s[0:1], 0, v1, s[0:1]107; GCN-NEXT:    v_cmp_ne_u32_e64 s[0:1], 0, v4108; GCN-NEXT:    v_cndmask_b32_e64 v4, v5, v7, s[0:1]109; GCN-NEXT:    v_cndmask_b32_e64 v5, v6, v8, s[0:1]110; GCN-NEXT:    v_mov_b32_e32 v6, s3111; GCN-NEXT:    v_subb_u32_e32 v2, vcc, v6, v2, vcc112; GCN-NEXT:    v_cmp_le_u32_e32 vcc, s9, v2113; GCN-NEXT:    v_cndmask_b32_e64 v6, 0, -1, vcc114; GCN-NEXT:    v_cmp_le_u32_e32 vcc, s8, v3115; GCN-NEXT:    v_cndmask_b32_e64 v3, 0, -1, vcc116; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, s9, v2117; GCN-NEXT:    v_cndmask_b32_e32 v2, v6, v3, vcc118; GCN-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v2119; GCN-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc120; GCN-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc121; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0122; GCN-NEXT:    s_endpgm123;124; GCN-IR-LABEL: s_test_udiv_i64:125; GCN-IR:       ; %bb.0: ; %_udiv-special-cases126; GCN-IR-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0xd127; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9128; GCN-IR-NEXT:    s_mov_b64 s[4:5], 0129; GCN-IR-NEXT:    s_mov_b32 s11, 0130; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)131; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[8:9], s[6:7], 0132; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[12:13], s[2:3], 0133; GCN-IR-NEXT:    s_flbit_i32_b64 s10, s[6:7]134; GCN-IR-NEXT:    s_flbit_i32_b64 s16, s[2:3]135; GCN-IR-NEXT:    s_or_b64 s[8:9], s[8:9], s[12:13]136; GCN-IR-NEXT:    s_sub_u32 s12, s10, s16137; GCN-IR-NEXT:    s_subb_u32 s13, 0, 0138; GCN-IR-NEXT:    v_cmp_gt_u64_e64 s[14:15], s[12:13], 63139; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[18:19], s[12:13], 63140; GCN-IR-NEXT:    s_or_b64 s[14:15], s[8:9], s[14:15]141; GCN-IR-NEXT:    s_and_b64 s[8:9], s[14:15], exec142; GCN-IR-NEXT:    s_cselect_b32 s9, 0, s3143; GCN-IR-NEXT:    s_cselect_b32 s8, 0, s2144; GCN-IR-NEXT:    s_or_b64 s[14:15], s[14:15], s[18:19]145; GCN-IR-NEXT:    s_andn2_b64 vcc, exec, s[14:15]146; GCN-IR-NEXT:    s_cbranch_vccz .LBB0_5147; GCN-IR-NEXT:  ; %bb.1: ; %udiv-bb1148; GCN-IR-NEXT:    s_add_u32 s14, s12, 1149; GCN-IR-NEXT:    s_addc_u32 s8, s13, 0150; GCN-IR-NEXT:    s_cselect_b64 s[8:9], -1, 0151; GCN-IR-NEXT:    s_sub_i32 s12, 63, s12152; GCN-IR-NEXT:    s_andn2_b64 vcc, exec, s[8:9]153; GCN-IR-NEXT:    s_lshl_b64 s[8:9], s[2:3], s12154; GCN-IR-NEXT:    s_cbranch_vccz .LBB0_4155; GCN-IR-NEXT:  ; %bb.2: ; %udiv-preheader156; GCN-IR-NEXT:    s_lshr_b64 s[12:13], s[2:3], s14157; GCN-IR-NEXT:    s_add_u32 s14, s6, -1158; GCN-IR-NEXT:    s_addc_u32 s15, s7, -1159; GCN-IR-NEXT:    s_not_b64 s[2:3], s[10:11]160; GCN-IR-NEXT:    s_add_u32 s10, s2, s16161; GCN-IR-NEXT:    s_addc_u32 s11, s3, 0162; GCN-IR-NEXT:    s_mov_b64 s[2:3], 0163; GCN-IR-NEXT:    s_mov_b32 s5, 0164; GCN-IR-NEXT:  .LBB0_3: ; %udiv-do-while165; GCN-IR-NEXT:    ; =>This Inner Loop Header: Depth=1166; GCN-IR-NEXT:    s_lshl_b64 s[12:13], s[12:13], 1167; GCN-IR-NEXT:    s_lshr_b32 s4, s9, 31168; GCN-IR-NEXT:    s_lshl_b64 s[8:9], s[8:9], 1169; GCN-IR-NEXT:    s_or_b64 s[12:13], s[12:13], s[4:5]170; GCN-IR-NEXT:    s_or_b64 s[8:9], s[2:3], s[8:9]171; GCN-IR-NEXT:    s_sub_u32 s2, s14, s12172; GCN-IR-NEXT:    s_subb_u32 s2, s15, s13173; GCN-IR-NEXT:    s_ashr_i32 s2, s2, 31174; GCN-IR-NEXT:    s_mov_b32 s3, s2175; GCN-IR-NEXT:    s_and_b32 s4, s2, 1176; GCN-IR-NEXT:    s_and_b64 s[16:17], s[2:3], s[6:7]177; GCN-IR-NEXT:    s_sub_u32 s12, s12, s16178; GCN-IR-NEXT:    s_subb_u32 s13, s13, s17179; GCN-IR-NEXT:    s_add_u32 s10, s10, 1180; GCN-IR-NEXT:    s_addc_u32 s11, s11, 0181; GCN-IR-NEXT:    s_cselect_b64 s[16:17], -1, 0182; GCN-IR-NEXT:    s_mov_b64 s[2:3], s[4:5]183; GCN-IR-NEXT:    s_and_b64 vcc, exec, s[16:17]184; GCN-IR-NEXT:    s_cbranch_vccz .LBB0_3185; GCN-IR-NEXT:  .LBB0_4: ; %Flow7186; GCN-IR-NEXT:    s_lshl_b64 s[2:3], s[8:9], 1187; GCN-IR-NEXT:    s_or_b64 s[8:9], s[4:5], s[2:3]188; GCN-IR-NEXT:  .LBB0_5: ; %udiv-end189; GCN-IR-NEXT:    v_mov_b32_e32 v0, s8190; GCN-IR-NEXT:    s_mov_b32 s3, 0xf000191; GCN-IR-NEXT:    s_mov_b32 s2, -1192; GCN-IR-NEXT:    v_mov_b32_e32 v1, s9193; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0194; GCN-IR-NEXT:    s_endpgm195  %result = udiv i64 %x, %y196  store i64 %result, ptr addrspace(1) %out197  ret void198}199 200define i64 @v_test_udiv_i64(i64 %x, i64 %y) {201; GCN-LABEL: v_test_udiv_i64:202; GCN:       ; %bb.0:203; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)204; GCN-NEXT:    v_cvt_f32_u32_e32 v4, v2205; GCN-NEXT:    v_cvt_f32_u32_e32 v5, v3206; GCN-NEXT:    v_sub_i32_e32 v6, vcc, 0, v2207; GCN-NEXT:    v_subb_u32_e32 v7, vcc, 0, v3, vcc208; GCN-NEXT:    v_madmk_f32 v4, v5, 0x4f800000, v4209; GCN-NEXT:    v_rcp_f32_e32 v4, v4210; GCN-NEXT:    v_mul_f32_e32 v4, 0x5f7ffffc, v4211; GCN-NEXT:    v_mul_f32_e32 v5, 0x2f800000, v4212; GCN-NEXT:    v_trunc_f32_e32 v5, v5213; GCN-NEXT:    v_madmk_f32 v4, v5, 0xcf800000, v4214; GCN-NEXT:    v_cvt_u32_f32_e32 v5, v5215; GCN-NEXT:    v_cvt_u32_f32_e32 v4, v4216; GCN-NEXT:    v_mul_lo_u32 v8, v6, v5217; GCN-NEXT:    v_mul_hi_u32 v9, v6, v4218; GCN-NEXT:    v_mul_lo_u32 v10, v7, v4219; GCN-NEXT:    v_add_i32_e32 v8, vcc, v9, v8220; GCN-NEXT:    v_mul_lo_u32 v9, v6, v4221; GCN-NEXT:    v_add_i32_e32 v8, vcc, v8, v10222; GCN-NEXT:    v_mul_lo_u32 v10, v4, v8223; GCN-NEXT:    v_mul_hi_u32 v11, v4, v9224; GCN-NEXT:    v_mul_hi_u32 v12, v4, v8225; GCN-NEXT:    v_mul_hi_u32 v13, v5, v8226; GCN-NEXT:    v_mul_lo_u32 v8, v5, v8227; GCN-NEXT:    v_add_i32_e32 v10, vcc, v11, v10228; GCN-NEXT:    v_addc_u32_e32 v11, vcc, 0, v12, vcc229; GCN-NEXT:    v_mul_lo_u32 v12, v5, v9230; GCN-NEXT:    v_mul_hi_u32 v9, v5, v9231; GCN-NEXT:    v_add_i32_e32 v10, vcc, v10, v12232; GCN-NEXT:    v_addc_u32_e32 v9, vcc, v11, v9, vcc233; GCN-NEXT:    v_addc_u32_e32 v10, vcc, 0, v13, vcc234; GCN-NEXT:    v_add_i32_e32 v8, vcc, v9, v8235; GCN-NEXT:    v_addc_u32_e32 v9, vcc, 0, v10, vcc236; GCN-NEXT:    v_add_i32_e32 v4, vcc, v4, v8237; GCN-NEXT:    v_addc_u32_e32 v5, vcc, v5, v9, vcc238; GCN-NEXT:    v_mul_lo_u32 v8, v6, v5239; GCN-NEXT:    v_mul_hi_u32 v9, v6, v4240; GCN-NEXT:    v_mul_lo_u32 v7, v7, v4241; GCN-NEXT:    v_mul_lo_u32 v6, v6, v4242; GCN-NEXT:    v_add_i32_e32 v8, vcc, v9, v8243; GCN-NEXT:    v_add_i32_e32 v7, vcc, v8, v7244; GCN-NEXT:    v_mul_lo_u32 v10, v4, v7245; GCN-NEXT:    v_mul_hi_u32 v11, v4, v6246; GCN-NEXT:    v_mul_hi_u32 v12, v4, v7247; GCN-NEXT:    v_mul_hi_u32 v9, v5, v6248; GCN-NEXT:    v_mul_lo_u32 v6, v5, v6249; GCN-NEXT:    v_mul_hi_u32 v8, v5, v7250; GCN-NEXT:    v_add_i32_e32 v10, vcc, v11, v10251; GCN-NEXT:    v_addc_u32_e32 v11, vcc, 0, v12, vcc252; GCN-NEXT:    v_mul_lo_u32 v7, v5, v7253; GCN-NEXT:    v_add_i32_e32 v6, vcc, v10, v6254; GCN-NEXT:    v_addc_u32_e32 v6, vcc, v11, v9, vcc255; GCN-NEXT:    v_addc_u32_e32 v8, vcc, 0, v8, vcc256; GCN-NEXT:    v_add_i32_e32 v6, vcc, v6, v7257; GCN-NEXT:    v_addc_u32_e32 v7, vcc, 0, v8, vcc258; GCN-NEXT:    v_add_i32_e32 v4, vcc, v4, v6259; GCN-NEXT:    v_addc_u32_e32 v5, vcc, v5, v7, vcc260; GCN-NEXT:    v_mul_lo_u32 v6, v0, v5261; GCN-NEXT:    v_mul_hi_u32 v7, v0, v4262; GCN-NEXT:    v_mul_hi_u32 v8, v0, v5263; GCN-NEXT:    v_mul_hi_u32 v9, v1, v5264; GCN-NEXT:    v_mul_lo_u32 v5, v1, v5265; GCN-NEXT:    v_add_i32_e32 v6, vcc, v7, v6266; GCN-NEXT:    v_addc_u32_e32 v7, vcc, 0, v8, vcc267; GCN-NEXT:    v_mul_lo_u32 v8, v1, v4268; GCN-NEXT:    v_mul_hi_u32 v4, v1, v4269; GCN-NEXT:    v_add_i32_e32 v6, vcc, v6, v8270; GCN-NEXT:    v_addc_u32_e32 v4, vcc, v7, v4, vcc271; GCN-NEXT:    v_addc_u32_e32 v6, vcc, 0, v9, vcc272; GCN-NEXT:    v_add_i32_e32 v4, vcc, v4, v5273; GCN-NEXT:    v_addc_u32_e32 v5, vcc, 0, v6, vcc274; GCN-NEXT:    v_mul_lo_u32 v6, v2, v5275; GCN-NEXT:    v_mul_hi_u32 v7, v2, v4276; GCN-NEXT:    v_mul_lo_u32 v8, v3, v4277; GCN-NEXT:    v_add_i32_e32 v6, vcc, v7, v6278; GCN-NEXT:    v_mul_lo_u32 v7, v2, v4279; GCN-NEXT:    v_add_i32_e32 v6, vcc, v6, v8280; GCN-NEXT:    v_sub_i32_e32 v8, vcc, v1, v6281; GCN-NEXT:    v_sub_i32_e32 v0, vcc, v0, v7282; GCN-NEXT:    v_subb_u32_e64 v7, s[4:5], v8, v3, vcc283; GCN-NEXT:    v_sub_i32_e64 v8, s[4:5], v0, v2284; GCN-NEXT:    v_subbrev_u32_e64 v7, s[4:5], 0, v7, s[4:5]285; GCN-NEXT:    v_cmp_ge_u32_e64 s[4:5], v7, v3286; GCN-NEXT:    v_cndmask_b32_e64 v9, 0, -1, s[4:5]287; GCN-NEXT:    v_cmp_ge_u32_e64 s[4:5], v8, v2288; GCN-NEXT:    v_cndmask_b32_e64 v8, 0, -1, s[4:5]289; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], v7, v3290; GCN-NEXT:    v_cndmask_b32_e64 v7, v9, v8, s[4:5]291; GCN-NEXT:    v_add_i32_e64 v8, s[4:5], 2, v4292; GCN-NEXT:    v_subb_u32_e32 v1, vcc, v1, v6, vcc293; GCN-NEXT:    v_addc_u32_e64 v9, s[4:5], 0, v5, s[4:5]294; GCN-NEXT:    v_cmp_ge_u32_e32 vcc, v1, v3295; GCN-NEXT:    v_add_i32_e64 v10, s[4:5], 1, v4296; GCN-NEXT:    v_cndmask_b32_e64 v6, 0, -1, vcc297; GCN-NEXT:    v_cmp_ge_u32_e32 vcc, v0, v2298; GCN-NEXT:    v_addc_u32_e64 v11, s[4:5], 0, v5, s[4:5]299; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, -1, vcc300; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v3301; GCN-NEXT:    v_cmp_ne_u32_e64 s[4:5], 0, v7302; GCN-NEXT:    v_cndmask_b32_e32 v0, v6, v0, vcc303; GCN-NEXT:    v_cndmask_b32_e64 v7, v10, v8, s[4:5]304; GCN-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0305; GCN-NEXT:    v_cndmask_b32_e64 v1, v11, v9, s[4:5]306; GCN-NEXT:    v_cndmask_b32_e32 v0, v4, v7, vcc307; GCN-NEXT:    v_cndmask_b32_e32 v1, v5, v1, vcc308; GCN-NEXT:    s_setpc_b64 s[30:31]309;310; GCN-IR-LABEL: v_test_udiv_i64:311; GCN-IR:       ; %bb.0: ; %_udiv-special-cases312; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)313; GCN-IR-NEXT:    v_ffbh_u32_e32 v4, v2314; GCN-IR-NEXT:    v_add_i32_e64 v4, s[6:7], 32, v4315; GCN-IR-NEXT:    v_ffbh_u32_e32 v5, v3316; GCN-IR-NEXT:    v_min_u32_e32 v8, v4, v5317; GCN-IR-NEXT:    v_ffbh_u32_e32 v4, v0318; GCN-IR-NEXT:    v_add_i32_e64 v4, s[6:7], 32, v4319; GCN-IR-NEXT:    v_ffbh_u32_e32 v5, v1320; GCN-IR-NEXT:    v_min_u32_e32 v9, v4, v5321; GCN-IR-NEXT:    v_sub_i32_e64 v6, s[6:7], v8, v9322; GCN-IR-NEXT:    v_cmp_eq_u64_e32 vcc, 0, v[2:3]323; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[4:5], 0, v[0:1]324; GCN-IR-NEXT:    v_subb_u32_e64 v7, s[6:7], 0, 0, s[6:7]325; GCN-IR-NEXT:    v_cmp_lt_u64_e64 s[6:7], 63, v[6:7]326; GCN-IR-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]327; GCN-IR-NEXT:    s_or_b64 s[4:5], s[4:5], s[6:7]328; GCN-IR-NEXT:    v_cmp_ne_u64_e32 vcc, 63, v[6:7]329; GCN-IR-NEXT:    s_xor_b64 s[6:7], s[4:5], -1330; GCN-IR-NEXT:    v_cndmask_b32_e64 v4, v1, 0, s[4:5]331; GCN-IR-NEXT:    v_cndmask_b32_e64 v5, v0, 0, s[4:5]332; GCN-IR-NEXT:    s_and_b64 s[4:5], s[6:7], vcc333; GCN-IR-NEXT:    s_and_saveexec_b64 s[6:7], s[4:5]334; GCN-IR-NEXT:    s_cbranch_execz .LBB1_6335; GCN-IR-NEXT:  ; %bb.1: ; %udiv-bb1336; GCN-IR-NEXT:    v_add_i32_e32 v10, vcc, 1, v6337; GCN-IR-NEXT:    v_addc_u32_e32 v4, vcc, 0, v7, vcc338; GCN-IR-NEXT:    v_sub_i32_e64 v4, s[4:5], 63, v6339; GCN-IR-NEXT:    v_lshl_b64 v[4:5], v[0:1], v4340; GCN-IR-NEXT:    v_mov_b32_e32 v6, 0341; GCN-IR-NEXT:    v_mov_b32_e32 v7, 0342; GCN-IR-NEXT:    s_xor_b64 s[4:5], vcc, -1343; GCN-IR-NEXT:    s_and_saveexec_b64 s[8:9], s[4:5]344; GCN-IR-NEXT:    s_xor_b64 s[4:5], exec, s[8:9]345; GCN-IR-NEXT:    s_cbranch_execz .LBB1_5346; GCN-IR-NEXT:  ; %bb.2: ; %udiv-preheader347; GCN-IR-NEXT:    v_lshr_b64 v[0:1], v[0:1], v10348; GCN-IR-NEXT:    v_add_i32_e32 v10, vcc, -1, v2349; GCN-IR-NEXT:    v_addc_u32_e32 v11, vcc, -1, v3, vcc350; GCN-IR-NEXT:    v_not_b32_e32 v6, v8351; GCN-IR-NEXT:    v_add_i32_e32 v12, vcc, v6, v9352; GCN-IR-NEXT:    v_addc_u32_e64 v13, s[8:9], -1, 0, vcc353; GCN-IR-NEXT:    v_mov_b32_e32 v8, 0354; GCN-IR-NEXT:    s_mov_b64 s[8:9], 0355; GCN-IR-NEXT:    v_mov_b32_e32 v9, 0356; GCN-IR-NEXT:    v_mov_b32_e32 v7, 0357; GCN-IR-NEXT:  .LBB1_3: ; %udiv-do-while358; GCN-IR-NEXT:    ; =>This Inner Loop Header: Depth=1359; GCN-IR-NEXT:    v_lshl_b64 v[0:1], v[0:1], 1360; GCN-IR-NEXT:    v_lshrrev_b32_e32 v6, 31, v5361; GCN-IR-NEXT:    v_or_b32_e32 v0, v0, v6362; GCN-IR-NEXT:    v_lshl_b64 v[4:5], v[4:5], 1363; GCN-IR-NEXT:    v_sub_i32_e32 v6, vcc, v10, v0364; GCN-IR-NEXT:    v_subb_u32_e32 v6, vcc, v11, v1, vcc365; GCN-IR-NEXT:    v_or_b32_e32 v4, v8, v4366; GCN-IR-NEXT:    v_ashrrev_i32_e32 v8, 31, v6367; GCN-IR-NEXT:    v_or_b32_e32 v5, v9, v5368; GCN-IR-NEXT:    v_and_b32_e32 v6, 1, v8369; GCN-IR-NEXT:    v_and_b32_e32 v9, v8, v3370; GCN-IR-NEXT:    v_and_b32_e32 v8, v8, v2371; GCN-IR-NEXT:    v_sub_i32_e32 v0, vcc, v0, v8372; GCN-IR-NEXT:    v_subb_u32_e32 v1, vcc, v1, v9, vcc373; GCN-IR-NEXT:    v_add_i32_e32 v12, vcc, 1, v12374; GCN-IR-NEXT:    v_addc_u32_e32 v13, vcc, 0, v13, vcc375; GCN-IR-NEXT:    v_mov_b32_e32 v9, v7376; GCN-IR-NEXT:    s_or_b64 s[8:9], vcc, s[8:9]377; GCN-IR-NEXT:    v_mov_b32_e32 v8, v6378; GCN-IR-NEXT:    s_andn2_b64 exec, exec, s[8:9]379; GCN-IR-NEXT:    s_cbranch_execnz .LBB1_3380; GCN-IR-NEXT:  ; %bb.4: ; %Flow381; GCN-IR-NEXT:    s_or_b64 exec, exec, s[8:9]382; GCN-IR-NEXT:  .LBB1_5: ; %Flow4383; GCN-IR-NEXT:    s_or_b64 exec, exec, s[4:5]384; GCN-IR-NEXT:    v_lshl_b64 v[0:1], v[4:5], 1385; GCN-IR-NEXT:    v_or_b32_e32 v4, v7, v1386; GCN-IR-NEXT:    v_or_b32_e32 v5, v6, v0387; GCN-IR-NEXT:  .LBB1_6: ; %Flow5388; GCN-IR-NEXT:    s_or_b64 exec, exec, s[6:7]389; GCN-IR-NEXT:    v_mov_b32_e32 v0, v5390; GCN-IR-NEXT:    v_mov_b32_e32 v1, v4391; GCN-IR-NEXT:    s_setpc_b64 s[30:31]392  %result = udiv i64 %x, %y393  ret i64 %result394}395 396define amdgpu_kernel void @s_test_udiv24_64(ptr addrspace(1) %out, i64 %x, i64 %y) {397; GCN-LABEL: s_test_udiv24_64:398; GCN:       ; %bb.0:399; GCN-NEXT:    s_load_dword s6, s[4:5], 0xe400; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9401; GCN-NEXT:    s_mov_b32 s7, 0xf000402; GCN-NEXT:    s_waitcnt lgkmcnt(0)403; GCN-NEXT:    s_lshr_b32 s2, s6, 8404; GCN-NEXT:    v_cvt_f32_u32_e32 v0, s2405; GCN-NEXT:    s_lshr_b32 s2, s3, 8406; GCN-NEXT:    v_cvt_f32_u32_e32 v1, s2407; GCN-NEXT:    s_mov_b32 s6, -1408; GCN-NEXT:    v_rcp_iflag_f32_e32 v2, v0409; GCN-NEXT:    s_mov_b32 s4, s0410; GCN-NEXT:    s_mov_b32 s5, s1411; GCN-NEXT:    v_mul_f32_e32 v2, v1, v2412; GCN-NEXT:    v_trunc_f32_e32 v2, v2413; GCN-NEXT:    v_cvt_u32_f32_e32 v3, v2414; GCN-NEXT:    v_mad_f32 v1, -v2, v0, v1415; GCN-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v0416; GCN-NEXT:    v_mov_b32_e32 v1, 0417; GCN-NEXT:    v_addc_u32_e32 v0, vcc, 0, v3, vcc418; GCN-NEXT:    v_and_b32_e32 v0, 0xffffff, v0419; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0420; GCN-NEXT:    s_endpgm421;422; GCN-IR-LABEL: s_test_udiv24_64:423; GCN-IR:       ; %bb.0:424; GCN-IR-NEXT:    s_load_dword s6, s[4:5], 0xe425; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9426; GCN-IR-NEXT:    s_mov_b32 s7, 0xf000427; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)428; GCN-IR-NEXT:    s_lshr_b32 s2, s6, 8429; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v0, s2430; GCN-IR-NEXT:    s_lshr_b32 s2, s3, 8431; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v1, s2432; GCN-IR-NEXT:    s_mov_b32 s6, -1433; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v2, v0434; GCN-IR-NEXT:    s_mov_b32 s4, s0435; GCN-IR-NEXT:    s_mov_b32 s5, s1436; GCN-IR-NEXT:    v_mul_f32_e32 v2, v1, v2437; GCN-IR-NEXT:    v_trunc_f32_e32 v2, v2438; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v3, v2439; GCN-IR-NEXT:    v_mad_f32 v1, -v2, v0, v1440; GCN-IR-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v0441; GCN-IR-NEXT:    v_mov_b32_e32 v1, 0442; GCN-IR-NEXT:    v_addc_u32_e32 v0, vcc, 0, v3, vcc443; GCN-IR-NEXT:    v_and_b32_e32 v0, 0xffffff, v0444; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0445; GCN-IR-NEXT:    s_endpgm446  %1 = lshr i64 %x, 40447  %2 = lshr i64 %y, 40448  %result = udiv i64 %1, %2449  store i64 %result, ptr addrspace(1) %out450  ret void451}452 453define i64 @v_test_udiv24_i64(i64 %x, i64 %y) {454; GCN-LABEL: v_test_udiv24_i64:455; GCN:       ; %bb.0:456; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)457; GCN-NEXT:    v_lshrrev_b32_e32 v0, 8, v3458; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v0459; GCN-NEXT:    v_lshrrev_b32_e32 v1, 8, v1460; GCN-NEXT:    v_cvt_f32_u32_e32 v1, v1461; GCN-NEXT:    v_rcp_iflag_f32_e32 v2, v0462; GCN-NEXT:    v_mul_f32_e32 v2, v1, v2463; GCN-NEXT:    v_trunc_f32_e32 v2, v2464; GCN-NEXT:    v_cvt_u32_f32_e32 v3, v2465; GCN-NEXT:    v_mad_f32 v1, -v2, v0, v1466; GCN-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v0467; GCN-NEXT:    v_mov_b32_e32 v1, 0468; GCN-NEXT:    v_addc_u32_e32 v0, vcc, 0, v3, vcc469; GCN-NEXT:    v_and_b32_e32 v0, 0xffffff, v0470; GCN-NEXT:    s_setpc_b64 s[30:31]471;472; GCN-IR-LABEL: v_test_udiv24_i64:473; GCN-IR:       ; %bb.0:474; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)475; GCN-IR-NEXT:    v_lshrrev_b32_e32 v0, 8, v3476; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v0, v0477; GCN-IR-NEXT:    v_lshrrev_b32_e32 v1, 8, v1478; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v1, v1479; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v2, v0480; GCN-IR-NEXT:    v_mul_f32_e32 v2, v1, v2481; GCN-IR-NEXT:    v_trunc_f32_e32 v2, v2482; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v3, v2483; GCN-IR-NEXT:    v_mad_f32 v1, -v2, v0, v1484; GCN-IR-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v0485; GCN-IR-NEXT:    v_mov_b32_e32 v1, 0486; GCN-IR-NEXT:    v_addc_u32_e32 v0, vcc, 0, v3, vcc487; GCN-IR-NEXT:    v_and_b32_e32 v0, 0xffffff, v0488; GCN-IR-NEXT:    s_setpc_b64 s[30:31]489  %1 = lshr i64 %x, 40490  %2 = lshr i64 %y, 40491  %result = udiv i64 %1, %2492  ret i64 %result493}494 495define amdgpu_kernel void @s_test_udiv32_i64(ptr addrspace(1) %out, i64 %x, i64 %y) {496; GCN-LABEL: s_test_udiv32_i64:497; GCN:       ; %bb.0:498; GCN-NEXT:    s_load_dword s8, s[4:5], 0xe499; GCN-NEXT:    s_mov_b32 s7, 0xf000500; GCN-NEXT:    s_mov_b32 s6, -1501; GCN-NEXT:    s_waitcnt lgkmcnt(0)502; GCN-NEXT:    v_cvt_f32_u32_e32 v0, s8503; GCN-NEXT:    s_sub_i32 s0, 0, s8504; GCN-NEXT:    v_rcp_iflag_f32_e32 v0, v0505; GCN-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0506; GCN-NEXT:    v_cvt_u32_f32_e32 v0, v0507; GCN-NEXT:    v_mul_lo_u32 v1, s0, v0508; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9509; GCN-NEXT:    v_mul_hi_u32 v1, v0, v1510; GCN-NEXT:    s_waitcnt lgkmcnt(0)511; GCN-NEXT:    s_mov_b32 s4, s0512; GCN-NEXT:    s_mov_b32 s5, s1513; GCN-NEXT:    v_add_i32_e32 v0, vcc, v0, v1514; GCN-NEXT:    v_mul_hi_u32 v0, s3, v0515; GCN-NEXT:    v_readfirstlane_b32 s0, v0516; GCN-NEXT:    s_mul_i32 s0, s0, s8517; GCN-NEXT:    s_sub_i32 s0, s3, s0518; GCN-NEXT:    s_sub_i32 s1, s0, s8519; GCN-NEXT:    v_add_i32_e32 v1, vcc, 1, v0520; GCN-NEXT:    s_cmp_ge_u32 s0, s8521; GCN-NEXT:    s_cselect_b64 vcc, -1, 0522; GCN-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc523; GCN-NEXT:    s_cselect_b32 s0, s1, s0524; GCN-NEXT:    v_add_i32_e32 v1, vcc, 1, v0525; GCN-NEXT:    s_cmp_ge_u32 s0, s8526; GCN-NEXT:    s_cselect_b64 vcc, -1, 0527; GCN-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc528; GCN-NEXT:    v_mov_b32_e32 v1, 0529; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0530; GCN-NEXT:    s_endpgm531;532; GCN-IR-LABEL: s_test_udiv32_i64:533; GCN-IR:       ; %bb.0:534; GCN-IR-NEXT:    s_load_dword s8, s[4:5], 0xe535; GCN-IR-NEXT:    s_mov_b32 s7, 0xf000536; GCN-IR-NEXT:    s_mov_b32 s6, -1537; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)538; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v0, s8539; GCN-IR-NEXT:    s_sub_i32 s0, 0, s8540; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v0, v0541; GCN-IR-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0542; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v0, v0543; GCN-IR-NEXT:    v_mul_lo_u32 v1, s0, v0544; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9545; GCN-IR-NEXT:    v_mul_hi_u32 v1, v0, v1546; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)547; GCN-IR-NEXT:    s_mov_b32 s4, s0548; GCN-IR-NEXT:    s_mov_b32 s5, s1549; GCN-IR-NEXT:    v_add_i32_e32 v0, vcc, v0, v1550; GCN-IR-NEXT:    v_mul_hi_u32 v0, s3, v0551; GCN-IR-NEXT:    v_readfirstlane_b32 s0, v0552; GCN-IR-NEXT:    s_mul_i32 s0, s0, s8553; GCN-IR-NEXT:    s_sub_i32 s0, s3, s0554; GCN-IR-NEXT:    s_sub_i32 s1, s0, s8555; GCN-IR-NEXT:    v_add_i32_e32 v1, vcc, 1, v0556; GCN-IR-NEXT:    s_cmp_ge_u32 s0, s8557; GCN-IR-NEXT:    s_cselect_b64 vcc, -1, 0558; GCN-IR-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc559; GCN-IR-NEXT:    s_cselect_b32 s0, s1, s0560; GCN-IR-NEXT:    v_add_i32_e32 v1, vcc, 1, v0561; GCN-IR-NEXT:    s_cmp_ge_u32 s0, s8562; GCN-IR-NEXT:    s_cselect_b64 vcc, -1, 0563; GCN-IR-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc564; GCN-IR-NEXT:    v_mov_b32_e32 v1, 0565; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0566; GCN-IR-NEXT:    s_endpgm567  %1 = lshr i64 %x, 32568  %2 = lshr i64 %y, 32569  %result = udiv i64 %1, %2570  store i64 %result, ptr addrspace(1) %out571  ret void572}573 574define amdgpu_kernel void @s_test_udiv31_i64(ptr addrspace(1) %out, i64 %x, i64 %y) {575; GCN-LABEL: s_test_udiv31_i64:576; GCN:       ; %bb.0:577; GCN-NEXT:    s_load_dword s0, s[4:5], 0xe578; GCN-NEXT:    s_mov_b32 s7, 0xf000579; GCN-NEXT:    s_mov_b32 s6, -1580; GCN-NEXT:    s_waitcnt lgkmcnt(0)581; GCN-NEXT:    s_lshr_b32 s8, s0, 1582; GCN-NEXT:    v_cvt_f32_u32_e32 v0, s8583; GCN-NEXT:    s_sub_i32 s0, 0, s8584; GCN-NEXT:    v_rcp_iflag_f32_e32 v0, v0585; GCN-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0586; GCN-NEXT:    v_cvt_u32_f32_e32 v0, v0587; GCN-NEXT:    v_mul_lo_u32 v1, s0, v0588; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9589; GCN-NEXT:    v_mul_hi_u32 v1, v0, v1590; GCN-NEXT:    s_waitcnt lgkmcnt(0)591; GCN-NEXT:    s_lshr_b32 s2, s3, 1592; GCN-NEXT:    s_mov_b32 s4, s0593; GCN-NEXT:    v_add_i32_e32 v0, vcc, v0, v1594; GCN-NEXT:    v_mul_hi_u32 v0, s2, v0595; GCN-NEXT:    s_mov_b32 s5, s1596; GCN-NEXT:    v_readfirstlane_b32 s0, v0597; GCN-NEXT:    s_mul_i32 s0, s0, s8598; GCN-NEXT:    s_sub_i32 s0, s2, s0599; GCN-NEXT:    s_sub_i32 s1, s0, s8600; GCN-NEXT:    v_add_i32_e32 v1, vcc, 1, v0601; GCN-NEXT:    s_cmp_ge_u32 s0, s8602; GCN-NEXT:    s_cselect_b64 vcc, -1, 0603; GCN-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc604; GCN-NEXT:    s_cselect_b32 s0, s1, s0605; GCN-NEXT:    v_add_i32_e32 v1, vcc, 1, v0606; GCN-NEXT:    s_cmp_ge_u32 s0, s8607; GCN-NEXT:    s_cselect_b64 vcc, -1, 0608; GCN-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc609; GCN-NEXT:    v_mov_b32_e32 v1, 0610; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0611; GCN-NEXT:    s_endpgm612;613; GCN-IR-LABEL: s_test_udiv31_i64:614; GCN-IR:       ; %bb.0:615; GCN-IR-NEXT:    s_load_dword s0, s[4:5], 0xe616; GCN-IR-NEXT:    s_mov_b32 s7, 0xf000617; GCN-IR-NEXT:    s_mov_b32 s6, -1618; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)619; GCN-IR-NEXT:    s_lshr_b32 s8, s0, 1620; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v0, s8621; GCN-IR-NEXT:    s_sub_i32 s0, 0, s8622; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v0, v0623; GCN-IR-NEXT:    v_mul_f32_e32 v0, 0x4f7ffffe, v0624; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v0, v0625; GCN-IR-NEXT:    v_mul_lo_u32 v1, s0, v0626; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9627; GCN-IR-NEXT:    v_mul_hi_u32 v1, v0, v1628; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)629; GCN-IR-NEXT:    s_lshr_b32 s2, s3, 1630; GCN-IR-NEXT:    s_mov_b32 s4, s0631; GCN-IR-NEXT:    v_add_i32_e32 v0, vcc, v0, v1632; GCN-IR-NEXT:    v_mul_hi_u32 v0, s2, v0633; GCN-IR-NEXT:    s_mov_b32 s5, s1634; GCN-IR-NEXT:    v_readfirstlane_b32 s0, v0635; GCN-IR-NEXT:    s_mul_i32 s0, s0, s8636; GCN-IR-NEXT:    s_sub_i32 s0, s2, s0637; GCN-IR-NEXT:    s_sub_i32 s1, s0, s8638; GCN-IR-NEXT:    v_add_i32_e32 v1, vcc, 1, v0639; GCN-IR-NEXT:    s_cmp_ge_u32 s0, s8640; GCN-IR-NEXT:    s_cselect_b64 vcc, -1, 0641; GCN-IR-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc642; GCN-IR-NEXT:    s_cselect_b32 s0, s1, s0643; GCN-IR-NEXT:    v_add_i32_e32 v1, vcc, 1, v0644; GCN-IR-NEXT:    s_cmp_ge_u32 s0, s8645; GCN-IR-NEXT:    s_cselect_b64 vcc, -1, 0646; GCN-IR-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc647; GCN-IR-NEXT:    v_mov_b32_e32 v1, 0648; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0649; GCN-IR-NEXT:    s_endpgm650  %1 = lshr i64 %x, 33651  %2 = lshr i64 %y, 33652  %result = udiv i64 %1, %2653  store i64 %result, ptr addrspace(1) %out654  ret void655}656 657define amdgpu_kernel void @s_test_udiv23_i64(ptr addrspace(1) %out, i64 %x, i64 %y) {658; GCN-LABEL: s_test_udiv23_i64:659; GCN:       ; %bb.0:660; GCN-NEXT:    s_load_dword s6, s[4:5], 0xe661; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9662; GCN-NEXT:    s_mov_b32 s7, 0xf000663; GCN-NEXT:    s_waitcnt lgkmcnt(0)664; GCN-NEXT:    s_lshr_b32 s2, s6, 9665; GCN-NEXT:    v_cvt_f32_u32_e32 v0, s2666; GCN-NEXT:    s_lshr_b32 s2, s3, 9667; GCN-NEXT:    v_cvt_f32_u32_e32 v1, s2668; GCN-NEXT:    s_mov_b32 s6, -1669; GCN-NEXT:    v_rcp_iflag_f32_e32 v2, v0670; GCN-NEXT:    s_mov_b32 s4, s0671; GCN-NEXT:    s_mov_b32 s5, s1672; GCN-NEXT:    v_mul_f32_e32 v2, v1, v2673; GCN-NEXT:    v_trunc_f32_e32 v2, v2674; GCN-NEXT:    v_cvt_u32_f32_e32 v3, v2675; GCN-NEXT:    v_mad_f32 v1, -v2, v0, v1676; GCN-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v0677; GCN-NEXT:    v_mov_b32_e32 v1, 0678; GCN-NEXT:    v_addc_u32_e32 v0, vcc, 0, v3, vcc679; GCN-NEXT:    v_and_b32_e32 v0, 0x7fffff, v0680; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0681; GCN-NEXT:    s_endpgm682;683; GCN-IR-LABEL: s_test_udiv23_i64:684; GCN-IR:       ; %bb.0:685; GCN-IR-NEXT:    s_load_dword s6, s[4:5], 0xe686; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9687; GCN-IR-NEXT:    s_mov_b32 s7, 0xf000688; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)689; GCN-IR-NEXT:    s_lshr_b32 s2, s6, 9690; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v0, s2691; GCN-IR-NEXT:    s_lshr_b32 s2, s3, 9692; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v1, s2693; GCN-IR-NEXT:    s_mov_b32 s6, -1694; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v2, v0695; GCN-IR-NEXT:    s_mov_b32 s4, s0696; GCN-IR-NEXT:    s_mov_b32 s5, s1697; GCN-IR-NEXT:    v_mul_f32_e32 v2, v1, v2698; GCN-IR-NEXT:    v_trunc_f32_e32 v2, v2699; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v3, v2700; GCN-IR-NEXT:    v_mad_f32 v1, -v2, v0, v1701; GCN-IR-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v0702; GCN-IR-NEXT:    v_mov_b32_e32 v1, 0703; GCN-IR-NEXT:    v_addc_u32_e32 v0, vcc, 0, v3, vcc704; GCN-IR-NEXT:    v_and_b32_e32 v0, 0x7fffff, v0705; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0706; GCN-IR-NEXT:    s_endpgm707  %1 = lshr i64 %x, 41708  %2 = lshr i64 %y, 41709  %result = udiv i64 %1, %2710  store i64 %result, ptr addrspace(1) %out711  ret void712}713 714define amdgpu_kernel void @s_test_udiv24_i48(ptr addrspace(1) %out, i48 %x, i48 %y) {715; GCN-LABEL: s_test_udiv24_i48:716; GCN:       ; %bb.0:717; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9718; GCN-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0xd719; GCN-NEXT:    v_mov_b32_e32 v3, 0720; GCN-NEXT:    s_waitcnt lgkmcnt(0)721; GCN-NEXT:    s_and_b32 s3, s3, 0xffff722; GCN-NEXT:    s_and_b32 s5, s5, 0xffff723; GCN-NEXT:    s_and_b32 s4, s4, 0xff000000724; GCN-NEXT:    s_lshr_b64 s[4:5], s[4:5], 24725; GCN-NEXT:    v_cvt_f32_u32_e32 v0, s4726; GCN-NEXT:    s_and_b32 s2, s2, 0xff000000727; GCN-NEXT:    s_lshr_b64 s[2:3], s[2:3], 24728; GCN-NEXT:    v_cvt_f32_u32_e32 v1, s2729; GCN-NEXT:    v_rcp_iflag_f32_e32 v2, v0730; GCN-NEXT:    s_mov_b32 s3, 0xf000731; GCN-NEXT:    s_mov_b32 s2, -1732; GCN-NEXT:    v_mul_f32_e32 v2, v1, v2733; GCN-NEXT:    v_trunc_f32_e32 v2, v2734; GCN-NEXT:    v_cvt_u32_f32_e32 v4, v2735; GCN-NEXT:    v_mad_f32 v1, -v2, v0, v1736; GCN-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v0737; GCN-NEXT:    v_addc_u32_e32 v0, vcc, 0, v4, vcc738; GCN-NEXT:    v_and_b32_e32 v0, 0xffffff, v0739; GCN-NEXT:    buffer_store_short v3, off, s[0:3], 0 offset:4740; GCN-NEXT:    buffer_store_dword v0, off, s[0:3], 0741; GCN-NEXT:    s_endpgm742;743; GCN-IR-LABEL: s_test_udiv24_i48:744; GCN-IR:       ; %bb.0:745; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9746; GCN-IR-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0xd747; GCN-IR-NEXT:    v_mov_b32_e32 v3, 0748; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)749; GCN-IR-NEXT:    s_and_b32 s3, s3, 0xffff750; GCN-IR-NEXT:    s_and_b32 s5, s5, 0xffff751; GCN-IR-NEXT:    s_and_b32 s4, s4, 0xff000000752; GCN-IR-NEXT:    s_lshr_b64 s[4:5], s[4:5], 24753; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v0, s4754; GCN-IR-NEXT:    s_and_b32 s2, s2, 0xff000000755; GCN-IR-NEXT:    s_lshr_b64 s[2:3], s[2:3], 24756; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v1, s2757; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v2, v0758; GCN-IR-NEXT:    s_mov_b32 s3, 0xf000759; GCN-IR-NEXT:    s_mov_b32 s2, -1760; GCN-IR-NEXT:    v_mul_f32_e32 v2, v1, v2761; GCN-IR-NEXT:    v_trunc_f32_e32 v2, v2762; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v4, v2763; GCN-IR-NEXT:    v_mad_f32 v1, -v2, v0, v1764; GCN-IR-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v0765; GCN-IR-NEXT:    v_addc_u32_e32 v0, vcc, 0, v4, vcc766; GCN-IR-NEXT:    v_and_b32_e32 v0, 0xffffff, v0767; GCN-IR-NEXT:    buffer_store_short v3, off, s[0:3], 0 offset:4768; GCN-IR-NEXT:    buffer_store_dword v0, off, s[0:3], 0769; GCN-IR-NEXT:    s_endpgm770  %1 = lshr i48 %x, 24771  %2 = lshr i48 %y, 24772  %result = udiv i48 %1, %2773  store i48 %result, ptr addrspace(1) %out774  ret void775}776 777define amdgpu_kernel void @s_test_udiv_k_num_i64(ptr addrspace(1) %out, i64 %x) {778; GCN-LABEL: s_test_udiv_k_num_i64:779; GCN:       ; %bb.0:780; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9781; GCN-NEXT:    s_waitcnt lgkmcnt(0)782; GCN-NEXT:    v_cvt_f32_u32_e32 v0, s2783; GCN-NEXT:    v_cvt_f32_u32_e32 v1, s3784; GCN-NEXT:    s_sub_u32 s4, 0, s2785; GCN-NEXT:    s_subb_u32 s5, 0, s3786; GCN-NEXT:    v_madmk_f32 v0, v1, 0x4f800000, v0787; GCN-NEXT:    v_rcp_f32_e32 v0, v0788; GCN-NEXT:    v_mul_f32_e32 v0, 0x5f7ffffc, v0789; GCN-NEXT:    v_mul_f32_e32 v1, 0x2f800000, v0790; GCN-NEXT:    v_trunc_f32_e32 v1, v1791; GCN-NEXT:    v_madmk_f32 v0, v1, 0xcf800000, v0792; GCN-NEXT:    v_cvt_u32_f32_e32 v0, v0793; GCN-NEXT:    v_cvt_u32_f32_e32 v1, v1794; GCN-NEXT:    v_mul_hi_u32 v2, s4, v0795; GCN-NEXT:    v_readfirstlane_b32 s6, v1796; GCN-NEXT:    v_readfirstlane_b32 s7, v0797; GCN-NEXT:    s_mul_i32 s8, s4, s6798; GCN-NEXT:    v_readfirstlane_b32 s11, v2799; GCN-NEXT:    s_mul_i32 s9, s5, s7800; GCN-NEXT:    s_mul_i32 s10, s4, s7801; GCN-NEXT:    s_add_i32 s8, s11, s8802; GCN-NEXT:    v_mul_hi_u32 v3, v0, s10803; GCN-NEXT:    s_add_i32 s8, s8, s9804; GCN-NEXT:    v_mul_hi_u32 v0, v0, s8805; GCN-NEXT:    v_mul_hi_u32 v4, v1, s10806; GCN-NEXT:    v_readfirstlane_b32 s9, v3807; GCN-NEXT:    s_mul_i32 s12, s7, s8808; GCN-NEXT:    v_mul_hi_u32 v1, v1, s8809; GCN-NEXT:    s_add_u32 s9, s9, s12810; GCN-NEXT:    v_readfirstlane_b32 s12, v0811; GCN-NEXT:    s_mul_i32 s10, s6, s10812; GCN-NEXT:    s_addc_u32 s12, 0, s12813; GCN-NEXT:    v_readfirstlane_b32 s11, v4814; GCN-NEXT:    s_add_u32 s9, s9, s10815; GCN-NEXT:    v_readfirstlane_b32 s13, v1816; GCN-NEXT:    s_addc_u32 s9, s12, s11817; GCN-NEXT:    s_mul_i32 s8, s6, s8818; GCN-NEXT:    s_addc_u32 s10, s13, 0819; GCN-NEXT:    s_add_u32 s8, s9, s8820; GCN-NEXT:    s_addc_u32 s9, 0, s10821; GCN-NEXT:    s_add_u32 s8, s7, s8822; GCN-NEXT:    v_mov_b32_e32 v0, s8823; GCN-NEXT:    v_mul_hi_u32 v0, s4, v0824; GCN-NEXT:    s_addc_u32 s6, s6, s9825; GCN-NEXT:    s_mul_i32 s9, s4, s6826; GCN-NEXT:    s_mul_i32 s5, s5, s8827; GCN-NEXT:    v_readfirstlane_b32 s10, v0828; GCN-NEXT:    s_add_i32 s9, s10, s9829; GCN-NEXT:    s_mul_i32 s4, s4, s8830; GCN-NEXT:    s_add_i32 s5, s9, s5831; GCN-NEXT:    v_mov_b32_e32 v2, s4832; GCN-NEXT:    v_mov_b32_e32 v0, s5833; GCN-NEXT:    v_mul_hi_u32 v3, s6, v2834; GCN-NEXT:    v_mul_hi_u32 v2, s8, v2835; GCN-NEXT:    v_mul_hi_u32 v1, s6, v0836; GCN-NEXT:    v_mul_hi_u32 v0, s8, v0837; GCN-NEXT:    s_mul_i32 s10, s8, s5838; GCN-NEXT:    v_readfirstlane_b32 s12, v2839; GCN-NEXT:    s_add_u32 s10, s12, s10840; GCN-NEXT:    v_readfirstlane_b32 s11, v0841; GCN-NEXT:    s_mul_i32 s4, s6, s4842; GCN-NEXT:    s_addc_u32 s11, 0, s11843; GCN-NEXT:    v_readfirstlane_b32 s9, v3844; GCN-NEXT:    s_add_u32 s4, s10, s4845; GCN-NEXT:    s_addc_u32 s4, s11, s9846; GCN-NEXT:    v_readfirstlane_b32 s9, v1847; GCN-NEXT:    s_addc_u32 s9, s9, 0848; GCN-NEXT:    s_mul_i32 s5, s6, s5849; GCN-NEXT:    s_add_u32 s4, s4, s5850; GCN-NEXT:    s_addc_u32 s5, 0, s9851; GCN-NEXT:    s_add_u32 s4, s8, s4852; GCN-NEXT:    s_addc_u32 s5, s6, s5853; GCN-NEXT:    v_mul_hi_u32 v1, s4, 24854; GCN-NEXT:    v_mul_hi_u32 v0, s5, 24855; GCN-NEXT:    s_mul_i32 s5, s5, 24856; GCN-NEXT:    s_mov_b32 s7, 0xf000857; GCN-NEXT:    v_readfirstlane_b32 s8, v1858; GCN-NEXT:    v_readfirstlane_b32 s4, v0859; GCN-NEXT:    s_add_u32 s5, s8, s5860; GCN-NEXT:    s_addc_u32 s8, 0, s4861; GCN-NEXT:    v_mov_b32_e32 v0, s8862; GCN-NEXT:    v_mul_hi_u32 v0, s2, v0863; GCN-NEXT:    s_mov_b32 s4, s0864; GCN-NEXT:    s_mov_b32 s5, s1865; GCN-NEXT:    s_mul_i32 s0, s3, s8866; GCN-NEXT:    v_readfirstlane_b32 s1, v0867; GCN-NEXT:    s_add_i32 s9, s1, s0868; GCN-NEXT:    s_sub_i32 s10, 0, s9869; GCN-NEXT:    s_mul_i32 s0, s2, s8870; GCN-NEXT:    s_sub_u32 s11, 24, s0871; GCN-NEXT:    s_cselect_b64 s[0:1], -1, 0872; GCN-NEXT:    s_subb_u32 s10, s10, s3873; GCN-NEXT:    s_sub_u32 s12, s11, s2874; GCN-NEXT:    s_subb_u32 s10, s10, 0875; GCN-NEXT:    s_cmp_ge_u32 s10, s3876; GCN-NEXT:    s_cselect_b32 s13, -1, 0877; GCN-NEXT:    s_cmp_ge_u32 s12, s2878; GCN-NEXT:    s_cselect_b32 s12, -1, 0879; GCN-NEXT:    s_cmp_eq_u32 s10, s3880; GCN-NEXT:    s_cselect_b32 s10, s12, s13881; GCN-NEXT:    s_add_u32 s12, s8, 1882; GCN-NEXT:    s_addc_u32 s13, 0, 0883; GCN-NEXT:    s_add_u32 s14, s8, 2884; GCN-NEXT:    s_addc_u32 s15, 0, 0885; GCN-NEXT:    s_cmp_lg_u32 s10, 0886; GCN-NEXT:    s_cselect_b32 s10, s14, s12887; GCN-NEXT:    s_cselect_b32 s12, s15, s13888; GCN-NEXT:    s_or_b32 s0, s0, s1889; GCN-NEXT:    s_subb_u32 s0, 0, s9890; GCN-NEXT:    s_cmp_ge_u32 s0, s3891; GCN-NEXT:    s_cselect_b32 s1, -1, 0892; GCN-NEXT:    s_cmp_ge_u32 s11, s2893; GCN-NEXT:    s_cselect_b32 s2, -1, 0894; GCN-NEXT:    s_cmp_eq_u32 s0, s3895; GCN-NEXT:    s_cselect_b32 s0, s2, s1896; GCN-NEXT:    s_cmp_lg_u32 s0, 0897; GCN-NEXT:    s_cselect_b32 s0, s12, 0898; GCN-NEXT:    s_cselect_b32 s1, s10, s8899; GCN-NEXT:    s_mov_b32 s6, -1900; GCN-NEXT:    v_mov_b32_e32 v0, s1901; GCN-NEXT:    v_mov_b32_e32 v1, s0902; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0903; GCN-NEXT:    s_endpgm904;905; GCN-IR-LABEL: s_test_udiv_k_num_i64:906; GCN-IR:       ; %bb.0: ; %_udiv-special-cases907; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9908; GCN-IR-NEXT:    s_mov_b64 s[4:5], 0909; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)910; GCN-IR-NEXT:    s_flbit_i32_b64 s14, s[2:3]911; GCN-IR-NEXT:    s_add_u32 s8, s14, 0xffffffc5912; GCN-IR-NEXT:    s_addc_u32 s9, 0, -1913; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[6:7], s[2:3], 0914; GCN-IR-NEXT:    v_cmp_gt_u64_e64 s[10:11], s[8:9], 63915; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[12:13], s[8:9], 63916; GCN-IR-NEXT:    s_or_b64 s[10:11], s[6:7], s[10:11]917; GCN-IR-NEXT:    s_and_b64 s[6:7], s[10:11], exec918; GCN-IR-NEXT:    s_cselect_b32 s6, 0, 24919; GCN-IR-NEXT:    s_or_b64 s[10:11], s[10:11], s[12:13]920; GCN-IR-NEXT:    s_andn2_b64 vcc, exec, s[10:11]921; GCN-IR-NEXT:    s_mov_b32 s7, 0922; GCN-IR-NEXT:    s_cbranch_vccz .LBB8_5923; GCN-IR-NEXT:  ; %bb.1: ; %udiv-bb1924; GCN-IR-NEXT:    s_add_u32 s10, s8, 1925; GCN-IR-NEXT:    s_addc_u32 s6, s9, 0926; GCN-IR-NEXT:    s_cselect_b64 s[6:7], -1, 0927; GCN-IR-NEXT:    s_sub_i32 s8, 63, s8928; GCN-IR-NEXT:    s_andn2_b64 vcc, exec, s[6:7]929; GCN-IR-NEXT:    s_lshl_b64 s[6:7], 24, s8930; GCN-IR-NEXT:    s_cbranch_vccz .LBB8_4931; GCN-IR-NEXT:  ; %bb.2: ; %udiv-preheader932; GCN-IR-NEXT:    s_lshr_b64 s[10:11], 24, s10933; GCN-IR-NEXT:    s_add_u32 s12, s2, -1934; GCN-IR-NEXT:    s_addc_u32 s13, s3, -1935; GCN-IR-NEXT:    s_sub_u32 s14, 58, s14936; GCN-IR-NEXT:    s_subb_u32 s15, 0, 0937; GCN-IR-NEXT:    s_mov_b64 s[8:9], 0938; GCN-IR-NEXT:    s_mov_b32 s5, 0939; GCN-IR-NEXT:  .LBB8_3: ; %udiv-do-while940; GCN-IR-NEXT:    ; =>This Inner Loop Header: Depth=1941; GCN-IR-NEXT:    s_lshl_b64 s[10:11], s[10:11], 1942; GCN-IR-NEXT:    s_lshr_b32 s4, s7, 31943; GCN-IR-NEXT:    s_lshl_b64 s[6:7], s[6:7], 1944; GCN-IR-NEXT:    s_or_b64 s[10:11], s[10:11], s[4:5]945; GCN-IR-NEXT:    s_or_b64 s[6:7], s[8:9], s[6:7]946; GCN-IR-NEXT:    s_sub_u32 s4, s12, s10947; GCN-IR-NEXT:    s_subb_u32 s4, s13, s11948; GCN-IR-NEXT:    s_ashr_i32 s8, s4, 31949; GCN-IR-NEXT:    s_mov_b32 s9, s8950; GCN-IR-NEXT:    s_and_b32 s4, s8, 1951; GCN-IR-NEXT:    s_and_b64 s[16:17], s[8:9], s[2:3]952; GCN-IR-NEXT:    s_sub_u32 s10, s10, s16953; GCN-IR-NEXT:    s_subb_u32 s11, s11, s17954; GCN-IR-NEXT:    s_add_u32 s14, s14, 1955; GCN-IR-NEXT:    s_addc_u32 s15, s15, 0956; GCN-IR-NEXT:    s_cselect_b64 s[16:17], -1, 0957; GCN-IR-NEXT:    s_mov_b64 s[8:9], s[4:5]958; GCN-IR-NEXT:    s_and_b64 vcc, exec, s[16:17]959; GCN-IR-NEXT:    s_cbranch_vccz .LBB8_3960; GCN-IR-NEXT:  .LBB8_4: ; %Flow6961; GCN-IR-NEXT:    s_lshl_b64 s[2:3], s[6:7], 1962; GCN-IR-NEXT:    s_or_b64 s[6:7], s[4:5], s[2:3]963; GCN-IR-NEXT:  .LBB8_5: ; %udiv-end964; GCN-IR-NEXT:    v_mov_b32_e32 v0, s6965; GCN-IR-NEXT:    s_mov_b32 s3, 0xf000966; GCN-IR-NEXT:    s_mov_b32 s2, -1967; GCN-IR-NEXT:    v_mov_b32_e32 v1, s7968; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0969; GCN-IR-NEXT:    s_endpgm970  %result = udiv i64 24, %x971  store i64 %result, ptr addrspace(1) %out972  ret void973}974 975; define i64 @v_test_udiv_k_num_i64(i64 %x) {976;   %result = udiv i64 24, %x977;   ret i64 %result978; }979 980define i64 @v_test_udiv_pow2_k_num_i64(i64 %x) {981; GCN-LABEL: v_test_udiv_pow2_k_num_i64:982; GCN:       ; %bb.0:983; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)984; GCN-NEXT:    v_cvt_f32_u32_e32 v2, v0985; GCN-NEXT:    v_cvt_f32_u32_e32 v3, v1986; GCN-NEXT:    v_sub_i32_e32 v4, vcc, 0, v0987; GCN-NEXT:    v_subb_u32_e32 v5, vcc, 0, v1, vcc988; GCN-NEXT:    v_madmk_f32 v2, v3, 0x4f800000, v2989; GCN-NEXT:    v_rcp_f32_e32 v2, v2990; GCN-NEXT:    v_mul_f32_e32 v2, 0x5f7ffffc, v2991; GCN-NEXT:    v_mul_f32_e32 v3, 0x2f800000, v2992; GCN-NEXT:    v_trunc_f32_e32 v3, v3993; GCN-NEXT:    v_madmk_f32 v2, v3, 0xcf800000, v2994; GCN-NEXT:    v_cvt_u32_f32_e32 v3, v3995; GCN-NEXT:    v_cvt_u32_f32_e32 v2, v2996; GCN-NEXT:    v_mul_lo_u32 v6, v4, v3997; GCN-NEXT:    v_mul_hi_u32 v7, v4, v2998; GCN-NEXT:    v_mul_lo_u32 v8, v5, v2999; GCN-NEXT:    v_mul_lo_u32 v9, v4, v21000; GCN-NEXT:    v_add_i32_e32 v6, vcc, v7, v61001; GCN-NEXT:    v_add_i32_e32 v6, vcc, v6, v81002; GCN-NEXT:    v_mul_hi_u32 v7, v2, v91003; GCN-NEXT:    v_mul_lo_u32 v8, v2, v61004; GCN-NEXT:    v_mul_hi_u32 v10, v2, v61005; GCN-NEXT:    v_mul_hi_u32 v11, v3, v61006; GCN-NEXT:    v_mul_lo_u32 v6, v3, v61007; GCN-NEXT:    v_add_i32_e32 v7, vcc, v7, v81008; GCN-NEXT:    v_addc_u32_e32 v8, vcc, 0, v10, vcc1009; GCN-NEXT:    v_mul_lo_u32 v10, v3, v91010; GCN-NEXT:    v_mul_hi_u32 v9, v3, v91011; GCN-NEXT:    v_add_i32_e32 v7, vcc, v7, v101012; GCN-NEXT:    v_addc_u32_e32 v7, vcc, v8, v9, vcc1013; GCN-NEXT:    v_addc_u32_e32 v8, vcc, 0, v11, vcc1014; GCN-NEXT:    v_add_i32_e32 v6, vcc, v7, v61015; GCN-NEXT:    v_addc_u32_e32 v7, vcc, 0, v8, vcc1016; GCN-NEXT:    v_add_i32_e32 v2, vcc, v2, v61017; GCN-NEXT:    v_addc_u32_e32 v3, vcc, v3, v7, vcc1018; GCN-NEXT:    v_mul_lo_u32 v6, v4, v31019; GCN-NEXT:    v_mul_hi_u32 v7, v4, v21020; GCN-NEXT:    v_mul_lo_u32 v5, v5, v21021; GCN-NEXT:    v_mul_lo_u32 v4, v4, v21022; GCN-NEXT:    v_add_i32_e32 v6, vcc, v7, v61023; GCN-NEXT:    v_add_i32_e32 v5, vcc, v6, v51024; GCN-NEXT:    v_mul_lo_u32 v8, v2, v51025; GCN-NEXT:    v_mul_hi_u32 v9, v2, v41026; GCN-NEXT:    v_mul_hi_u32 v10, v2, v51027; GCN-NEXT:    v_mul_hi_u32 v7, v3, v41028; GCN-NEXT:    v_mul_lo_u32 v4, v3, v41029; GCN-NEXT:    v_mul_hi_u32 v6, v3, v51030; GCN-NEXT:    v_add_i32_e32 v8, vcc, v9, v81031; GCN-NEXT:    v_addc_u32_e32 v9, vcc, 0, v10, vcc1032; GCN-NEXT:    v_mul_lo_u32 v5, v3, v51033; GCN-NEXT:    v_add_i32_e32 v4, vcc, v8, v41034; GCN-NEXT:    v_addc_u32_e32 v4, vcc, v9, v7, vcc1035; GCN-NEXT:    v_addc_u32_e32 v6, vcc, 0, v6, vcc1036; GCN-NEXT:    v_add_i32_e32 v4, vcc, v4, v51037; GCN-NEXT:    v_addc_u32_e32 v5, vcc, 0, v6, vcc1038; GCN-NEXT:    v_add_i32_e32 v2, vcc, v2, v41039; GCN-NEXT:    v_addc_u32_e32 v2, vcc, v3, v5, vcc1040; GCN-NEXT:    v_lshrrev_b32_e32 v2, 17, v21041; GCN-NEXT:    v_mul_lo_u32 v3, v1, v21042; GCN-NEXT:    v_mul_hi_u32 v4, v0, v21043; GCN-NEXT:    v_add_i32_e32 v3, vcc, v4, v31044; GCN-NEXT:    v_mul_lo_u32 v4, v0, v21045; GCN-NEXT:    v_sub_i32_e32 v5, vcc, 0, v31046; GCN-NEXT:    v_sub_i32_e32 v4, vcc, 0x8000, v41047; GCN-NEXT:    v_subb_u32_e64 v5, s[4:5], v5, v1, vcc1048; GCN-NEXT:    v_sub_i32_e64 v6, s[4:5], v4, v01049; GCN-NEXT:    v_subbrev_u32_e64 v5, s[4:5], 0, v5, s[4:5]1050; GCN-NEXT:    v_cmp_ge_u32_e64 s[4:5], v5, v11051; GCN-NEXT:    v_cndmask_b32_e64 v7, 0, -1, s[4:5]1052; GCN-NEXT:    v_cmp_ge_u32_e64 s[4:5], v6, v01053; GCN-NEXT:    v_cndmask_b32_e64 v6, 0, -1, s[4:5]1054; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], v5, v11055; GCN-NEXT:    v_cndmask_b32_e64 v5, v7, v6, s[4:5]1056; GCN-NEXT:    v_add_i32_e64 v6, s[4:5], 2, v21057; GCN-NEXT:    v_addc_u32_e64 v7, s[4:5], 0, 0, s[4:5]1058; GCN-NEXT:    v_add_i32_e64 v8, s[4:5], 1, v21059; GCN-NEXT:    v_addc_u32_e64 v9, s[4:5], 0, 0, s[4:5]1060; GCN-NEXT:    v_subb_u32_e32 v3, vcc, 0, v3, vcc1061; GCN-NEXT:    v_cmp_ne_u32_e64 s[4:5], 0, v51062; GCN-NEXT:    v_cmp_ge_u32_e32 vcc, v3, v11063; GCN-NEXT:    v_cndmask_b32_e64 v5, v8, v6, s[4:5]1064; GCN-NEXT:    v_cndmask_b32_e64 v6, 0, -1, vcc1065; GCN-NEXT:    v_cmp_ge_u32_e32 vcc, v4, v01066; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, -1, vcc1067; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v11068; GCN-NEXT:    v_cndmask_b32_e32 v0, v6, v0, vcc1069; GCN-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v01070; GCN-NEXT:    v_cndmask_b32_e64 v1, v9, v7, s[4:5]1071; GCN-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc1072; GCN-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc1073; GCN-NEXT:    s_setpc_b64 s[30:31]1074;1075; GCN-IR-LABEL: v_test_udiv_pow2_k_num_i64:1076; GCN-IR:       ; %bb.0: ; %_udiv-special-cases1077; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1078; GCN-IR-NEXT:    v_ffbh_u32_e32 v2, v01079; GCN-IR-NEXT:    v_add_i32_e32 v2, vcc, 32, v21080; GCN-IR-NEXT:    v_ffbh_u32_e32 v3, v11081; GCN-IR-NEXT:    v_min_u32_e32 v8, v2, v31082; GCN-IR-NEXT:    v_add_i32_e32 v4, vcc, 0xffffffd0, v81083; GCN-IR-NEXT:    v_addc_u32_e64 v5, s[6:7], 0, -1, vcc1084; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[4:5], 0, v[0:1]1085; GCN-IR-NEXT:    v_cmp_lt_u64_e32 vcc, 63, v[4:5]1086; GCN-IR-NEXT:    v_cmp_ne_u64_e64 s[6:7], 63, v[4:5]1087; GCN-IR-NEXT:    v_mov_b32_e32 v3, 0x80001088; GCN-IR-NEXT:    s_or_b64 s[4:5], s[4:5], vcc1089; GCN-IR-NEXT:    v_cndmask_b32_e64 v3, v3, 0, s[4:5]1090; GCN-IR-NEXT:    s_xor_b64 s[4:5], s[4:5], -11091; GCN-IR-NEXT:    v_mov_b32_e32 v2, 01092; GCN-IR-NEXT:    s_and_b64 s[4:5], s[4:5], s[6:7]1093; GCN-IR-NEXT:    s_and_saveexec_b64 s[6:7], s[4:5]1094; GCN-IR-NEXT:    s_cbranch_execz .LBB9_61095; GCN-IR-NEXT:  ; %bb.1: ; %udiv-bb11096; GCN-IR-NEXT:    v_add_i32_e32 v6, vcc, 1, v41097; GCN-IR-NEXT:    v_addc_u32_e32 v2, vcc, 0, v5, vcc1098; GCN-IR-NEXT:    v_sub_i32_e64 v2, s[4:5], 63, v41099; GCN-IR-NEXT:    s_mov_b64 s[8:9], 0x80001100; GCN-IR-NEXT:    v_lshl_b64 v[2:3], s[8:9], v21101; GCN-IR-NEXT:    v_mov_b32_e32 v4, 01102; GCN-IR-NEXT:    v_mov_b32_e32 v5, 01103; GCN-IR-NEXT:    s_xor_b64 s[4:5], vcc, -11104; GCN-IR-NEXT:    s_and_saveexec_b64 s[10:11], s[4:5]1105; GCN-IR-NEXT:    s_xor_b64 s[4:5], exec, s[10:11]1106; GCN-IR-NEXT:    s_cbranch_execz .LBB9_51107; GCN-IR-NEXT:  ; %bb.2: ; %udiv-preheader1108; GCN-IR-NEXT:    v_add_i32_e32 v10, vcc, -1, v01109; GCN-IR-NEXT:    v_addc_u32_e32 v11, vcc, -1, v1, vcc1110; GCN-IR-NEXT:    v_sub_i32_e32 v12, vcc, 47, v81111; GCN-IR-NEXT:    v_lshr_b64 v[6:7], s[8:9], v61112; GCN-IR-NEXT:    v_subb_u32_e64 v13, s[8:9], 0, 0, vcc1113; GCN-IR-NEXT:    v_mov_b32_e32 v8, 01114; GCN-IR-NEXT:    s_mov_b64 s[8:9], 01115; GCN-IR-NEXT:    v_mov_b32_e32 v9, 01116; GCN-IR-NEXT:    v_mov_b32_e32 v5, 01117; GCN-IR-NEXT:  .LBB9_3: ; %udiv-do-while1118; GCN-IR-NEXT:    ; =>This Inner Loop Header: Depth=11119; GCN-IR-NEXT:    v_lshl_b64 v[6:7], v[6:7], 11120; GCN-IR-NEXT:    v_lshrrev_b32_e32 v4, 31, v31121; GCN-IR-NEXT:    v_or_b32_e32 v6, v6, v41122; GCN-IR-NEXT:    v_lshl_b64 v[2:3], v[2:3], 11123; GCN-IR-NEXT:    v_sub_i32_e32 v4, vcc, v10, v61124; GCN-IR-NEXT:    v_subb_u32_e32 v4, vcc, v11, v7, vcc1125; GCN-IR-NEXT:    v_or_b32_e32 v2, v8, v21126; GCN-IR-NEXT:    v_ashrrev_i32_e32 v8, 31, v41127; GCN-IR-NEXT:    v_or_b32_e32 v3, v9, v31128; GCN-IR-NEXT:    v_and_b32_e32 v4, 1, v81129; GCN-IR-NEXT:    v_and_b32_e32 v9, v8, v11130; GCN-IR-NEXT:    v_and_b32_e32 v8, v8, v01131; GCN-IR-NEXT:    v_sub_i32_e32 v6, vcc, v6, v81132; GCN-IR-NEXT:    v_subb_u32_e32 v7, vcc, v7, v9, vcc1133; GCN-IR-NEXT:    v_add_i32_e32 v12, vcc, 1, v121134; GCN-IR-NEXT:    v_addc_u32_e32 v13, vcc, 0, v13, vcc1135; GCN-IR-NEXT:    v_mov_b32_e32 v9, v51136; GCN-IR-NEXT:    s_or_b64 s[8:9], vcc, s[8:9]1137; GCN-IR-NEXT:    v_mov_b32_e32 v8, v41138; GCN-IR-NEXT:    s_andn2_b64 exec, exec, s[8:9]1139; GCN-IR-NEXT:    s_cbranch_execnz .LBB9_31140; GCN-IR-NEXT:  ; %bb.4: ; %Flow1141; GCN-IR-NEXT:    s_or_b64 exec, exec, s[8:9]1142; GCN-IR-NEXT:  .LBB9_5: ; %Flow41143; GCN-IR-NEXT:    s_or_b64 exec, exec, s[4:5]1144; GCN-IR-NEXT:    v_lshl_b64 v[0:1], v[2:3], 11145; GCN-IR-NEXT:    v_or_b32_e32 v2, v5, v11146; GCN-IR-NEXT:    v_or_b32_e32 v3, v4, v01147; GCN-IR-NEXT:  .LBB9_6: ; %Flow51148; GCN-IR-NEXT:    s_or_b64 exec, exec, s[6:7]1149; GCN-IR-NEXT:    v_mov_b32_e32 v0, v31150; GCN-IR-NEXT:    v_mov_b32_e32 v1, v21151; GCN-IR-NEXT:    s_setpc_b64 s[30:31]1152  %result = udiv i64 32768, %x1153  ret i64 %result1154}1155 1156define i64 @v_test_udiv_pow2_k_den_i64(i64 %x) {1157; GCN-LABEL: v_test_udiv_pow2_k_den_i64:1158; GCN:       ; %bb.0:1159; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1160; GCN-NEXT:    v_alignbit_b32 v0, v1, v0, 151161; GCN-NEXT:    v_lshrrev_b32_e32 v1, 15, v11162; GCN-NEXT:    s_setpc_b64 s[30:31]1163;1164; GCN-IR-LABEL: v_test_udiv_pow2_k_den_i64:1165; GCN-IR:       ; %bb.0: ; %_udiv-special-cases1166; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1167; GCN-IR-NEXT:    v_ffbh_u32_e32 v2, v01168; GCN-IR-NEXT:    v_add_i32_e64 v2, s[4:5], 32, v21169; GCN-IR-NEXT:    v_ffbh_u32_e32 v3, v11170; GCN-IR-NEXT:    v_min_u32_e32 v6, v2, v31171; GCN-IR-NEXT:    v_sub_i32_e64 v4, s[4:5], 48, v61172; GCN-IR-NEXT:    v_subb_u32_e64 v5, s[4:5], 0, 0, s[4:5]1173; GCN-IR-NEXT:    v_cmp_eq_u64_e32 vcc, 0, v[0:1]1174; GCN-IR-NEXT:    v_cmp_lt_u64_e64 s[4:5], 63, v[4:5]1175; GCN-IR-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1176; GCN-IR-NEXT:    v_cmp_ne_u64_e32 vcc, 63, v[4:5]1177; GCN-IR-NEXT:    s_xor_b64 s[6:7], s[4:5], -11178; GCN-IR-NEXT:    v_cndmask_b32_e64 v2, v1, 0, s[4:5]1179; GCN-IR-NEXT:    v_cndmask_b32_e64 v3, v0, 0, s[4:5]1180; GCN-IR-NEXT:    s_and_b64 s[4:5], s[6:7], vcc1181; GCN-IR-NEXT:    s_and_saveexec_b64 s[6:7], s[4:5]1182; GCN-IR-NEXT:    s_cbranch_execz .LBB10_61183; GCN-IR-NEXT:  ; %bb.1: ; %udiv-bb11184; GCN-IR-NEXT:    v_add_i32_e32 v7, vcc, 1, v41185; GCN-IR-NEXT:    v_addc_u32_e32 v2, vcc, 0, v5, vcc1186; GCN-IR-NEXT:    v_sub_i32_e64 v2, s[4:5], 63, v41187; GCN-IR-NEXT:    v_lshl_b64 v[2:3], v[0:1], v21188; GCN-IR-NEXT:    v_mov_b32_e32 v4, 01189; GCN-IR-NEXT:    v_mov_b32_e32 v5, 01190; GCN-IR-NEXT:    s_xor_b64 s[4:5], vcc, -11191; GCN-IR-NEXT:    s_and_saveexec_b64 s[8:9], s[4:5]1192; GCN-IR-NEXT:    s_xor_b64 s[4:5], exec, s[8:9]1193; GCN-IR-NEXT:    s_cbranch_execz .LBB10_51194; GCN-IR-NEXT:  ; %bb.2: ; %udiv-preheader1195; GCN-IR-NEXT:    v_add_i32_e32 v8, vcc, 0xffffffcf, v61196; GCN-IR-NEXT:    v_lshr_b64 v[0:1], v[0:1], v71197; GCN-IR-NEXT:    v_addc_u32_e64 v9, s[8:9], 0, -1, vcc1198; GCN-IR-NEXT:    v_mov_b32_e32 v6, 01199; GCN-IR-NEXT:    s_mov_b64 s[8:9], 01200; GCN-IR-NEXT:    v_mov_b32_e32 v7, 01201; GCN-IR-NEXT:    v_mov_b32_e32 v5, 01202; GCN-IR-NEXT:    s_movk_i32 s10, 0x7fff1203; GCN-IR-NEXT:  .LBB10_3: ; %udiv-do-while1204; GCN-IR-NEXT:    ; =>This Inner Loop Header: Depth=11205; GCN-IR-NEXT:    v_lshl_b64 v[0:1], v[0:1], 11206; GCN-IR-NEXT:    v_lshrrev_b32_e32 v4, 31, v31207; GCN-IR-NEXT:    v_or_b32_e32 v0, v0, v41208; GCN-IR-NEXT:    v_lshl_b64 v[2:3], v[2:3], 11209; GCN-IR-NEXT:    v_sub_i32_e32 v4, vcc, s10, v01210; GCN-IR-NEXT:    v_subb_u32_e32 v4, vcc, 0, v1, vcc1211; GCN-IR-NEXT:    v_or_b32_e32 v2, v6, v21212; GCN-IR-NEXT:    v_ashrrev_i32_e32 v6, 31, v41213; GCN-IR-NEXT:    v_and_b32_e32 v4, 1, v61214; GCN-IR-NEXT:    v_and_b32_e32 v6, 0x8000, v61215; GCN-IR-NEXT:    v_sub_i32_e32 v0, vcc, v0, v61216; GCN-IR-NEXT:    v_subbrev_u32_e32 v1, vcc, 0, v1, vcc1217; GCN-IR-NEXT:    v_add_i32_e32 v8, vcc, 1, v81218; GCN-IR-NEXT:    v_or_b32_e32 v3, v7, v31219; GCN-IR-NEXT:    v_addc_u32_e32 v9, vcc, 0, v9, vcc1220; GCN-IR-NEXT:    v_mov_b32_e32 v7, v51221; GCN-IR-NEXT:    s_or_b64 s[8:9], vcc, s[8:9]1222; GCN-IR-NEXT:    v_mov_b32_e32 v6, v41223; GCN-IR-NEXT:    s_andn2_b64 exec, exec, s[8:9]1224; GCN-IR-NEXT:    s_cbranch_execnz .LBB10_31225; GCN-IR-NEXT:  ; %bb.4: ; %Flow1226; GCN-IR-NEXT:    s_or_b64 exec, exec, s[8:9]1227; GCN-IR-NEXT:  .LBB10_5: ; %Flow41228; GCN-IR-NEXT:    s_or_b64 exec, exec, s[4:5]1229; GCN-IR-NEXT:    v_lshl_b64 v[0:1], v[2:3], 11230; GCN-IR-NEXT:    v_or_b32_e32 v2, v5, v11231; GCN-IR-NEXT:    v_or_b32_e32 v3, v4, v01232; GCN-IR-NEXT:  .LBB10_6: ; %Flow51233; GCN-IR-NEXT:    s_or_b64 exec, exec, s[6:7]1234; GCN-IR-NEXT:    v_mov_b32_e32 v0, v31235; GCN-IR-NEXT:    v_mov_b32_e32 v1, v21236; GCN-IR-NEXT:    s_setpc_b64 s[30:31]1237  %result = udiv i64 %x, 327681238  ret i64 %result1239}1240 1241define amdgpu_kernel void @s_test_udiv_k_den_i64(ptr addrspace(1) %out, i64 %x) {1242; GCN-LABEL: s_test_udiv_k_den_i64:1243; GCN:       ; %bb.0:1244; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91245; GCN-NEXT:    v_mov_b32_e32 v2, 0xaaaaaaab1246; GCN-NEXT:    v_mov_b32_e32 v0, 0xaaaaaaaa1247; GCN-NEXT:    s_mov_b32 s7, 0xf0001248; GCN-NEXT:    s_mov_b32 s6, -11249; GCN-NEXT:    s_waitcnt lgkmcnt(0)1250; GCN-NEXT:    v_mul_hi_u32 v3, s2, v21251; GCN-NEXT:    v_mul_hi_u32 v2, s3, v21252; GCN-NEXT:    s_mov_b32 s4, s01253; GCN-NEXT:    v_mul_hi_u32 v1, s2, v01254; GCN-NEXT:    s_mul_i32 s0, s2, 0xaaaaaaaa1255; GCN-NEXT:    s_mul_i32 s2, s3, 0xaaaaaaab1256; GCN-NEXT:    v_add_i32_e32 v3, vcc, s2, v31257; GCN-NEXT:    v_addc_u32_e32 v2, vcc, 0, v2, vcc1258; GCN-NEXT:    v_add_i32_e32 v3, vcc, s0, v31259; GCN-NEXT:    v_mul_hi_u32 v3, s3, v01260; GCN-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1261; GCN-NEXT:    v_add_i32_e32 v1, vcc, v2, v11262; GCN-NEXT:    s_mul_i32 s0, s3, 0xaaaaaaaa1263; GCN-NEXT:    v_addc_u32_e64 v2, s[8:9], 0, 0, vcc1264; GCN-NEXT:    v_add_i32_e32 v0, vcc, s0, v11265; GCN-NEXT:    v_addc_u32_e32 v1, vcc, v3, v2, vcc1266; GCN-NEXT:    v_lshr_b64 v[0:1], v[0:1], 41267; GCN-NEXT:    s_mov_b32 s5, s11268; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 01269; GCN-NEXT:    s_endpgm1270;1271; GCN-IR-LABEL: s_test_udiv_k_den_i64:1272; GCN-IR:       ; %bb.0: ; %_udiv-special-cases1273; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91274; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)1275; GCN-IR-NEXT:    s_flbit_i32_b64 s10, s[2:3]1276; GCN-IR-NEXT:    s_sub_u32 s8, 59, s101277; GCN-IR-NEXT:    s_subb_u32 s9, 0, 01278; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[2:3], 01279; GCN-IR-NEXT:    v_cmp_gt_u64_e64 s[6:7], s[8:9], 631280; GCN-IR-NEXT:    v_cmp_eq_u64_e64 s[12:13], s[8:9], 631281; GCN-IR-NEXT:    s_or_b64 s[4:5], s[4:5], s[6:7]1282; GCN-IR-NEXT:    s_and_b64 s[6:7], s[4:5], exec1283; GCN-IR-NEXT:    s_cselect_b32 s7, 0, s31284; GCN-IR-NEXT:    s_cselect_b32 s6, 0, s21285; GCN-IR-NEXT:    s_or_b64 s[4:5], s[4:5], s[12:13]1286; GCN-IR-NEXT:    s_andn2_b64 vcc, exec, s[4:5]1287; GCN-IR-NEXT:    s_mov_b64 s[4:5], 01288; GCN-IR-NEXT:    s_cbranch_vccz .LBB11_51289; GCN-IR-NEXT:  ; %bb.1: ; %udiv-bb11290; GCN-IR-NEXT:    s_add_u32 s11, s8, 11291; GCN-IR-NEXT:    s_addc_u32 s6, s9, 01292; GCN-IR-NEXT:    s_cselect_b64 s[6:7], -1, 01293; GCN-IR-NEXT:    s_sub_i32 s8, 63, s81294; GCN-IR-NEXT:    s_andn2_b64 vcc, exec, s[6:7]1295; GCN-IR-NEXT:    s_lshl_b64 s[6:7], s[2:3], s81296; GCN-IR-NEXT:    s_cbranch_vccz .LBB11_41297; GCN-IR-NEXT:  ; %bb.2: ; %udiv-preheader1298; GCN-IR-NEXT:    s_lshr_b64 s[2:3], s[2:3], s111299; GCN-IR-NEXT:    s_add_u32 s10, s10, 0xffffffc41300; GCN-IR-NEXT:    s_addc_u32 s11, 0, -11301; GCN-IR-NEXT:    s_mov_b64 s[8:9], 01302; GCN-IR-NEXT:    s_mov_b32 s5, 01303; GCN-IR-NEXT:  .LBB11_3: ; %udiv-do-while1304; GCN-IR-NEXT:    ; =>This Inner Loop Header: Depth=11305; GCN-IR-NEXT:    s_lshl_b64 s[2:3], s[2:3], 11306; GCN-IR-NEXT:    s_lshr_b32 s4, s7, 311307; GCN-IR-NEXT:    s_lshl_b64 s[6:7], s[6:7], 11308; GCN-IR-NEXT:    s_or_b64 s[2:3], s[2:3], s[4:5]1309; GCN-IR-NEXT:    s_or_b64 s[6:7], s[8:9], s[6:7]1310; GCN-IR-NEXT:    s_sub_u32 s4, 23, s21311; GCN-IR-NEXT:    s_subb_u32 s4, 0, s31312; GCN-IR-NEXT:    s_ashr_i32 s8, s4, 311313; GCN-IR-NEXT:    s_and_b32 s4, s8, 11314; GCN-IR-NEXT:    s_and_b32 s8, s8, 241315; GCN-IR-NEXT:    s_sub_u32 s2, s2, s81316; GCN-IR-NEXT:    s_subb_u32 s3, s3, 01317; GCN-IR-NEXT:    s_add_u32 s10, s10, 11318; GCN-IR-NEXT:    s_addc_u32 s11, s11, 01319; GCN-IR-NEXT:    s_cselect_b64 s[12:13], -1, 01320; GCN-IR-NEXT:    s_mov_b64 s[8:9], s[4:5]1321; GCN-IR-NEXT:    s_and_b64 vcc, exec, s[12:13]1322; GCN-IR-NEXT:    s_cbranch_vccz .LBB11_31323; GCN-IR-NEXT:  .LBB11_4: ; %Flow61324; GCN-IR-NEXT:    s_lshl_b64 s[2:3], s[6:7], 11325; GCN-IR-NEXT:    s_or_b64 s[6:7], s[4:5], s[2:3]1326; GCN-IR-NEXT:  .LBB11_5: ; %udiv-end1327; GCN-IR-NEXT:    v_mov_b32_e32 v0, s61328; GCN-IR-NEXT:    s_mov_b32 s3, 0xf0001329; GCN-IR-NEXT:    s_mov_b32 s2, -11330; GCN-IR-NEXT:    v_mov_b32_e32 v1, s71331; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 01332; GCN-IR-NEXT:    s_endpgm1333  %result = udiv i64 %x, 241334  store i64 %result, ptr addrspace(1) %out1335  ret void1336}1337 1338define i64 @v_test_udiv_k_den_i64(i64 %x) {1339; GCN-LABEL: v_test_udiv_k_den_i64:1340; GCN:       ; %bb.0:1341; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1342; GCN-NEXT:    s_mov_b32 s4, 0xaaaaaaab1343; GCN-NEXT:    v_mul_lo_u32 v3, v1, s41344; GCN-NEXT:    v_mul_hi_u32 v4, v0, s41345; GCN-NEXT:    s_mov_b32 s6, 0xaaaaaaaa1346; GCN-NEXT:    v_mul_hi_u32 v5, v1, s41347; GCN-NEXT:    v_mul_hi_u32 v2, v0, s61348; GCN-NEXT:    v_mul_lo_u32 v0, v0, s61349; GCN-NEXT:    v_add_i32_e32 v3, vcc, v3, v41350; GCN-NEXT:    v_addc_u32_e32 v4, vcc, 0, v5, vcc1351; GCN-NEXT:    v_add_i32_e32 v0, vcc, v0, v31352; GCN-NEXT:    v_addc_u32_e32 v0, vcc, 0, v2, vcc1353; GCN-NEXT:    v_mul_lo_u32 v2, v1, s61354; GCN-NEXT:    v_mul_hi_u32 v1, v1, s61355; GCN-NEXT:    v_add_i32_e32 v0, vcc, v4, v01356; GCN-NEXT:    v_addc_u32_e64 v3, s[4:5], 0, 0, vcc1357; GCN-NEXT:    v_add_i32_e32 v0, vcc, v2, v01358; GCN-NEXT:    v_addc_u32_e32 v1, vcc, v1, v3, vcc1359; GCN-NEXT:    v_alignbit_b32 v0, v1, v0, 41360; GCN-NEXT:    v_lshrrev_b32_e32 v1, 4, v11361; GCN-NEXT:    s_setpc_b64 s[30:31]1362;1363; GCN-IR-LABEL: v_test_udiv_k_den_i64:1364; GCN-IR:       ; %bb.0: ; %_udiv-special-cases1365; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1366; GCN-IR-NEXT:    v_ffbh_u32_e32 v2, v01367; GCN-IR-NEXT:    v_add_i32_e64 v2, s[4:5], 32, v21368; GCN-IR-NEXT:    v_ffbh_u32_e32 v3, v11369; GCN-IR-NEXT:    v_min_u32_e32 v6, v2, v31370; GCN-IR-NEXT:    v_sub_i32_e64 v4, s[4:5], 59, v61371; GCN-IR-NEXT:    v_subb_u32_e64 v5, s[4:5], 0, 0, s[4:5]1372; GCN-IR-NEXT:    v_cmp_eq_u64_e32 vcc, 0, v[0:1]1373; GCN-IR-NEXT:    v_cmp_lt_u64_e64 s[4:5], 63, v[4:5]1374; GCN-IR-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1375; GCN-IR-NEXT:    v_cmp_ne_u64_e32 vcc, 63, v[4:5]1376; GCN-IR-NEXT:    s_xor_b64 s[6:7], s[4:5], -11377; GCN-IR-NEXT:    v_cndmask_b32_e64 v2, v1, 0, s[4:5]1378; GCN-IR-NEXT:    v_cndmask_b32_e64 v3, v0, 0, s[4:5]1379; GCN-IR-NEXT:    s_and_b64 s[4:5], s[6:7], vcc1380; GCN-IR-NEXT:    s_and_saveexec_b64 s[6:7], s[4:5]1381; GCN-IR-NEXT:    s_cbranch_execz .LBB12_61382; GCN-IR-NEXT:  ; %bb.1: ; %udiv-bb11383; GCN-IR-NEXT:    v_add_i32_e32 v7, vcc, 1, v41384; GCN-IR-NEXT:    v_addc_u32_e32 v2, vcc, 0, v5, vcc1385; GCN-IR-NEXT:    v_sub_i32_e64 v2, s[4:5], 63, v41386; GCN-IR-NEXT:    v_lshl_b64 v[2:3], v[0:1], v21387; GCN-IR-NEXT:    v_mov_b32_e32 v4, 01388; GCN-IR-NEXT:    v_mov_b32_e32 v5, 01389; GCN-IR-NEXT:    s_xor_b64 s[4:5], vcc, -11390; GCN-IR-NEXT:    s_and_saveexec_b64 s[8:9], s[4:5]1391; GCN-IR-NEXT:    s_xor_b64 s[4:5], exec, s[8:9]1392; GCN-IR-NEXT:    s_cbranch_execz .LBB12_51393; GCN-IR-NEXT:  ; %bb.2: ; %udiv-preheader1394; GCN-IR-NEXT:    v_add_i32_e32 v8, vcc, 0xffffffc4, v61395; GCN-IR-NEXT:    v_lshr_b64 v[0:1], v[0:1], v71396; GCN-IR-NEXT:    v_addc_u32_e64 v9, s[8:9], 0, -1, vcc1397; GCN-IR-NEXT:    v_mov_b32_e32 v6, 01398; GCN-IR-NEXT:    s_mov_b64 s[8:9], 01399; GCN-IR-NEXT:    v_mov_b32_e32 v7, 01400; GCN-IR-NEXT:    v_mov_b32_e32 v5, 01401; GCN-IR-NEXT:  .LBB12_3: ; %udiv-do-while1402; GCN-IR-NEXT:    ; =>This Inner Loop Header: Depth=11403; GCN-IR-NEXT:    v_lshl_b64 v[0:1], v[0:1], 11404; GCN-IR-NEXT:    v_lshrrev_b32_e32 v4, 31, v31405; GCN-IR-NEXT:    v_or_b32_e32 v0, v0, v41406; GCN-IR-NEXT:    v_lshl_b64 v[2:3], v[2:3], 11407; GCN-IR-NEXT:    v_sub_i32_e32 v4, vcc, 23, v01408; GCN-IR-NEXT:    v_subb_u32_e32 v4, vcc, 0, v1, vcc1409; GCN-IR-NEXT:    v_or_b32_e32 v2, v6, v21410; GCN-IR-NEXT:    v_ashrrev_i32_e32 v6, 31, v41411; GCN-IR-NEXT:    v_and_b32_e32 v4, 1, v61412; GCN-IR-NEXT:    v_and_b32_e32 v6, 24, v61413; GCN-IR-NEXT:    v_sub_i32_e32 v0, vcc, v0, v61414; GCN-IR-NEXT:    v_subbrev_u32_e32 v1, vcc, 0, v1, vcc1415; GCN-IR-NEXT:    v_add_i32_e32 v8, vcc, 1, v81416; GCN-IR-NEXT:    v_or_b32_e32 v3, v7, v31417; GCN-IR-NEXT:    v_addc_u32_e32 v9, vcc, 0, v9, vcc1418; GCN-IR-NEXT:    v_mov_b32_e32 v7, v51419; GCN-IR-NEXT:    s_or_b64 s[8:9], vcc, s[8:9]1420; GCN-IR-NEXT:    v_mov_b32_e32 v6, v41421; GCN-IR-NEXT:    s_andn2_b64 exec, exec, s[8:9]1422; GCN-IR-NEXT:    s_cbranch_execnz .LBB12_31423; GCN-IR-NEXT:  ; %bb.4: ; %Flow1424; GCN-IR-NEXT:    s_or_b64 exec, exec, s[8:9]1425; GCN-IR-NEXT:  .LBB12_5: ; %Flow41426; GCN-IR-NEXT:    s_or_b64 exec, exec, s[4:5]1427; GCN-IR-NEXT:    v_lshl_b64 v[0:1], v[2:3], 11428; GCN-IR-NEXT:    v_or_b32_e32 v2, v5, v11429; GCN-IR-NEXT:    v_or_b32_e32 v3, v4, v01430; GCN-IR-NEXT:  .LBB12_6: ; %Flow51431; GCN-IR-NEXT:    s_or_b64 exec, exec, s[6:7]1432; GCN-IR-NEXT:    v_mov_b32_e32 v0, v31433; GCN-IR-NEXT:    v_mov_b32_e32 v1, v21434; GCN-IR-NEXT:    s_setpc_b64 s[30:31]1435  %result = udiv i64 %x, 241436  ret i64 %result1437}1438 1439define amdgpu_kernel void @s_test_udiv24_k_num_i64(ptr addrspace(1) %out, i64 %x) {1440; GCN-LABEL: s_test_udiv24_k_num_i64:1441; GCN:       ; %bb.0:1442; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91443; GCN-NEXT:    s_mov_b32 s4, 0x41c000001444; GCN-NEXT:    s_waitcnt lgkmcnt(0)1445; GCN-NEXT:    s_lshr_b32 s2, s3, 81446; GCN-NEXT:    v_cvt_f32_u32_e32 v0, s21447; GCN-NEXT:    s_mov_b32 s3, 0xf0001448; GCN-NEXT:    s_mov_b32 s2, -11449; GCN-NEXT:    v_rcp_iflag_f32_e32 v1, v01450; GCN-NEXT:    v_mul_f32_e32 v1, 0x41c00000, v11451; GCN-NEXT:    v_trunc_f32_e32 v1, v11452; GCN-NEXT:    v_cvt_u32_f32_e32 v2, v11453; GCN-NEXT:    v_mad_f32 v1, -v1, v0, s41454; GCN-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v01455; GCN-NEXT:    v_mov_b32_e32 v1, 01456; GCN-NEXT:    v_addc_u32_e32 v0, vcc, 0, v2, vcc1457; GCN-NEXT:    v_and_b32_e32 v0, 0xffffff, v01458; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 01459; GCN-NEXT:    s_endpgm1460;1461; GCN-IR-LABEL: s_test_udiv24_k_num_i64:1462; GCN-IR:       ; %bb.0:1463; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91464; GCN-IR-NEXT:    s_mov_b32 s4, 0x41c000001465; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)1466; GCN-IR-NEXT:    s_lshr_b32 s2, s3, 81467; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v0, s21468; GCN-IR-NEXT:    s_mov_b32 s3, 0xf0001469; GCN-IR-NEXT:    s_mov_b32 s2, -11470; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v1, v01471; GCN-IR-NEXT:    v_mul_f32_e32 v1, 0x41c00000, v11472; GCN-IR-NEXT:    v_trunc_f32_e32 v1, v11473; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v2, v11474; GCN-IR-NEXT:    v_mad_f32 v1, -v1, v0, s41475; GCN-IR-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v01476; GCN-IR-NEXT:    v_mov_b32_e32 v1, 01477; GCN-IR-NEXT:    v_addc_u32_e32 v0, vcc, 0, v2, vcc1478; GCN-IR-NEXT:    v_and_b32_e32 v0, 0xffffff, v01479; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 01480; GCN-IR-NEXT:    s_endpgm1481  %x.shr = lshr i64 %x, 401482  %result = udiv i64 24, %x.shr1483  store i64 %result, ptr addrspace(1) %out1484  ret void1485}1486 1487define amdgpu_kernel void @s_test_udiv24_k_den_i64(ptr addrspace(1) %out, i64 %x) {1488; GCN-LABEL: s_test_udiv24_k_den_i64:1489; GCN:       ; %bb.0:1490; GCN-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91491; GCN-NEXT:    s_mov_b32 s7, 0xf0001492; GCN-NEXT:    s_mov_b32 s6, -11493; GCN-NEXT:    s_waitcnt lgkmcnt(0)1494; GCN-NEXT:    s_lshr_b32 s2, s3, 81495; GCN-NEXT:    v_cvt_f32_u32_e32 v0, s21496; GCN-NEXT:    s_mov_b32 s2, 0x46b6fe001497; GCN-NEXT:    s_mov_b32 s4, s01498; GCN-NEXT:    s_mov_b32 s5, s11499; GCN-NEXT:    v_mul_f32_e32 v1, 0x38331158, v01500; GCN-NEXT:    v_trunc_f32_e32 v1, v11501; GCN-NEXT:    v_cvt_u32_f32_e32 v2, v11502; GCN-NEXT:    v_mad_f32 v0, -v1, s2, v01503; GCN-NEXT:    v_cmp_ge_f32_e64 vcc, |v0|, s21504; GCN-NEXT:    v_mov_b32_e32 v1, 01505; GCN-NEXT:    v_addc_u32_e32 v0, vcc, 0, v2, vcc1506; GCN-NEXT:    v_and_b32_e32 v0, 0xffffff, v01507; GCN-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 01508; GCN-NEXT:    s_endpgm1509;1510; GCN-IR-LABEL: s_test_udiv24_k_den_i64:1511; GCN-IR:       ; %bb.0:1512; GCN-IR-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91513; GCN-IR-NEXT:    s_mov_b32 s7, 0xf0001514; GCN-IR-NEXT:    s_mov_b32 s6, -11515; GCN-IR-NEXT:    s_waitcnt lgkmcnt(0)1516; GCN-IR-NEXT:    s_lshr_b32 s2, s3, 81517; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v0, s21518; GCN-IR-NEXT:    s_mov_b32 s2, 0x46b6fe001519; GCN-IR-NEXT:    s_mov_b32 s4, s01520; GCN-IR-NEXT:    s_mov_b32 s5, s11521; GCN-IR-NEXT:    v_mul_f32_e32 v1, 0x38331158, v01522; GCN-IR-NEXT:    v_trunc_f32_e32 v1, v11523; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v2, v11524; GCN-IR-NEXT:    v_mad_f32 v0, -v1, s2, v01525; GCN-IR-NEXT:    v_cmp_ge_f32_e64 vcc, |v0|, s21526; GCN-IR-NEXT:    v_mov_b32_e32 v1, 01527; GCN-IR-NEXT:    v_addc_u32_e32 v0, vcc, 0, v2, vcc1528; GCN-IR-NEXT:    v_and_b32_e32 v0, 0xffffff, v01529; GCN-IR-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 01530; GCN-IR-NEXT:    s_endpgm1531  %x.shr = lshr i64 %x, 401532  %result = udiv i64 %x.shr, 234231533  store i64 %result, ptr addrspace(1) %out1534  ret void1535}1536 1537define i64 @v_test_udiv24_k_num_i64(i64 %x) {1538; GCN-LABEL: v_test_udiv24_k_num_i64:1539; GCN:       ; %bb.0:1540; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1541; GCN-NEXT:    v_lshrrev_b32_e32 v0, 8, v11542; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v01543; GCN-NEXT:    s_mov_b32 s4, 0x41c000001544; GCN-NEXT:    v_rcp_iflag_f32_e32 v1, v01545; GCN-NEXT:    v_mul_f32_e32 v1, 0x41c00000, v11546; GCN-NEXT:    v_trunc_f32_e32 v1, v11547; GCN-NEXT:    v_cvt_u32_f32_e32 v2, v11548; GCN-NEXT:    v_mad_f32 v1, -v1, v0, s41549; GCN-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v01550; GCN-NEXT:    v_mov_b32_e32 v1, 01551; GCN-NEXT:    v_addc_u32_e32 v0, vcc, 0, v2, vcc1552; GCN-NEXT:    v_and_b32_e32 v0, 0xffffff, v01553; GCN-NEXT:    s_setpc_b64 s[30:31]1554;1555; GCN-IR-LABEL: v_test_udiv24_k_num_i64:1556; GCN-IR:       ; %bb.0:1557; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1558; GCN-IR-NEXT:    v_lshrrev_b32_e32 v0, 8, v11559; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v0, v01560; GCN-IR-NEXT:    s_mov_b32 s4, 0x41c000001561; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v1, v01562; GCN-IR-NEXT:    v_mul_f32_e32 v1, 0x41c00000, v11563; GCN-IR-NEXT:    v_trunc_f32_e32 v1, v11564; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v2, v11565; GCN-IR-NEXT:    v_mad_f32 v1, -v1, v0, s41566; GCN-IR-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v01567; GCN-IR-NEXT:    v_mov_b32_e32 v1, 01568; GCN-IR-NEXT:    v_addc_u32_e32 v0, vcc, 0, v2, vcc1569; GCN-IR-NEXT:    v_and_b32_e32 v0, 0xffffff, v01570; GCN-IR-NEXT:    s_setpc_b64 s[30:31]1571  %x.shr = lshr i64 %x, 401572  %result = udiv i64 24, %x.shr1573  ret i64 %result1574}1575 1576define i64 @v_test_udiv24_pow2_k_num_i64(i64 %x) {1577; GCN-LABEL: v_test_udiv24_pow2_k_num_i64:1578; GCN:       ; %bb.0:1579; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1580; GCN-NEXT:    v_lshrrev_b32_e32 v0, 8, v11581; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v01582; GCN-NEXT:    s_mov_b32 s4, 0x470000001583; GCN-NEXT:    v_rcp_iflag_f32_e32 v1, v01584; GCN-NEXT:    v_mul_f32_e32 v1, 0x47000000, v11585; GCN-NEXT:    v_trunc_f32_e32 v1, v11586; GCN-NEXT:    v_cvt_u32_f32_e32 v2, v11587; GCN-NEXT:    v_mad_f32 v1, -v1, v0, s41588; GCN-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v01589; GCN-NEXT:    v_mov_b32_e32 v1, 01590; GCN-NEXT:    v_addc_u32_e32 v0, vcc, 0, v2, vcc1591; GCN-NEXT:    v_and_b32_e32 v0, 0xffffff, v01592; GCN-NEXT:    s_setpc_b64 s[30:31]1593;1594; GCN-IR-LABEL: v_test_udiv24_pow2_k_num_i64:1595; GCN-IR:       ; %bb.0:1596; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1597; GCN-IR-NEXT:    v_lshrrev_b32_e32 v0, 8, v11598; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v0, v01599; GCN-IR-NEXT:    s_mov_b32 s4, 0x470000001600; GCN-IR-NEXT:    v_rcp_iflag_f32_e32 v1, v01601; GCN-IR-NEXT:    v_mul_f32_e32 v1, 0x47000000, v11602; GCN-IR-NEXT:    v_trunc_f32_e32 v1, v11603; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v2, v11604; GCN-IR-NEXT:    v_mad_f32 v1, -v1, v0, s41605; GCN-IR-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v01606; GCN-IR-NEXT:    v_mov_b32_e32 v1, 01607; GCN-IR-NEXT:    v_addc_u32_e32 v0, vcc, 0, v2, vcc1608; GCN-IR-NEXT:    v_and_b32_e32 v0, 0xffffff, v01609; GCN-IR-NEXT:    s_setpc_b64 s[30:31]1610  %x.shr = lshr i64 %x, 401611  %result = udiv i64 32768, %x.shr1612  ret i64 %result1613}1614 1615define i64 @v_test_udiv24_pow2_k_den_i64(i64 %x) {1616; GCN-LABEL: v_test_udiv24_pow2_k_den_i64:1617; GCN:       ; %bb.0:1618; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1619; GCN-NEXT:    v_lshrrev_b32_e32 v0, 23, v11620; GCN-NEXT:    v_mov_b32_e32 v1, 01621; GCN-NEXT:    s_setpc_b64 s[30:31]1622;1623; GCN-IR-LABEL: v_test_udiv24_pow2_k_den_i64:1624; GCN-IR:       ; %bb.0:1625; GCN-IR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1626; GCN-IR-NEXT:    v_lshrrev_b32_e32 v0, 8, v11627; GCN-IR-NEXT:    v_cvt_f32_u32_e32 v0, v01628; GCN-IR-NEXT:    s_mov_b32 s4, 0x470000001629; GCN-IR-NEXT:    v_mul_f32_e32 v1, 0x38000000, v01630; GCN-IR-NEXT:    v_trunc_f32_e32 v1, v11631; GCN-IR-NEXT:    v_cvt_u32_f32_e32 v2, v11632; GCN-IR-NEXT:    v_mad_f32 v0, -v1, s4, v01633; GCN-IR-NEXT:    v_cmp_ge_f32_e64 vcc, |v0|, s41634; GCN-IR-NEXT:    v_mov_b32_e32 v1, 01635; GCN-IR-NEXT:    v_addc_u32_e32 v0, vcc, 0, v2, vcc1636; GCN-IR-NEXT:    v_and_b32_e32 v0, 0xffffff, v01637; GCN-IR-NEXT:    s_setpc_b64 s[30:31]1638  %x.shr = lshr i64 %x, 401639  %result = udiv i64 %x.shr, 327681640  ret i64 %result1641}1642