2330 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx600 | FileCheck %s --check-prefix=GCN3; RUN: llc < %s -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global | FileCheck %s --check-prefix=TONGA4; RUN: llc < %s -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx900 -mattr=-flat-for-global | FileCheck %s --check-prefix=GFX95; RUN: llc < %s -amdgpu-scalarize-global-loads=false -mtriple=r600 -mcpu=redwood | FileCheck %s --check-prefix=EG6 7; The code generated by sdiv is long and complex and may frequently change.8; The goal of this test is to make sure the ISel doesn't fail.9;10; This program was previously failing to compile when one of the selectcc11; opcodes generated by the sdiv lowering was being legalized and optimized to:12; selectcc Remainder -1, 0, -1, SETGT13; This was fixed by adding an additional pattern in R600Instructions.td to14; match this pattern with a CNDGE_INT.15 16define amdgpu_kernel void @sdiv_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {17; GCN-LABEL: sdiv_i32:18; GCN: ; %bb.0:19; GCN-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x920; GCN-NEXT: s_mov_b32 s3, 0xf00021; GCN-NEXT: s_mov_b32 s2, -122; GCN-NEXT: s_mov_b32 s10, s223; GCN-NEXT: s_mov_b32 s11, s324; GCN-NEXT: s_waitcnt lgkmcnt(0)25; GCN-NEXT: s_mov_b32 s8, s626; GCN-NEXT: s_mov_b32 s9, s727; GCN-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 028; GCN-NEXT: s_mov_b32 s0, s429; GCN-NEXT: s_mov_b32 s1, s530; GCN-NEXT: s_waitcnt vmcnt(0)31; GCN-NEXT: v_sub_i32_e32 v2, vcc, 0, v132; GCN-NEXT: v_max_i32_e32 v2, v1, v233; GCN-NEXT: v_cvt_f32_u32_e32 v3, v234; GCN-NEXT: v_sub_i32_e32 v4, vcc, 0, v235; GCN-NEXT: v_sub_i32_e32 v5, vcc, 0, v036; GCN-NEXT: v_rcp_iflag_f32_e32 v3, v337; GCN-NEXT: v_max_i32_e32 v5, v0, v538; GCN-NEXT: v_xor_b32_e32 v0, v0, v139; GCN-NEXT: v_ashrrev_i32_e32 v0, 31, v040; GCN-NEXT: v_mul_f32_e32 v3, 0x4f7ffffe, v341; GCN-NEXT: v_cvt_u32_f32_e32 v3, v342; GCN-NEXT: v_mul_lo_u32 v4, v4, v343; GCN-NEXT: v_mul_hi_u32 v4, v3, v444; GCN-NEXT: v_add_i32_e32 v3, vcc, v3, v445; GCN-NEXT: v_mul_hi_u32 v3, v5, v346; GCN-NEXT: v_mul_lo_u32 v1, v3, v247; GCN-NEXT: v_add_i32_e32 v4, vcc, 1, v348; GCN-NEXT: v_sub_i32_e32 v1, vcc, v5, v149; GCN-NEXT: v_sub_i32_e32 v5, vcc, v1, v250; GCN-NEXT: v_cmp_ge_u32_e32 vcc, v1, v251; GCN-NEXT: v_cndmask_b32_e32 v3, v3, v4, vcc52; GCN-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc53; GCN-NEXT: v_add_i32_e32 v4, vcc, 1, v354; GCN-NEXT: v_cmp_ge_u32_e32 vcc, v1, v255; GCN-NEXT: v_cndmask_b32_e32 v1, v3, v4, vcc56; GCN-NEXT: v_xor_b32_e32 v1, v1, v057; GCN-NEXT: v_sub_i32_e32 v0, vcc, v1, v058; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 059; GCN-NEXT: s_endpgm60;61; TONGA-LABEL: sdiv_i32:62; TONGA: ; %bb.0:63; TONGA-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x2464; TONGA-NEXT: s_mov_b32 s3, 0xf00065; TONGA-NEXT: s_mov_b32 s2, -166; TONGA-NEXT: s_mov_b32 s10, s267; TONGA-NEXT: s_mov_b32 s11, s368; TONGA-NEXT: s_waitcnt lgkmcnt(0)69; TONGA-NEXT: s_mov_b32 s8, s670; TONGA-NEXT: s_mov_b32 s9, s771; TONGA-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 072; TONGA-NEXT: s_mov_b32 s0, s473; TONGA-NEXT: s_mov_b32 s1, s574; TONGA-NEXT: s_waitcnt vmcnt(0)75; TONGA-NEXT: v_sub_u32_e32 v2, vcc, 0, v176; TONGA-NEXT: v_max_i32_e32 v2, v1, v277; TONGA-NEXT: v_cvt_f32_u32_e32 v3, v278; TONGA-NEXT: v_sub_u32_e32 v4, vcc, 0, v279; TONGA-NEXT: v_sub_u32_e32 v5, vcc, 0, v080; TONGA-NEXT: v_rcp_iflag_f32_e32 v3, v381; TONGA-NEXT: v_max_i32_e32 v5, v0, v582; TONGA-NEXT: v_xor_b32_e32 v0, v0, v183; TONGA-NEXT: v_ashrrev_i32_e32 v0, 31, v084; TONGA-NEXT: v_mul_f32_e32 v3, 0x4f7ffffe, v385; TONGA-NEXT: v_cvt_u32_f32_e32 v3, v386; TONGA-NEXT: v_mul_lo_u32 v4, v4, v387; TONGA-NEXT: v_mul_hi_u32 v4, v3, v488; TONGA-NEXT: v_add_u32_e32 v3, vcc, v3, v489; TONGA-NEXT: v_mul_hi_u32 v3, v5, v390; TONGA-NEXT: v_mul_lo_u32 v1, v3, v291; TONGA-NEXT: v_add_u32_e32 v4, vcc, 1, v392; TONGA-NEXT: v_sub_u32_e32 v1, vcc, v5, v193; TONGA-NEXT: v_sub_u32_e32 v5, vcc, v1, v294; TONGA-NEXT: v_cmp_ge_u32_e32 vcc, v1, v295; TONGA-NEXT: v_cndmask_b32_e32 v3, v3, v4, vcc96; TONGA-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc97; TONGA-NEXT: v_add_u32_e32 v4, vcc, 1, v398; TONGA-NEXT: v_cmp_ge_u32_e32 vcc, v1, v299; TONGA-NEXT: v_cndmask_b32_e32 v1, v3, v4, vcc100; TONGA-NEXT: v_xor_b32_e32 v1, v1, v0101; TONGA-NEXT: v_sub_u32_e32 v0, vcc, v1, v0102; TONGA-NEXT: buffer_store_dword v0, off, s[0:3], 0103; TONGA-NEXT: s_endpgm104;105; GFX9-LABEL: sdiv_i32:106; GFX9: ; %bb.0:107; GFX9-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24108; GFX9-NEXT: s_mov_b32 s3, 0xf000109; GFX9-NEXT: s_mov_b32 s2, -1110; GFX9-NEXT: s_mov_b32 s6, s2111; GFX9-NEXT: s_mov_b32 s7, s3112; GFX9-NEXT: s_waitcnt lgkmcnt(0)113; GFX9-NEXT: s_mov_b32 s4, s10114; GFX9-NEXT: s_mov_b32 s5, s11115; GFX9-NEXT: buffer_load_dwordx2 v[0:1], off, s[4:7], 0116; GFX9-NEXT: s_mov_b32 s0, s8117; GFX9-NEXT: s_mov_b32 s1, s9118; GFX9-NEXT: s_waitcnt vmcnt(0)119; GFX9-NEXT: v_readfirstlane_b32 s4, v1120; GFX9-NEXT: s_abs_i32 s5, s4121; GFX9-NEXT: v_cvt_f32_u32_e32 v1, s5122; GFX9-NEXT: v_readfirstlane_b32 s6, v0123; GFX9-NEXT: s_sub_i32 s7, 0, s5124; GFX9-NEXT: s_xor_b32 s4, s6, s4125; GFX9-NEXT: v_rcp_iflag_f32_e32 v1, v1126; GFX9-NEXT: s_abs_i32 s6, s6127; GFX9-NEXT: s_ashr_i32 s4, s4, 31128; GFX9-NEXT: v_mul_f32_e32 v0, 0x4f7ffffe, v1129; GFX9-NEXT: v_cvt_u32_f32_e32 v0, v0130; GFX9-NEXT: v_readfirstlane_b32 s8, v0131; GFX9-NEXT: s_mul_i32 s7, s7, s8132; GFX9-NEXT: s_mul_hi_u32 s7, s8, s7133; GFX9-NEXT: s_add_i32 s8, s8, s7134; GFX9-NEXT: s_mul_hi_u32 s7, s6, s8135; GFX9-NEXT: s_mul_i32 s8, s7, s5136; GFX9-NEXT: s_sub_i32 s6, s6, s8137; GFX9-NEXT: s_add_i32 s9, s7, 1138; GFX9-NEXT: s_sub_i32 s8, s6, s5139; GFX9-NEXT: s_cmp_ge_u32 s6, s5140; GFX9-NEXT: s_cselect_b32 s7, s9, s7141; GFX9-NEXT: s_cselect_b32 s6, s8, s6142; GFX9-NEXT: s_add_i32 s8, s7, 1143; GFX9-NEXT: s_cmp_ge_u32 s6, s5144; GFX9-NEXT: s_cselect_b32 s5, s8, s7145; GFX9-NEXT: s_xor_b32 s5, s5, s4146; GFX9-NEXT: s_sub_i32 s4, s5, s4147; GFX9-NEXT: v_mov_b32_e32 v0, s4148; GFX9-NEXT: buffer_store_dword v0, off, s[0:3], 0149; GFX9-NEXT: s_endpgm150;151; EG-LABEL: sdiv_i32:152; EG: ; %bb.0:153; EG-NEXT: ALU 0, @8, KC0[CB0:0-32], KC1[]154; EG-NEXT: TEX 0 @6155; EG-NEXT: ALU 26, @9, KC0[CB0:0-32], KC1[]156; EG-NEXT: MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 1157; EG-NEXT: CF_END158; EG-NEXT: PAD159; EG-NEXT: Fetch clause starting at 6:160; EG-NEXT: VTX_READ_64 T0.XY, T0.X, 0, #1161; EG-NEXT: ALU clause starting at 8:162; EG-NEXT: MOV * T0.X, KC0[2].Z,163; EG-NEXT: ALU clause starting at 9:164; EG-NEXT: SETGT_INT * T0.W, 0.0, T0.Y,165; EG-NEXT: ADD_INT * T1.W, T0.Y, PV.W,166; EG-NEXT: XOR_INT * T1.W, PV.W, T0.W,167; EG-NEXT: SUB_INT T2.W, 0.0, PV.W,168; EG-NEXT: RECIP_UINT * T0.Y, PV.W,169; EG-NEXT: SETGT_INT T3.W, 0.0, T0.X,170; EG-NEXT: MULLO_INT * T0.Z, PV.W, PS,171; EG-NEXT: ADD_INT T2.W, T0.X, PV.W,172; EG-NEXT: MULHI * T0.X, T0.Y, PS,173; EG-NEXT: ADD_INT T4.W, T0.Y, PS,174; EG-NEXT: XOR_INT * T2.W, PV.W, T3.W,175; EG-NEXT: MULHI * T0.X, PS, PV.W,176; EG-NEXT: MULLO_INT * T0.Y, PS, T1.W,177; EG-NEXT: SUB_INT * T2.W, T2.W, PS,178; EG-NEXT: ADD_INT T0.Z, T0.X, 1,179; EG-NEXT: SETGE_UINT T4.W, PV.W, T1.W,180; EG-NEXT: SUB_INT * T5.W, PV.W, T1.W,181; EG-NEXT: CNDE_INT T2.W, PV.W, T2.W, PS,182; EG-NEXT: CNDE_INT * T4.W, PV.W, T0.X, PV.Z,183; EG-NEXT: ADD_INT T5.W, PS, 1,184; EG-NEXT: SETGE_UINT * T1.W, PV.W, T1.W,185; EG-NEXT: CNDE_INT T1.W, PS, T4.W, PV.W, BS:VEC_102/SCL_221186; EG-NEXT: XOR_INT * T0.W, T3.W, T0.W,187; EG-NEXT: XOR_INT * T1.W, PV.W, PS,188; EG-NEXT: SUB_INT T0.X, PV.W, T0.W,189; EG-NEXT: LSHR * T1.X, KC0[2].Y, literal.x,190; EG-NEXT: 2(2.802597e-45), 0(0.000000e+00)191 %den_ptr = getelementptr i32, ptr addrspace(1) %in, i32 1192 %num = load i32, ptr addrspace(1) %in193 %den = load i32, ptr addrspace(1) %den_ptr194 %result = sdiv i32 %num, %den195 store i32 %result, ptr addrspace(1) %out196 ret void197}198 199define amdgpu_kernel void @sdiv_i32_4(ptr addrspace(1) %out, ptr addrspace(1) %in) {200; GCN-LABEL: sdiv_i32_4:201; GCN: ; %bb.0:202; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9203; GCN-NEXT: s_mov_b32 s7, 0xf000204; GCN-NEXT: s_mov_b32 s6, -1205; GCN-NEXT: s_mov_b32 s10, s6206; GCN-NEXT: s_mov_b32 s11, s7207; GCN-NEXT: s_waitcnt lgkmcnt(0)208; GCN-NEXT: s_mov_b32 s8, s2209; GCN-NEXT: s_mov_b32 s9, s3210; GCN-NEXT: buffer_load_dword v0, off, s[8:11], 0211; GCN-NEXT: s_mov_b32 s4, s0212; GCN-NEXT: s_mov_b32 s5, s1213; GCN-NEXT: s_waitcnt vmcnt(0)214; GCN-NEXT: v_ashrrev_i32_e32 v1, 31, v0215; GCN-NEXT: v_lshrrev_b32_e32 v1, 30, v1216; GCN-NEXT: v_add_i32_e32 v0, vcc, v1, v0217; GCN-NEXT: v_ashrrev_i32_e32 v0, 2, v0218; GCN-NEXT: buffer_store_dword v0, off, s[4:7], 0219; GCN-NEXT: s_endpgm220;221; TONGA-LABEL: sdiv_i32_4:222; TONGA: ; %bb.0:223; TONGA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24224; TONGA-NEXT: s_mov_b32 s7, 0xf000225; TONGA-NEXT: s_mov_b32 s6, -1226; TONGA-NEXT: s_mov_b32 s10, s6227; TONGA-NEXT: s_mov_b32 s11, s7228; TONGA-NEXT: s_waitcnt lgkmcnt(0)229; TONGA-NEXT: s_mov_b32 s8, s2230; TONGA-NEXT: s_mov_b32 s9, s3231; TONGA-NEXT: buffer_load_dword v0, off, s[8:11], 0232; TONGA-NEXT: s_mov_b32 s4, s0233; TONGA-NEXT: s_mov_b32 s5, s1234; TONGA-NEXT: s_waitcnt vmcnt(0)235; TONGA-NEXT: v_ashrrev_i32_e32 v1, 31, v0236; TONGA-NEXT: v_lshrrev_b32_e32 v1, 30, v1237; TONGA-NEXT: v_add_u32_e32 v0, vcc, v1, v0238; TONGA-NEXT: v_ashrrev_i32_e32 v0, 2, v0239; TONGA-NEXT: buffer_store_dword v0, off, s[4:7], 0240; TONGA-NEXT: s_endpgm241;242; GFX9-LABEL: sdiv_i32_4:243; GFX9: ; %bb.0:244; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24245; GFX9-NEXT: s_mov_b32 s7, 0xf000246; GFX9-NEXT: s_mov_b32 s6, -1247; GFX9-NEXT: s_mov_b32 s10, s6248; GFX9-NEXT: s_mov_b32 s11, s7249; GFX9-NEXT: s_waitcnt lgkmcnt(0)250; GFX9-NEXT: s_mov_b32 s8, s2251; GFX9-NEXT: s_mov_b32 s9, s3252; GFX9-NEXT: buffer_load_dword v0, off, s[8:11], 0253; GFX9-NEXT: s_mov_b32 s4, s0254; GFX9-NEXT: s_mov_b32 s5, s1255; GFX9-NEXT: s_waitcnt vmcnt(0)256; GFX9-NEXT: v_ashrrev_i32_e32 v1, 31, v0257; GFX9-NEXT: v_lshrrev_b32_e32 v1, 30, v1258; GFX9-NEXT: v_add_u32_e32 v0, v0, v1259; GFX9-NEXT: v_ashrrev_i32_e32 v0, 2, v0260; GFX9-NEXT: buffer_store_dword v0, off, s[4:7], 0261; GFX9-NEXT: s_endpgm262;263; EG-LABEL: sdiv_i32_4:264; EG: ; %bb.0:265; EG-NEXT: ALU 0, @8, KC0[CB0:0-32], KC1[]266; EG-NEXT: TEX 0 @6267; EG-NEXT: ALU 7, @9, KC0[CB0:0-32], KC1[]268; EG-NEXT: MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 1269; EG-NEXT: CF_END270; EG-NEXT: PAD271; EG-NEXT: Fetch clause starting at 6:272; EG-NEXT: VTX_READ_32 T0.X, T0.X, 0, #1273; EG-NEXT: ALU clause starting at 8:274; EG-NEXT: MOV * T0.X, KC0[2].Z,275; EG-NEXT: ALU clause starting at 9:276; EG-NEXT: ASHR * T0.W, T0.X, literal.x,277; EG-NEXT: 31(4.344025e-44), 0(0.000000e+00)278; EG-NEXT: LSHR * T0.W, PV.W, literal.x,279; EG-NEXT: 30(4.203895e-44), 0(0.000000e+00)280; EG-NEXT: ADD_INT * T0.W, T0.X, PV.W,281; EG-NEXT: ASHR T0.X, PV.W, literal.x,282; EG-NEXT: LSHR * T1.X, KC0[2].Y, literal.x,283; EG-NEXT: 2(2.802597e-45), 0(0.000000e+00)284 %num = load i32, ptr addrspace(1) %in285 %result = sdiv i32 %num, 4286 store i32 %result, ptr addrspace(1) %out287 ret void288}289 290; Multiply by a weird constant to make sure setIntDivIsCheap is291; working.292 293define amdgpu_kernel void @slow_sdiv_i32_3435(ptr addrspace(1) %out, ptr addrspace(1) %in) {294; GCN-LABEL: slow_sdiv_i32_3435:295; GCN: ; %bb.0:296; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9297; GCN-NEXT: s_mov_b32 s7, 0xf000298; GCN-NEXT: s_mov_b32 s6, -1299; GCN-NEXT: s_mov_b32 s10, s6300; GCN-NEXT: s_mov_b32 s11, s7301; GCN-NEXT: s_waitcnt lgkmcnt(0)302; GCN-NEXT: s_mov_b32 s8, s2303; GCN-NEXT: s_mov_b32 s9, s3304; GCN-NEXT: buffer_load_dword v0, off, s[8:11], 0305; GCN-NEXT: s_mov_b32 s2, 0x98a1930b306; GCN-NEXT: s_mov_b32 s4, s0307; GCN-NEXT: s_mov_b32 s5, s1308; GCN-NEXT: s_waitcnt vmcnt(0)309; GCN-NEXT: v_mul_hi_i32 v1, v0, s2310; GCN-NEXT: v_add_i32_e32 v0, vcc, v1, v0311; GCN-NEXT: v_lshrrev_b32_e32 v1, 31, v0312; GCN-NEXT: v_ashrrev_i32_e32 v0, 11, v0313; GCN-NEXT: v_add_i32_e32 v0, vcc, v0, v1314; GCN-NEXT: buffer_store_dword v0, off, s[4:7], 0315; GCN-NEXT: s_endpgm316;317; TONGA-LABEL: slow_sdiv_i32_3435:318; TONGA: ; %bb.0:319; TONGA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24320; TONGA-NEXT: s_mov_b32 s7, 0xf000321; TONGA-NEXT: s_mov_b32 s6, -1322; TONGA-NEXT: s_mov_b32 s10, s6323; TONGA-NEXT: s_mov_b32 s11, s7324; TONGA-NEXT: s_waitcnt lgkmcnt(0)325; TONGA-NEXT: s_mov_b32 s8, s2326; TONGA-NEXT: s_mov_b32 s9, s3327; TONGA-NEXT: buffer_load_dword v0, off, s[8:11], 0328; TONGA-NEXT: s_mov_b32 s2, 0x98a1930b329; TONGA-NEXT: s_mov_b32 s4, s0330; TONGA-NEXT: s_mov_b32 s5, s1331; TONGA-NEXT: s_waitcnt vmcnt(0)332; TONGA-NEXT: v_mul_hi_i32 v1, v0, s2333; TONGA-NEXT: v_add_u32_e32 v0, vcc, v1, v0334; TONGA-NEXT: v_lshrrev_b32_e32 v1, 31, v0335; TONGA-NEXT: v_ashrrev_i32_e32 v0, 11, v0336; TONGA-NEXT: v_add_u32_e32 v0, vcc, v0, v1337; TONGA-NEXT: buffer_store_dword v0, off, s[4:7], 0338; TONGA-NEXT: s_endpgm339;340; GFX9-LABEL: slow_sdiv_i32_3435:341; GFX9: ; %bb.0:342; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24343; GFX9-NEXT: s_mov_b32 s7, 0xf000344; GFX9-NEXT: s_mov_b32 s6, -1345; GFX9-NEXT: s_mov_b32 s10, s6346; GFX9-NEXT: s_mov_b32 s11, s7347; GFX9-NEXT: s_waitcnt lgkmcnt(0)348; GFX9-NEXT: s_mov_b32 s8, s2349; GFX9-NEXT: s_mov_b32 s9, s3350; GFX9-NEXT: buffer_load_dword v0, off, s[8:11], 0351; GFX9-NEXT: s_mov_b32 s2, 0x98a1930b352; GFX9-NEXT: s_mov_b32 s4, s0353; GFX9-NEXT: s_mov_b32 s5, s1354; GFX9-NEXT: s_waitcnt vmcnt(0)355; GFX9-NEXT: v_mul_hi_i32 v1, v0, s2356; GFX9-NEXT: v_add_u32_e32 v0, v1, v0357; GFX9-NEXT: v_lshrrev_b32_e32 v1, 31, v0358; GFX9-NEXT: v_ashrrev_i32_e32 v0, 11, v0359; GFX9-NEXT: v_add_u32_e32 v0, v0, v1360; GFX9-NEXT: buffer_store_dword v0, off, s[4:7], 0361; GFX9-NEXT: s_endpgm362;363; EG-LABEL: slow_sdiv_i32_3435:364; EG: ; %bb.0:365; EG-NEXT: ALU 0, @8, KC0[CB0:0-32], KC1[]366; EG-NEXT: TEX 0 @6367; EG-NEXT: ALU 8, @9, KC0[CB0:0-32], KC1[]368; EG-NEXT: MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 1369; EG-NEXT: CF_END370; EG-NEXT: PAD371; EG-NEXT: Fetch clause starting at 6:372; EG-NEXT: VTX_READ_32 T0.X, T0.X, 0, #1373; EG-NEXT: ALU clause starting at 8:374; EG-NEXT: MOV * T0.X, KC0[2].Z,375; EG-NEXT: ALU clause starting at 9:376; EG-NEXT: MULHI_INT * T0.Y, T0.X, literal.x,377; EG-NEXT: -1734241525(-4.176600e-24), 0(0.000000e+00)378; EG-NEXT: ADD_INT * T0.W, PS, T0.X,379; EG-NEXT: ASHR T1.W, PV.W, literal.x,380; EG-NEXT: LSHR * T0.W, PV.W, literal.y,381; EG-NEXT: 11(1.541428e-44), 31(4.344025e-44)382; EG-NEXT: ADD_INT T0.X, PV.W, PS,383; EG-NEXT: LSHR * T1.X, KC0[2].Y, literal.x,384; EG-NEXT: 2(2.802597e-45), 0(0.000000e+00)385 %num = load i32, ptr addrspace(1) %in386 %result = sdiv i32 %num, 3435387 store i32 %result, ptr addrspace(1) %out388 ret void389}390 391define amdgpu_kernel void @sdiv_v2i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {392; GCN-LABEL: sdiv_v2i32:393; GCN: ; %bb.0:394; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9395; GCN-NEXT: s_mov_b32 s7, 0xf000396; GCN-NEXT: s_mov_b32 s6, -1397; GCN-NEXT: s_mov_b32 s10, s6398; GCN-NEXT: s_mov_b32 s11, s7399; GCN-NEXT: s_waitcnt lgkmcnt(0)400; GCN-NEXT: s_mov_b32 s8, s2401; GCN-NEXT: s_mov_b32 s9, s3402; GCN-NEXT: buffer_load_dwordx4 v[0:3], off, s[8:11], 0403; GCN-NEXT: s_mov_b32 s4, s0404; GCN-NEXT: s_mov_b32 s5, s1405; GCN-NEXT: s_waitcnt vmcnt(0)406; GCN-NEXT: v_sub_i32_e32 v6, vcc, 0, v2407; GCN-NEXT: v_sub_i32_e32 v9, vcc, 0, v3408; GCN-NEXT: v_xor_b32_e32 v4, v0, v2409; GCN-NEXT: v_xor_b32_e32 v7, v1, v3410; GCN-NEXT: v_max_i32_e32 v2, v2, v6411; GCN-NEXT: v_max_i32_e32 v3, v3, v9412; GCN-NEXT: v_cvt_f32_u32_e32 v6, v2413; GCN-NEXT: v_cvt_f32_u32_e32 v9, v3414; GCN-NEXT: v_sub_i32_e32 v5, vcc, 0, v0415; GCN-NEXT: v_rcp_iflag_f32_e32 v6, v6416; GCN-NEXT: v_max_i32_e32 v0, v0, v5417; GCN-NEXT: v_rcp_iflag_f32_e32 v5, v9418; GCN-NEXT: v_sub_i32_e32 v9, vcc, 0, v2419; GCN-NEXT: v_mul_f32_e32 v6, 0x4f7ffffe, v6420; GCN-NEXT: v_mul_f32_e32 v5, 0x4f7ffffe, v5421; GCN-NEXT: v_cvt_u32_f32_e32 v6, v6422; GCN-NEXT: v_cvt_u32_f32_e32 v5, v5423; GCN-NEXT: v_sub_i32_e32 v10, vcc, 0, v3424; GCN-NEXT: v_mul_lo_u32 v9, v9, v6425; GCN-NEXT: v_mul_lo_u32 v10, v10, v5426; GCN-NEXT: v_sub_i32_e32 v8, vcc, 0, v1427; GCN-NEXT: v_mul_hi_u32 v9, v6, v9428; GCN-NEXT: v_max_i32_e32 v1, v1, v8429; GCN-NEXT: v_mul_hi_u32 v8, v5, v10430; GCN-NEXT: v_ashrrev_i32_e32 v4, 31, v4431; GCN-NEXT: v_add_i32_e32 v6, vcc, v6, v9432; GCN-NEXT: v_add_i32_e32 v5, vcc, v5, v8433; GCN-NEXT: v_mul_hi_u32 v6, v0, v6434; GCN-NEXT: v_mul_hi_u32 v5, v1, v5435; GCN-NEXT: v_ashrrev_i32_e32 v7, 31, v7436; GCN-NEXT: v_mul_lo_u32 v8, v6, v2437; GCN-NEXT: v_mul_lo_u32 v10, v5, v3438; GCN-NEXT: v_add_i32_e32 v9, vcc, 1, v6439; GCN-NEXT: v_sub_i32_e32 v0, vcc, v0, v8440; GCN-NEXT: v_sub_i32_e32 v1, vcc, v1, v10441; GCN-NEXT: v_add_i32_e32 v11, vcc, 1, v5442; GCN-NEXT: v_cmp_ge_u32_e64 s[0:1], v0, v2443; GCN-NEXT: v_cmp_ge_u32_e64 s[2:3], v1, v3444; GCN-NEXT: v_sub_i32_e32 v8, vcc, v0, v2445; GCN-NEXT: v_cndmask_b32_e64 v6, v6, v9, s[0:1]446; GCN-NEXT: v_sub_i32_e32 v9, vcc, v1, v3447; GCN-NEXT: v_cndmask_b32_e64 v5, v5, v11, s[2:3]448; GCN-NEXT: v_cndmask_b32_e64 v0, v0, v8, s[0:1]449; GCN-NEXT: v_add_i32_e32 v8, vcc, 1, v6450; GCN-NEXT: v_cndmask_b32_e64 v1, v1, v9, s[2:3]451; GCN-NEXT: v_add_i32_e32 v9, vcc, 1, v5452; GCN-NEXT: v_cmp_ge_u32_e32 vcc, v0, v2453; GCN-NEXT: v_cndmask_b32_e32 v0, v6, v8, vcc454; GCN-NEXT: v_cmp_ge_u32_e32 vcc, v1, v3455; GCN-NEXT: v_cndmask_b32_e32 v1, v5, v9, vcc456; GCN-NEXT: v_xor_b32_e32 v0, v0, v4457; GCN-NEXT: v_xor_b32_e32 v1, v1, v7458; GCN-NEXT: v_sub_i32_e32 v0, vcc, v0, v4459; GCN-NEXT: v_sub_i32_e32 v1, vcc, v1, v7460; GCN-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 0461; GCN-NEXT: s_endpgm462;463; TONGA-LABEL: sdiv_v2i32:464; TONGA: ; %bb.0:465; TONGA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24466; TONGA-NEXT: s_mov_b32 s7, 0xf000467; TONGA-NEXT: s_mov_b32 s6, -1468; TONGA-NEXT: s_mov_b32 s10, s6469; TONGA-NEXT: s_mov_b32 s11, s7470; TONGA-NEXT: s_waitcnt lgkmcnt(0)471; TONGA-NEXT: s_mov_b32 s8, s2472; TONGA-NEXT: s_mov_b32 s9, s3473; TONGA-NEXT: buffer_load_dwordx4 v[0:3], off, s[8:11], 0474; TONGA-NEXT: s_mov_b32 s4, s0475; TONGA-NEXT: s_mov_b32 s5, s1476; TONGA-NEXT: s_waitcnt vmcnt(0)477; TONGA-NEXT: v_sub_u32_e32 v6, vcc, 0, v2478; TONGA-NEXT: v_sub_u32_e32 v9, vcc, 0, v3479; TONGA-NEXT: v_xor_b32_e32 v4, v0, v2480; TONGA-NEXT: v_xor_b32_e32 v7, v1, v3481; TONGA-NEXT: v_max_i32_e32 v2, v2, v6482; TONGA-NEXT: v_max_i32_e32 v3, v3, v9483; TONGA-NEXT: v_cvt_f32_u32_e32 v6, v2484; TONGA-NEXT: v_cvt_f32_u32_e32 v9, v3485; TONGA-NEXT: v_sub_u32_e32 v5, vcc, 0, v0486; TONGA-NEXT: v_rcp_iflag_f32_e32 v6, v6487; TONGA-NEXT: v_max_i32_e32 v0, v0, v5488; TONGA-NEXT: v_rcp_iflag_f32_e32 v5, v9489; TONGA-NEXT: v_sub_u32_e32 v9, vcc, 0, v2490; TONGA-NEXT: v_mul_f32_e32 v6, 0x4f7ffffe, v6491; TONGA-NEXT: v_mul_f32_e32 v5, 0x4f7ffffe, v5492; TONGA-NEXT: v_cvt_u32_f32_e32 v6, v6493; TONGA-NEXT: v_cvt_u32_f32_e32 v5, v5494; TONGA-NEXT: v_sub_u32_e32 v10, vcc, 0, v3495; TONGA-NEXT: v_mul_lo_u32 v9, v9, v6496; TONGA-NEXT: v_mul_lo_u32 v10, v10, v5497; TONGA-NEXT: v_sub_u32_e32 v8, vcc, 0, v1498; TONGA-NEXT: v_mul_hi_u32 v9, v6, v9499; TONGA-NEXT: v_max_i32_e32 v1, v1, v8500; TONGA-NEXT: v_mul_hi_u32 v8, v5, v10501; TONGA-NEXT: v_ashrrev_i32_e32 v4, 31, v4502; TONGA-NEXT: v_add_u32_e32 v6, vcc, v6, v9503; TONGA-NEXT: v_add_u32_e32 v5, vcc, v5, v8504; TONGA-NEXT: v_mul_hi_u32 v6, v0, v6505; TONGA-NEXT: v_mul_hi_u32 v5, v1, v5506; TONGA-NEXT: v_ashrrev_i32_e32 v7, 31, v7507; TONGA-NEXT: v_mul_lo_u32 v8, v6, v2508; TONGA-NEXT: v_mul_lo_u32 v10, v5, v3509; TONGA-NEXT: v_add_u32_e32 v9, vcc, 1, v6510; TONGA-NEXT: v_sub_u32_e32 v0, vcc, v0, v8511; TONGA-NEXT: v_sub_u32_e32 v1, vcc, v1, v10512; TONGA-NEXT: v_add_u32_e32 v11, vcc, 1, v5513; TONGA-NEXT: v_cmp_ge_u32_e64 s[0:1], v0, v2514; TONGA-NEXT: v_cmp_ge_u32_e64 s[2:3], v1, v3515; TONGA-NEXT: v_sub_u32_e32 v8, vcc, v0, v2516; TONGA-NEXT: v_cndmask_b32_e64 v6, v6, v9, s[0:1]517; TONGA-NEXT: v_sub_u32_e32 v9, vcc, v1, v3518; TONGA-NEXT: v_cndmask_b32_e64 v5, v5, v11, s[2:3]519; TONGA-NEXT: v_cndmask_b32_e64 v0, v0, v8, s[0:1]520; TONGA-NEXT: v_add_u32_e32 v8, vcc, 1, v6521; TONGA-NEXT: v_cndmask_b32_e64 v1, v1, v9, s[2:3]522; TONGA-NEXT: v_add_u32_e32 v9, vcc, 1, v5523; TONGA-NEXT: v_cmp_ge_u32_e32 vcc, v0, v2524; TONGA-NEXT: v_cndmask_b32_e32 v0, v6, v8, vcc525; TONGA-NEXT: v_cmp_ge_u32_e32 vcc, v1, v3526; TONGA-NEXT: v_cndmask_b32_e32 v1, v5, v9, vcc527; TONGA-NEXT: v_xor_b32_e32 v0, v0, v4528; TONGA-NEXT: v_xor_b32_e32 v1, v1, v7529; TONGA-NEXT: v_sub_u32_e32 v0, vcc, v0, v4530; TONGA-NEXT: v_sub_u32_e32 v1, vcc, v1, v7531; TONGA-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 0532; TONGA-NEXT: s_endpgm533;534; GFX9-LABEL: sdiv_v2i32:535; GFX9: ; %bb.0:536; GFX9-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24537; GFX9-NEXT: s_mov_b32 s3, 0xf000538; GFX9-NEXT: s_mov_b32 s2, -1539; GFX9-NEXT: s_mov_b32 s6, s2540; GFX9-NEXT: s_mov_b32 s7, s3541; GFX9-NEXT: s_waitcnt lgkmcnt(0)542; GFX9-NEXT: s_mov_b32 s4, s10543; GFX9-NEXT: s_mov_b32 s5, s11544; GFX9-NEXT: buffer_load_dwordx4 v[0:3], off, s[4:7], 0545; GFX9-NEXT: s_waitcnt vmcnt(0)546; GFX9-NEXT: v_readfirstlane_b32 s0, v2547; GFX9-NEXT: s_abs_i32 s1, s0548; GFX9-NEXT: v_cvt_f32_u32_e32 v2, s1549; GFX9-NEXT: v_readfirstlane_b32 s5, v0550; GFX9-NEXT: s_xor_b32 s0, s5, s0551; GFX9-NEXT: s_ashr_i32 s6, s0, 31552; GFX9-NEXT: v_rcp_iflag_f32_e32 v2, v2553; GFX9-NEXT: s_sub_i32 s0, 0, s1554; GFX9-NEXT: s_abs_i32 s5, s5555; GFX9-NEXT: v_readfirstlane_b32 s4, v3556; GFX9-NEXT: v_mul_f32_e32 v0, 0x4f7ffffe, v2557; GFX9-NEXT: v_cvt_u32_f32_e32 v0, v0558; GFX9-NEXT: v_readfirstlane_b32 s7, v0559; GFX9-NEXT: s_mul_i32 s0, s0, s7560; GFX9-NEXT: s_mul_hi_u32 s0, s7, s0561; GFX9-NEXT: s_add_i32 s7, s7, s0562; GFX9-NEXT: s_mul_hi_u32 s0, s5, s7563; GFX9-NEXT: s_mul_i32 s7, s0, s1564; GFX9-NEXT: s_sub_i32 s5, s5, s7565; GFX9-NEXT: s_add_i32 s10, s0, 1566; GFX9-NEXT: s_sub_i32 s7, s5, s1567; GFX9-NEXT: s_cmp_ge_u32 s5, s1568; GFX9-NEXT: s_cselect_b32 s0, s10, s0569; GFX9-NEXT: s_cselect_b32 s5, s7, s5570; GFX9-NEXT: s_add_i32 s7, s0, 1571; GFX9-NEXT: s_cmp_ge_u32 s5, s1572; GFX9-NEXT: s_cselect_b32 s5, s7, s0573; GFX9-NEXT: s_abs_i32 s7, s4574; GFX9-NEXT: v_cvt_f32_u32_e32 v0, s7575; GFX9-NEXT: s_xor_b32 s5, s5, s6576; GFX9-NEXT: s_mov_b32 s1, s9577; GFX9-NEXT: s_sub_i32 s9, 0, s7578; GFX9-NEXT: v_rcp_iflag_f32_e32 v0, v0579; GFX9-NEXT: s_sub_i32 s5, s5, s6580; GFX9-NEXT: s_mov_b32 s0, s8581; GFX9-NEXT: v_readfirstlane_b32 s8, v1582; GFX9-NEXT: v_mul_f32_e32 v0, 0x4f7ffffe, v0583; GFX9-NEXT: v_cvt_u32_f32_e32 v0, v0584; GFX9-NEXT: s_xor_b32 s4, s8, s4585; GFX9-NEXT: s_abs_i32 s8, s8586; GFX9-NEXT: s_ashr_i32 s4, s4, 31587; GFX9-NEXT: v_readfirstlane_b32 s6, v0588; GFX9-NEXT: s_mul_i32 s9, s9, s6589; GFX9-NEXT: s_mul_hi_u32 s9, s6, s9590; GFX9-NEXT: s_add_i32 s6, s6, s9591; GFX9-NEXT: s_mul_hi_u32 s6, s8, s6592; GFX9-NEXT: s_mul_i32 s9, s6, s7593; GFX9-NEXT: s_sub_i32 s8, s8, s9594; GFX9-NEXT: s_add_i32 s10, s6, 1595; GFX9-NEXT: s_sub_i32 s9, s8, s7596; GFX9-NEXT: s_cmp_ge_u32 s8, s7597; GFX9-NEXT: s_cselect_b32 s6, s10, s6598; GFX9-NEXT: s_cselect_b32 s8, s9, s8599; GFX9-NEXT: s_add_i32 s9, s6, 1600; GFX9-NEXT: s_cmp_ge_u32 s8, s7601; GFX9-NEXT: s_cselect_b32 s6, s9, s6602; GFX9-NEXT: s_xor_b32 s6, s6, s4603; GFX9-NEXT: s_sub_i32 s4, s6, s4604; GFX9-NEXT: v_mov_b32_e32 v0, s5605; GFX9-NEXT: v_mov_b32_e32 v1, s4606; GFX9-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 0607; GFX9-NEXT: s_endpgm608;609; EG-LABEL: sdiv_v2i32:610; EG: ; %bb.0:611; EG-NEXT: ALU 0, @8, KC0[CB0:0-32], KC1[]612; EG-NEXT: TEX 0 @6613; EG-NEXT: ALU 51, @9, KC0[CB0:0-32], KC1[]614; EG-NEXT: MEM_RAT_CACHELESS STORE_RAW T0.XY, T1.X, 1615; EG-NEXT: CF_END616; EG-NEXT: PAD617; EG-NEXT: Fetch clause starting at 6:618; EG-NEXT: VTX_READ_128 T0.XYZW, T0.X, 0, #1619; EG-NEXT: ALU clause starting at 8:620; EG-NEXT: MOV * T0.X, KC0[2].Z,621; EG-NEXT: ALU clause starting at 9:622; EG-NEXT: SETGT_INT * T1.W, 0.0, T0.W,623; EG-NEXT: ADD_INT T0.W, T0.W, PV.W,624; EG-NEXT: SETGT_INT * T2.W, 0.0, T0.Z,625; EG-NEXT: XOR_INT * T0.W, PV.W, T1.W,626; EG-NEXT: SUB_INT T1.Z, 0.0, PV.W,627; EG-NEXT: ADD_INT T3.W, T0.Z, T2.W,628; EG-NEXT: RECIP_UINT * T0.Z, PV.W,629; EG-NEXT: XOR_INT T3.W, PV.W, T2.W,630; EG-NEXT: MULLO_INT * T1.X, PV.Z, PS,631; EG-NEXT: SUB_INT T4.W, 0.0, PV.W,632; EG-NEXT: RECIP_UINT * T1.Y, PV.W,633; EG-NEXT: SETGT_INT T5.W, 0.0, T0.X,634; EG-NEXT: MULLO_INT * T1.Z, PV.W, PS,635; EG-NEXT: SETGT_INT T2.Z, 0.0, T0.Y,636; EG-NEXT: ADD_INT T4.W, T0.X, PV.W,637; EG-NEXT: MULHI * T0.X, T1.Y, PS,638; EG-NEXT: ADD_INT T1.Y, T1.Y, PS,639; EG-NEXT: XOR_INT T1.Z, PV.W, T5.W,640; EG-NEXT: ADD_INT T4.W, T0.Y, PV.Z, BS:VEC_120/SCL_212641; EG-NEXT: MULHI * T0.X, T0.Z, T1.X,642; EG-NEXT: ADD_INT T0.Z, T0.Z, PS,643; EG-NEXT: XOR_INT T4.W, PV.W, T2.Z,644; EG-NEXT: MULHI * T0.X, PV.Z, PV.Y,645; EG-NEXT: MULHI * T0.Y, PV.W, PV.Z,646; EG-NEXT: MULLO_INT * T0.Z, PS, T0.W,647; EG-NEXT: SUB_INT T4.W, T4.W, PS,648; EG-NEXT: MULLO_INT * T0.Z, T0.X, T3.W,649; EG-NEXT: SUB_INT T1.Y, T1.Z, PS,650; EG-NEXT: ADD_INT T0.Z, T0.Y, 1,651; EG-NEXT: SETGE_UINT T6.W, PV.W, T0.W,652; EG-NEXT: SUB_INT * T7.W, PV.W, T0.W,653; EG-NEXT: CNDE_INT T1.X, PV.W, T4.W, PS, BS:VEC_021/SCL_122654; EG-NEXT: CNDE_INT T0.Y, PV.W, T0.Y, PV.Z,655; EG-NEXT: ADD_INT T0.Z, T0.X, 1,656; EG-NEXT: SETGE_UINT T4.W, PV.Y, T3.W,657; EG-NEXT: SUB_INT * T6.W, PV.Y, T3.W,658; EG-NEXT: CNDE_INT T1.Y, PV.W, T1.Y, PS,659; EG-NEXT: CNDE_INT T0.Z, PV.W, T0.X, PV.Z,660; EG-NEXT: ADD_INT T4.W, PV.Y, 1,661; EG-NEXT: SETGE_UINT * T0.W, PV.X, T0.W,662; EG-NEXT: CNDE_INT T0.Y, PS, T0.Y, PV.W,663; EG-NEXT: XOR_INT T1.Z, T2.Z, T1.W, BS:VEC_021/SCL_122664; EG-NEXT: ADD_INT T0.W, PV.Z, 1,665; EG-NEXT: SETGE_UINT * T1.W, PV.Y, T3.W,666; EG-NEXT: CNDE_INT T0.Z, PS, T0.Z, PV.W,667; EG-NEXT: XOR_INT T0.W, T5.W, T2.W,668; EG-NEXT: XOR_INT * T1.W, PV.Y, PV.Z,669; EG-NEXT: SUB_INT T0.Y, PS, T1.Z,670; EG-NEXT: XOR_INT * T1.W, PV.Z, PV.W,671; EG-NEXT: SUB_INT T0.X, PV.W, T0.W,672; EG-NEXT: LSHR * T1.X, KC0[2].Y, literal.x,673; EG-NEXT: 2(2.802597e-45), 0(0.000000e+00)674 %den_ptr = getelementptr <2 x i32>, ptr addrspace(1) %in, i32 1675 %num = load <2 x i32>, ptr addrspace(1) %in676 %den = load <2 x i32>, ptr addrspace(1) %den_ptr677 %result = sdiv <2 x i32> %num, %den678 store <2 x i32> %result, ptr addrspace(1) %out679 ret void680}681 682define amdgpu_kernel void @sdiv_v2i32_4(ptr addrspace(1) %out, ptr addrspace(1) %in) {683; GCN-LABEL: sdiv_v2i32_4:684; GCN: ; %bb.0:685; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9686; GCN-NEXT: s_mov_b32 s7, 0xf000687; GCN-NEXT: s_mov_b32 s6, -1688; GCN-NEXT: s_mov_b32 s10, s6689; GCN-NEXT: s_mov_b32 s11, s7690; GCN-NEXT: s_waitcnt lgkmcnt(0)691; GCN-NEXT: s_mov_b32 s8, s2692; GCN-NEXT: s_mov_b32 s9, s3693; GCN-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 0694; GCN-NEXT: s_mov_b32 s4, s0695; GCN-NEXT: s_mov_b32 s5, s1696; GCN-NEXT: s_waitcnt vmcnt(0)697; GCN-NEXT: v_ashrrev_i32_e32 v2, 31, v0698; GCN-NEXT: v_ashrrev_i32_e32 v3, 31, v1699; GCN-NEXT: v_lshrrev_b32_e32 v2, 30, v2700; GCN-NEXT: v_lshrrev_b32_e32 v3, 30, v3701; GCN-NEXT: v_add_i32_e32 v0, vcc, v2, v0702; GCN-NEXT: v_add_i32_e32 v1, vcc, v3, v1703; GCN-NEXT: v_ashrrev_i32_e32 v0, 2, v0704; GCN-NEXT: v_ashrrev_i32_e32 v1, 2, v1705; GCN-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 0706; GCN-NEXT: s_endpgm707;708; TONGA-LABEL: sdiv_v2i32_4:709; TONGA: ; %bb.0:710; TONGA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24711; TONGA-NEXT: s_mov_b32 s7, 0xf000712; TONGA-NEXT: s_mov_b32 s6, -1713; TONGA-NEXT: s_mov_b32 s10, s6714; TONGA-NEXT: s_mov_b32 s11, s7715; TONGA-NEXT: s_waitcnt lgkmcnt(0)716; TONGA-NEXT: s_mov_b32 s8, s2717; TONGA-NEXT: s_mov_b32 s9, s3718; TONGA-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 0719; TONGA-NEXT: s_mov_b32 s4, s0720; TONGA-NEXT: s_mov_b32 s5, s1721; TONGA-NEXT: s_waitcnt vmcnt(0)722; TONGA-NEXT: v_ashrrev_i32_e32 v2, 31, v0723; TONGA-NEXT: v_ashrrev_i32_e32 v3, 31, v1724; TONGA-NEXT: v_lshrrev_b32_e32 v2, 30, v2725; TONGA-NEXT: v_lshrrev_b32_e32 v3, 30, v3726; TONGA-NEXT: v_add_u32_e32 v0, vcc, v2, v0727; TONGA-NEXT: v_add_u32_e32 v1, vcc, v3, v1728; TONGA-NEXT: v_ashrrev_i32_e32 v0, 2, v0729; TONGA-NEXT: v_ashrrev_i32_e32 v1, 2, v1730; TONGA-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 0731; TONGA-NEXT: s_endpgm732;733; GFX9-LABEL: sdiv_v2i32_4:734; GFX9: ; %bb.0:735; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24736; GFX9-NEXT: s_mov_b32 s7, 0xf000737; GFX9-NEXT: s_mov_b32 s6, -1738; GFX9-NEXT: s_mov_b32 s10, s6739; GFX9-NEXT: s_mov_b32 s11, s7740; GFX9-NEXT: s_waitcnt lgkmcnt(0)741; GFX9-NEXT: s_mov_b32 s8, s2742; GFX9-NEXT: s_mov_b32 s9, s3743; GFX9-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 0744; GFX9-NEXT: s_mov_b32 s4, s0745; GFX9-NEXT: s_mov_b32 s5, s1746; GFX9-NEXT: s_waitcnt vmcnt(0)747; GFX9-NEXT: v_ashrrev_i32_e32 v2, 31, v0748; GFX9-NEXT: v_ashrrev_i32_e32 v3, 31, v1749; GFX9-NEXT: v_lshrrev_b32_e32 v2, 30, v2750; GFX9-NEXT: v_lshrrev_b32_e32 v3, 30, v3751; GFX9-NEXT: v_add_u32_e32 v0, v0, v2752; GFX9-NEXT: v_add_u32_e32 v1, v1, v3753; GFX9-NEXT: v_ashrrev_i32_e32 v0, 2, v0754; GFX9-NEXT: v_ashrrev_i32_e32 v1, 2, v1755; GFX9-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 0756; GFX9-NEXT: s_endpgm757;758; EG-LABEL: sdiv_v2i32_4:759; EG: ; %bb.0:760; EG-NEXT: ALU 0, @8, KC0[CB0:0-32], KC1[]761; EG-NEXT: TEX 0 @6762; EG-NEXT: ALU 13, @9, KC0[CB0:0-32], KC1[]763; EG-NEXT: MEM_RAT_CACHELESS STORE_RAW T0.XY, T1.X, 1764; EG-NEXT: CF_END765; EG-NEXT: PAD766; EG-NEXT: Fetch clause starting at 6:767; EG-NEXT: VTX_READ_64 T0.XY, T0.X, 0, #1768; EG-NEXT: ALU clause starting at 8:769; EG-NEXT: MOV * T0.X, KC0[2].Z,770; EG-NEXT: ALU clause starting at 9:771; EG-NEXT: ASHR * T0.W, T0.Y, literal.x,772; EG-NEXT: 31(4.344025e-44), 0(0.000000e+00)773; EG-NEXT: LSHR T0.W, PV.W, literal.x,774; EG-NEXT: ASHR * T1.W, T0.X, literal.y,775; EG-NEXT: 30(4.203895e-44), 31(4.344025e-44)776; EG-NEXT: LSHR T1.W, PS, literal.x,777; EG-NEXT: ADD_INT * T0.W, T0.Y, PV.W,778; EG-NEXT: 30(4.203895e-44), 0(0.000000e+00)779; EG-NEXT: ASHR T0.Y, PS, literal.x,780; EG-NEXT: ADD_INT * T0.W, T0.X, PV.W,781; EG-NEXT: 2(2.802597e-45), 0(0.000000e+00)782; EG-NEXT: ASHR T0.X, PV.W, literal.x,783; EG-NEXT: LSHR * T1.X, KC0[2].Y, literal.x,784; EG-NEXT: 2(2.802597e-45), 0(0.000000e+00)785 %num = load <2 x i32>, ptr addrspace(1) %in786 %result = sdiv <2 x i32> %num, <i32 4, i32 4>787 store <2 x i32> %result, ptr addrspace(1) %out788 ret void789}790 791define amdgpu_kernel void @sdiv_v4i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {792; GCN-LABEL: sdiv_v4i32:793; GCN: ; %bb.0:794; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9795; GCN-NEXT: s_mov_b32 s7, 0xf000796; GCN-NEXT: s_mov_b32 s6, -1797; GCN-NEXT: s_mov_b32 s10, s6798; GCN-NEXT: s_mov_b32 s11, s7799; GCN-NEXT: s_waitcnt lgkmcnt(0)800; GCN-NEXT: s_mov_b32 s8, s2801; GCN-NEXT: s_mov_b32 s9, s3802; GCN-NEXT: buffer_load_dwordx4 v[0:3], off, s[8:11], 0803; GCN-NEXT: buffer_load_dwordx4 v[4:7], off, s[8:11], 0 offset:16804; GCN-NEXT: s_mov_b32 s4, s0805; GCN-NEXT: s_mov_b32 s5, s1806; GCN-NEXT: s_waitcnt vmcnt(1)807; GCN-NEXT: v_sub_i32_e32 v9, vcc, 0, v0808; GCN-NEXT: s_waitcnt vmcnt(0)809; GCN-NEXT: v_sub_i32_e32 v10, vcc, 0, v4810; GCN-NEXT: v_xor_b32_e32 v8, v0, v4811; GCN-NEXT: v_max_i32_e32 v4, v4, v10812; GCN-NEXT: v_cvt_f32_u32_e32 v10, v4813; GCN-NEXT: v_sub_i32_e32 v13, vcc, 0, v5814; GCN-NEXT: v_xor_b32_e32 v11, v1, v5815; GCN-NEXT: v_rcp_iflag_f32_e32 v10, v10816; GCN-NEXT: v_max_i32_e32 v5, v5, v13817; GCN-NEXT: v_cvt_f32_u32_e32 v13, v5818; GCN-NEXT: v_sub_i32_e32 v16, vcc, 0, v4819; GCN-NEXT: v_mul_f32_e32 v10, 0x4f7ffffe, v10820; GCN-NEXT: v_cvt_u32_f32_e32 v10, v10821; GCN-NEXT: v_rcp_iflag_f32_e32 v13, v13822; GCN-NEXT: v_sub_i32_e32 v12, vcc, 0, v1823; GCN-NEXT: v_mul_lo_u32 v16, v16, v10824; GCN-NEXT: v_mul_f32_e32 v13, 0x4f7ffffe, v13825; GCN-NEXT: v_cvt_u32_f32_e32 v13, v13826; GCN-NEXT: v_max_i32_e32 v0, v0, v9827; GCN-NEXT: v_mul_hi_u32 v16, v10, v16828; GCN-NEXT: v_max_i32_e32 v1, v1, v12829; GCN-NEXT: v_sub_i32_e32 v15, vcc, 0, v6830; GCN-NEXT: v_add_i32_e32 v10, vcc, v10, v16831; GCN-NEXT: v_sub_i32_e32 v16, vcc, 0, v5832; GCN-NEXT: v_mul_lo_u32 v16, v16, v13833; GCN-NEXT: v_mul_hi_u32 v10, v0, v10834; GCN-NEXT: v_xor_b32_e32 v14, v2, v6835; GCN-NEXT: v_max_i32_e32 v6, v6, v15836; GCN-NEXT: v_mul_hi_u32 v12, v13, v16837; GCN-NEXT: v_cvt_f32_u32_e32 v15, v6838; GCN-NEXT: v_ashrrev_i32_e32 v8, 31, v8839; GCN-NEXT: v_ashrrev_i32_e32 v11, 31, v11840; GCN-NEXT: v_add_i32_e32 v12, vcc, v13, v12841; GCN-NEXT: v_mul_lo_u32 v13, v10, v4842; GCN-NEXT: v_mul_hi_u32 v12, v1, v12843; GCN-NEXT: v_rcp_iflag_f32_e32 v9, v15844; GCN-NEXT: v_ashrrev_i32_e32 v14, 31, v14845; GCN-NEXT: v_sub_i32_e32 v0, vcc, v0, v13846; GCN-NEXT: v_add_i32_e32 v13, vcc, 1, v10847; GCN-NEXT: v_cmp_ge_u32_e64 s[0:1], v0, v4848; GCN-NEXT: v_cndmask_b32_e64 v10, v10, v13, s[0:1]849; GCN-NEXT: v_sub_i32_e32 v13, vcc, v0, v4850; GCN-NEXT: v_cndmask_b32_e64 v0, v0, v13, s[0:1]851; GCN-NEXT: v_cmp_ge_u32_e64 s[0:1], v0, v4852; GCN-NEXT: v_mul_lo_u32 v0, v12, v5853; GCN-NEXT: v_mul_f32_e32 v9, 0x4f7ffffe, v9854; GCN-NEXT: v_cvt_u32_f32_e32 v9, v9855; GCN-NEXT: v_sub_i32_e32 v4, vcc, 0, v6856; GCN-NEXT: v_sub_i32_e32 v0, vcc, v1, v0857; GCN-NEXT: v_add_i32_e32 v1, vcc, 1, v12858; GCN-NEXT: v_cmp_ge_u32_e64 s[2:3], v0, v5859; GCN-NEXT: v_cndmask_b32_e64 v1, v12, v1, s[2:3]860; GCN-NEXT: v_sub_i32_e32 v12, vcc, v0, v5861; GCN-NEXT: v_mul_lo_u32 v4, v4, v9862; GCN-NEXT: v_cndmask_b32_e64 v0, v0, v12, s[2:3]863; GCN-NEXT: v_cmp_ge_u32_e64 s[2:3], v0, v5864; GCN-NEXT: v_sub_i32_e32 v0, vcc, 0, v7865; GCN-NEXT: v_max_i32_e32 v5, v7, v0866; GCN-NEXT: v_cvt_f32_u32_e32 v0, v5867; GCN-NEXT: v_mul_hi_u32 v4, v9, v4868; GCN-NEXT: v_add_i32_e32 v13, vcc, 1, v10869; GCN-NEXT: v_rcp_iflag_f32_e32 v0, v0870; GCN-NEXT: v_add_i32_e32 v4, vcc, v9, v4871; GCN-NEXT: v_sub_i32_e32 v9, vcc, 0, v2872; GCN-NEXT: v_max_i32_e32 v2, v2, v9873; GCN-NEXT: v_mul_hi_u32 v4, v2, v4874; GCN-NEXT: v_mul_f32_e32 v0, 0x4f7ffffe, v0875; GCN-NEXT: v_cvt_u32_f32_e32 v9, v0876; GCN-NEXT: v_cndmask_b32_e64 v0, v10, v13, s[0:1]877; GCN-NEXT: v_xor_b32_e32 v0, v0, v8878; GCN-NEXT: v_sub_i32_e32 v0, vcc, v0, v8879; GCN-NEXT: v_mul_lo_u32 v8, v4, v6880; GCN-NEXT: v_add_i32_e32 v12, vcc, 1, v1881; GCN-NEXT: v_sub_i32_e32 v10, vcc, 0, v5882; GCN-NEXT: v_sub_i32_e32 v2, vcc, v2, v8883; GCN-NEXT: v_cndmask_b32_e64 v1, v1, v12, s[2:3]884; GCN-NEXT: v_mul_lo_u32 v10, v10, v9885; GCN-NEXT: v_add_i32_e32 v8, vcc, 1, v4886; GCN-NEXT: v_cmp_ge_u32_e64 s[0:1], v2, v6887; GCN-NEXT: v_xor_b32_e32 v1, v1, v11888; GCN-NEXT: v_cndmask_b32_e64 v4, v4, v8, s[0:1]889; GCN-NEXT: v_sub_i32_e32 v8, vcc, v2, v6890; GCN-NEXT: v_sub_i32_e32 v1, vcc, v1, v11891; GCN-NEXT: v_cndmask_b32_e64 v2, v2, v8, s[0:1]892; GCN-NEXT: v_add_i32_e32 v8, vcc, 1, v4893; GCN-NEXT: v_cmp_ge_u32_e32 vcc, v2, v6894; GCN-NEXT: v_cndmask_b32_e32 v2, v4, v8, vcc895; GCN-NEXT: v_mul_hi_u32 v4, v9, v10896; GCN-NEXT: v_sub_i32_e32 v6, vcc, 0, v3897; GCN-NEXT: v_max_i32_e32 v6, v3, v6898; GCN-NEXT: v_add_i32_e32 v4, vcc, v9, v4899; GCN-NEXT: v_mul_hi_u32 v4, v6, v4900; GCN-NEXT: v_xor_b32_e32 v2, v2, v14901; GCN-NEXT: v_sub_i32_e32 v2, vcc, v2, v14902; GCN-NEXT: v_mul_lo_u32 v8, v4, v5903; GCN-NEXT: v_xor_b32_e32 v3, v3, v7904; GCN-NEXT: v_add_i32_e32 v7, vcc, 1, v4905; GCN-NEXT: v_sub_i32_e32 v6, vcc, v6, v8906; GCN-NEXT: v_sub_i32_e32 v8, vcc, v6, v5907; GCN-NEXT: v_cmp_ge_u32_e32 vcc, v6, v5908; GCN-NEXT: v_cndmask_b32_e32 v4, v4, v7, vcc909; GCN-NEXT: v_cndmask_b32_e32 v6, v6, v8, vcc910; GCN-NEXT: v_add_i32_e32 v7, vcc, 1, v4911; GCN-NEXT: v_cmp_ge_u32_e32 vcc, v6, v5912; GCN-NEXT: v_ashrrev_i32_e32 v3, 31, v3913; GCN-NEXT: v_cndmask_b32_e32 v4, v4, v7, vcc914; GCN-NEXT: v_xor_b32_e32 v4, v4, v3915; GCN-NEXT: v_sub_i32_e32 v3, vcc, v4, v3916; GCN-NEXT: buffer_store_dwordx4 v[0:3], off, s[4:7], 0917; GCN-NEXT: s_endpgm918;919; TONGA-LABEL: sdiv_v4i32:920; TONGA: ; %bb.0:921; TONGA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24922; TONGA-NEXT: s_mov_b32 s7, 0xf000923; TONGA-NEXT: s_mov_b32 s6, -1924; TONGA-NEXT: s_mov_b32 s10, s6925; TONGA-NEXT: s_mov_b32 s11, s7926; TONGA-NEXT: s_waitcnt lgkmcnt(0)927; TONGA-NEXT: s_mov_b32 s8, s2928; TONGA-NEXT: s_mov_b32 s9, s3929; TONGA-NEXT: buffer_load_dwordx4 v[0:3], off, s[8:11], 0930; TONGA-NEXT: buffer_load_dwordx4 v[4:7], off, s[8:11], 0 offset:16931; TONGA-NEXT: s_mov_b32 s4, s0932; TONGA-NEXT: s_mov_b32 s5, s1933; TONGA-NEXT: s_waitcnt vmcnt(1)934; TONGA-NEXT: v_sub_u32_e32 v9, vcc, 0, v0935; TONGA-NEXT: s_waitcnt vmcnt(0)936; TONGA-NEXT: v_sub_u32_e32 v10, vcc, 0, v4937; TONGA-NEXT: v_xor_b32_e32 v8, v0, v4938; TONGA-NEXT: v_max_i32_e32 v4, v4, v10939; TONGA-NEXT: v_cvt_f32_u32_e32 v10, v4940; TONGA-NEXT: v_sub_u32_e32 v13, vcc, 0, v5941; TONGA-NEXT: v_xor_b32_e32 v11, v1, v5942; TONGA-NEXT: v_rcp_iflag_f32_e32 v10, v10943; TONGA-NEXT: v_max_i32_e32 v5, v5, v13944; TONGA-NEXT: v_cvt_f32_u32_e32 v13, v5945; TONGA-NEXT: v_sub_u32_e32 v16, vcc, 0, v4946; TONGA-NEXT: v_mul_f32_e32 v10, 0x4f7ffffe, v10947; TONGA-NEXT: v_cvt_u32_f32_e32 v10, v10948; TONGA-NEXT: v_rcp_iflag_f32_e32 v13, v13949; TONGA-NEXT: v_sub_u32_e32 v12, vcc, 0, v1950; TONGA-NEXT: v_mul_lo_u32 v16, v16, v10951; TONGA-NEXT: v_mul_f32_e32 v13, 0x4f7ffffe, v13952; TONGA-NEXT: v_cvt_u32_f32_e32 v13, v13953; TONGA-NEXT: v_max_i32_e32 v0, v0, v9954; TONGA-NEXT: v_mul_hi_u32 v16, v10, v16955; TONGA-NEXT: v_max_i32_e32 v1, v1, v12956; TONGA-NEXT: v_sub_u32_e32 v15, vcc, 0, v6957; TONGA-NEXT: v_add_u32_e32 v10, vcc, v10, v16958; TONGA-NEXT: v_sub_u32_e32 v16, vcc, 0, v5959; TONGA-NEXT: v_mul_lo_u32 v16, v16, v13960; TONGA-NEXT: v_mul_hi_u32 v10, v0, v10961; TONGA-NEXT: v_xor_b32_e32 v14, v2, v6962; TONGA-NEXT: v_max_i32_e32 v6, v6, v15963; TONGA-NEXT: v_mul_hi_u32 v12, v13, v16964; TONGA-NEXT: v_cvt_f32_u32_e32 v15, v6965; TONGA-NEXT: v_ashrrev_i32_e32 v8, 31, v8966; TONGA-NEXT: v_ashrrev_i32_e32 v11, 31, v11967; TONGA-NEXT: v_add_u32_e32 v12, vcc, v13, v12968; TONGA-NEXT: v_mul_lo_u32 v13, v10, v4969; TONGA-NEXT: v_mul_hi_u32 v12, v1, v12970; TONGA-NEXT: v_rcp_iflag_f32_e32 v9, v15971; TONGA-NEXT: v_ashrrev_i32_e32 v14, 31, v14972; TONGA-NEXT: v_sub_u32_e32 v0, vcc, v0, v13973; TONGA-NEXT: v_add_u32_e32 v13, vcc, 1, v10974; TONGA-NEXT: v_cmp_ge_u32_e64 s[0:1], v0, v4975; TONGA-NEXT: v_cndmask_b32_e64 v10, v10, v13, s[0:1]976; TONGA-NEXT: v_sub_u32_e32 v13, vcc, v0, v4977; TONGA-NEXT: v_cndmask_b32_e64 v0, v0, v13, s[0:1]978; TONGA-NEXT: v_cmp_ge_u32_e64 s[0:1], v0, v4979; TONGA-NEXT: v_mul_lo_u32 v0, v12, v5980; TONGA-NEXT: v_mul_f32_e32 v9, 0x4f7ffffe, v9981; TONGA-NEXT: v_cvt_u32_f32_e32 v9, v9982; TONGA-NEXT: v_sub_u32_e32 v4, vcc, 0, v6983; TONGA-NEXT: v_sub_u32_e32 v0, vcc, v1, v0984; TONGA-NEXT: v_add_u32_e32 v1, vcc, 1, v12985; TONGA-NEXT: v_cmp_ge_u32_e64 s[2:3], v0, v5986; TONGA-NEXT: v_cndmask_b32_e64 v1, v12, v1, s[2:3]987; TONGA-NEXT: v_sub_u32_e32 v12, vcc, v0, v5988; TONGA-NEXT: v_mul_lo_u32 v4, v4, v9989; TONGA-NEXT: v_cndmask_b32_e64 v0, v0, v12, s[2:3]990; TONGA-NEXT: v_cmp_ge_u32_e64 s[2:3], v0, v5991; TONGA-NEXT: v_sub_u32_e32 v0, vcc, 0, v7992; TONGA-NEXT: v_max_i32_e32 v5, v7, v0993; TONGA-NEXT: v_cvt_f32_u32_e32 v0, v5994; TONGA-NEXT: v_mul_hi_u32 v4, v9, v4995; TONGA-NEXT: v_add_u32_e32 v13, vcc, 1, v10996; TONGA-NEXT: v_rcp_iflag_f32_e32 v0, v0997; TONGA-NEXT: v_add_u32_e32 v4, vcc, v9, v4998; TONGA-NEXT: v_sub_u32_e32 v9, vcc, 0, v2999; TONGA-NEXT: v_max_i32_e32 v2, v2, v91000; TONGA-NEXT: v_mul_hi_u32 v4, v2, v41001; TONGA-NEXT: v_mul_f32_e32 v0, 0x4f7ffffe, v01002; TONGA-NEXT: v_cvt_u32_f32_e32 v9, v01003; TONGA-NEXT: v_cndmask_b32_e64 v0, v10, v13, s[0:1]1004; TONGA-NEXT: v_xor_b32_e32 v0, v0, v81005; TONGA-NEXT: v_sub_u32_e32 v0, vcc, v0, v81006; TONGA-NEXT: v_mul_lo_u32 v8, v4, v61007; TONGA-NEXT: v_add_u32_e32 v12, vcc, 1, v11008; TONGA-NEXT: v_sub_u32_e32 v10, vcc, 0, v51009; TONGA-NEXT: v_sub_u32_e32 v2, vcc, v2, v81010; TONGA-NEXT: v_cndmask_b32_e64 v1, v1, v12, s[2:3]1011; TONGA-NEXT: v_mul_lo_u32 v10, v10, v91012; TONGA-NEXT: v_add_u32_e32 v8, vcc, 1, v41013; TONGA-NEXT: v_cmp_ge_u32_e64 s[0:1], v2, v61014; TONGA-NEXT: v_xor_b32_e32 v1, v1, v111015; TONGA-NEXT: v_cndmask_b32_e64 v4, v4, v8, s[0:1]1016; TONGA-NEXT: v_sub_u32_e32 v8, vcc, v2, v61017; TONGA-NEXT: v_sub_u32_e32 v1, vcc, v1, v111018; TONGA-NEXT: v_cndmask_b32_e64 v2, v2, v8, s[0:1]1019; TONGA-NEXT: v_add_u32_e32 v8, vcc, 1, v41020; TONGA-NEXT: v_cmp_ge_u32_e32 vcc, v2, v61021; TONGA-NEXT: v_cndmask_b32_e32 v2, v4, v8, vcc1022; TONGA-NEXT: v_mul_hi_u32 v4, v9, v101023; TONGA-NEXT: v_sub_u32_e32 v6, vcc, 0, v31024; TONGA-NEXT: v_max_i32_e32 v6, v3, v61025; TONGA-NEXT: v_add_u32_e32 v4, vcc, v9, v41026; TONGA-NEXT: v_mul_hi_u32 v4, v6, v41027; TONGA-NEXT: v_xor_b32_e32 v2, v2, v141028; TONGA-NEXT: v_sub_u32_e32 v2, vcc, v2, v141029; TONGA-NEXT: v_mul_lo_u32 v8, v4, v51030; TONGA-NEXT: v_xor_b32_e32 v3, v3, v71031; TONGA-NEXT: v_add_u32_e32 v7, vcc, 1, v41032; TONGA-NEXT: v_sub_u32_e32 v6, vcc, v6, v81033; TONGA-NEXT: v_sub_u32_e32 v8, vcc, v6, v51034; TONGA-NEXT: v_cmp_ge_u32_e32 vcc, v6, v51035; TONGA-NEXT: v_cndmask_b32_e32 v4, v4, v7, vcc1036; TONGA-NEXT: v_cndmask_b32_e32 v6, v6, v8, vcc1037; TONGA-NEXT: v_add_u32_e32 v7, vcc, 1, v41038; TONGA-NEXT: v_cmp_ge_u32_e32 vcc, v6, v51039; TONGA-NEXT: v_ashrrev_i32_e32 v3, 31, v31040; TONGA-NEXT: v_cndmask_b32_e32 v4, v4, v7, vcc1041; TONGA-NEXT: v_xor_b32_e32 v4, v4, v31042; TONGA-NEXT: v_sub_u32_e32 v3, vcc, v4, v31043; TONGA-NEXT: buffer_store_dwordx4 v[0:3], off, s[4:7], 01044; TONGA-NEXT: s_endpgm1045;1046; GFX9-LABEL: sdiv_v4i32:1047; GFX9: ; %bb.0:1048; GFX9-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x241049; GFX9-NEXT: s_mov_b32 s3, 0xf0001050; GFX9-NEXT: s_mov_b32 s2, -11051; GFX9-NEXT: s_mov_b32 s6, s21052; GFX9-NEXT: s_mov_b32 s7, s31053; GFX9-NEXT: s_waitcnt lgkmcnt(0)1054; GFX9-NEXT: s_mov_b32 s4, s101055; GFX9-NEXT: s_mov_b32 s5, s111056; GFX9-NEXT: buffer_load_dwordx4 v[0:3], off, s[4:7], 0 offset:161057; GFX9-NEXT: buffer_load_dwordx4 v[4:7], off, s[4:7], 01058; GFX9-NEXT: s_waitcnt vmcnt(1)1059; GFX9-NEXT: v_readfirstlane_b32 s0, v01060; GFX9-NEXT: s_abs_i32 s1, s01061; GFX9-NEXT: v_cvt_f32_u32_e32 v0, s11062; GFX9-NEXT: s_waitcnt vmcnt(0)1063; GFX9-NEXT: v_readfirstlane_b32 s5, v41064; GFX9-NEXT: s_xor_b32 s0, s5, s01065; GFX9-NEXT: s_ashr_i32 s6, s0, 311066; GFX9-NEXT: v_rcp_iflag_f32_e32 v0, v01067; GFX9-NEXT: s_sub_i32 s0, 0, s11068; GFX9-NEXT: s_abs_i32 s5, s51069; GFX9-NEXT: v_readfirstlane_b32 s4, v11070; GFX9-NEXT: v_mul_f32_e32 v0, 0x4f7ffffe, v01071; GFX9-NEXT: v_cvt_u32_f32_e32 v0, v01072; GFX9-NEXT: v_readfirstlane_b32 s7, v01073; GFX9-NEXT: s_mul_i32 s0, s0, s71074; GFX9-NEXT: s_mul_hi_u32 s0, s7, s01075; GFX9-NEXT: s_add_i32 s7, s7, s01076; GFX9-NEXT: s_mul_hi_u32 s0, s5, s71077; GFX9-NEXT: s_mul_i32 s7, s0, s11078; GFX9-NEXT: s_sub_i32 s5, s5, s71079; GFX9-NEXT: s_add_i32 s10, s0, 11080; GFX9-NEXT: s_sub_i32 s7, s5, s11081; GFX9-NEXT: s_cmp_ge_u32 s5, s11082; GFX9-NEXT: s_cselect_b32 s0, s10, s01083; GFX9-NEXT: s_cselect_b32 s5, s7, s51084; GFX9-NEXT: s_add_i32 s7, s0, 11085; GFX9-NEXT: s_cmp_ge_u32 s5, s11086; GFX9-NEXT: s_cselect_b32 s1, s7, s01087; GFX9-NEXT: s_abs_i32 s5, s41088; GFX9-NEXT: v_cvt_f32_u32_e32 v0, s51089; GFX9-NEXT: s_xor_b32 s1, s1, s61090; GFX9-NEXT: s_sub_i32 s10, 0, s51091; GFX9-NEXT: s_sub_i32 s6, s1, s61092; GFX9-NEXT: v_rcp_iflag_f32_e32 v0, v01093; GFX9-NEXT: s_mov_b32 s0, s81094; GFX9-NEXT: v_readfirstlane_b32 s8, v51095; GFX9-NEXT: s_xor_b32 s4, s8, s41096; GFX9-NEXT: v_mul_f32_e32 v0, 0x4f7ffffe, v01097; GFX9-NEXT: v_cvt_u32_f32_e32 v0, v01098; GFX9-NEXT: s_abs_i32 s8, s81099; GFX9-NEXT: s_ashr_i32 s4, s4, 311100; GFX9-NEXT: v_readfirstlane_b32 s7, v21101; GFX9-NEXT: v_readfirstlane_b32 s1, v01102; GFX9-NEXT: s_mul_i32 s10, s10, s11103; GFX9-NEXT: s_mul_hi_u32 s10, s1, s101104; GFX9-NEXT: s_add_i32 s1, s1, s101105; GFX9-NEXT: s_mul_hi_u32 s1, s8, s11106; GFX9-NEXT: s_mul_i32 s10, s1, s51107; GFX9-NEXT: s_sub_i32 s8, s8, s101108; GFX9-NEXT: s_add_i32 s11, s1, 11109; GFX9-NEXT: s_sub_i32 s10, s8, s51110; GFX9-NEXT: s_cmp_ge_u32 s8, s51111; GFX9-NEXT: s_cselect_b32 s1, s11, s11112; GFX9-NEXT: s_cselect_b32 s8, s10, s81113; GFX9-NEXT: s_add_i32 s10, s1, 11114; GFX9-NEXT: s_cmp_ge_u32 s8, s51115; GFX9-NEXT: s_cselect_b32 s5, s10, s11116; GFX9-NEXT: s_abs_i32 s8, s71117; GFX9-NEXT: v_cvt_f32_u32_e32 v0, s81118; GFX9-NEXT: s_xor_b32 s5, s5, s41119; GFX9-NEXT: s_sub_i32 s11, 0, s81120; GFX9-NEXT: s_sub_i32 s4, s5, s41121; GFX9-NEXT: v_rcp_iflag_f32_e32 v0, v01122; GFX9-NEXT: v_readfirstlane_b32 s10, v61123; GFX9-NEXT: s_xor_b32 s7, s10, s71124; GFX9-NEXT: s_abs_i32 s10, s101125; GFX9-NEXT: v_mul_f32_e32 v0, 0x4f7ffffe, v01126; GFX9-NEXT: v_cvt_u32_f32_e32 v0, v01127; GFX9-NEXT: s_ashr_i32 s7, s7, 311128; GFX9-NEXT: s_mov_b32 s1, s91129; GFX9-NEXT: v_readfirstlane_b32 s9, v31130; GFX9-NEXT: v_readfirstlane_b32 s5, v01131; GFX9-NEXT: s_mul_i32 s11, s11, s51132; GFX9-NEXT: s_mul_hi_u32 s11, s5, s111133; GFX9-NEXT: s_add_i32 s5, s5, s111134; GFX9-NEXT: s_mul_hi_u32 s5, s10, s51135; GFX9-NEXT: s_mul_i32 s11, s5, s81136; GFX9-NEXT: s_sub_i32 s10, s10, s111137; GFX9-NEXT: s_add_i32 s12, s5, 11138; GFX9-NEXT: s_sub_i32 s11, s10, s81139; GFX9-NEXT: s_cmp_ge_u32 s10, s81140; GFX9-NEXT: s_cselect_b32 s5, s12, s51141; GFX9-NEXT: s_cselect_b32 s10, s11, s101142; GFX9-NEXT: s_add_i32 s11, s5, 11143; GFX9-NEXT: s_cmp_ge_u32 s10, s81144; GFX9-NEXT: s_cselect_b32 s5, s11, s51145; GFX9-NEXT: s_abs_i32 s8, s91146; GFX9-NEXT: v_cvt_f32_u32_e32 v2, s81147; GFX9-NEXT: v_readfirstlane_b32 s10, v71148; GFX9-NEXT: s_xor_b32 s5, s5, s71149; GFX9-NEXT: v_mov_b32_e32 v1, s41150; GFX9-NEXT: v_rcp_iflag_f32_e32 v2, v21151; GFX9-NEXT: s_xor_b32 s4, s10, s91152; GFX9-NEXT: s_sub_i32 s9, 0, s81153; GFX9-NEXT: s_sub_i32 s5, s5, s71154; GFX9-NEXT: v_mul_f32_e32 v2, 0x4f7ffffe, v21155; GFX9-NEXT: v_cvt_u32_f32_e32 v2, v21156; GFX9-NEXT: v_mov_b32_e32 v0, s61157; GFX9-NEXT: s_abs_i32 s6, s101158; GFX9-NEXT: s_ashr_i32 s4, s4, 311159; GFX9-NEXT: v_readfirstlane_b32 s7, v21160; GFX9-NEXT: s_mul_i32 s9, s9, s71161; GFX9-NEXT: s_mul_hi_u32 s9, s7, s91162; GFX9-NEXT: s_add_i32 s7, s7, s91163; GFX9-NEXT: s_mul_hi_u32 s7, s6, s71164; GFX9-NEXT: s_mul_i32 s9, s7, s81165; GFX9-NEXT: s_sub_i32 s6, s6, s91166; GFX9-NEXT: s_add_i32 s10, s7, 11167; GFX9-NEXT: s_sub_i32 s9, s6, s81168; GFX9-NEXT: s_cmp_ge_u32 s6, s81169; GFX9-NEXT: s_cselect_b32 s7, s10, s71170; GFX9-NEXT: s_cselect_b32 s6, s9, s61171; GFX9-NEXT: s_add_i32 s9, s7, 11172; GFX9-NEXT: s_cmp_ge_u32 s6, s81173; GFX9-NEXT: s_cselect_b32 s6, s9, s71174; GFX9-NEXT: s_xor_b32 s6, s6, s41175; GFX9-NEXT: s_sub_i32 s4, s6, s41176; GFX9-NEXT: v_mov_b32_e32 v2, s51177; GFX9-NEXT: v_mov_b32_e32 v3, s41178; GFX9-NEXT: buffer_store_dwordx4 v[0:3], off, s[0:3], 01179; GFX9-NEXT: s_endpgm1180;1181; EG-LABEL: sdiv_v4i32:1182; EG: ; %bb.0:1183; EG-NEXT: ALU 0, @10, KC0[CB0:0-32], KC1[]1184; EG-NEXT: TEX 1 @61185; EG-NEXT: ALU 101, @11, KC0[CB0:0-32], KC1[]1186; EG-NEXT: MEM_RAT_CACHELESS STORE_RAW T2.XYZW, T0.X, 11187; EG-NEXT: CF_END1188; EG-NEXT: PAD1189; EG-NEXT: Fetch clause starting at 6:1190; EG-NEXT: VTX_READ_128 T1.XYZW, T0.X, 16, #11191; EG-NEXT: VTX_READ_128 T0.XYZW, T0.X, 0, #11192; EG-NEXT: ALU clause starting at 10:1193; EG-NEXT: MOV * T0.X, KC0[2].Z,1194; EG-NEXT: ALU clause starting at 11:1195; EG-NEXT: SETGT_INT * T2.W, 0.0, T1.W,1196; EG-NEXT: ADD_INT * T1.W, T1.W, PV.W,1197; EG-NEXT: XOR_INT * T1.W, PV.W, T2.W,1198; EG-NEXT: SUB_INT T3.W, 0.0, PV.W,1199; EG-NEXT: RECIP_UINT * T2.X, PV.W,1200; EG-NEXT: SETGT_INT T4.W, 0.0, T0.W,1201; EG-NEXT: MULLO_INT * T2.Y, PV.W, PS,1202; EG-NEXT: SETGT_INT T2.Z, 0.0, T1.Y,1203; EG-NEXT: ADD_INT T0.W, T0.W, PV.W,1204; EG-NEXT: MULHI * T2.Y, T2.X, PS,1205; EG-NEXT: ADD_INT T3.Z, T2.X, PS,1206; EG-NEXT: XOR_INT T0.W, PV.W, T4.W,1207; EG-NEXT: ADD_INT * T3.W, T1.Y, PV.Z,1208; EG-NEXT: XOR_INT T3.W, PS, T2.Z,1209; EG-NEXT: MULHI * T1.Y, PV.W, PV.Z,1210; EG-NEXT: SUB_INT T5.W, 0.0, PV.W,1211; EG-NEXT: RECIP_UINT * T2.X, PV.W,1212; EG-NEXT: SETGT_INT T6.W, 0.0, T0.Y,1213; EG-NEXT: MULLO_INT * T2.Y, PV.W, PS,1214; EG-NEXT: ADD_INT T5.W, T0.Y, PV.W,1215; EG-NEXT: MULHI * T0.Y, T2.X, PS,1216; EG-NEXT: ADD_INT T0.Y, T2.X, PS,1217; EG-NEXT: XOR_INT T3.Z, PV.W, T6.W, BS:VEC_021/SCL_1221218; EG-NEXT: SETGT_INT T5.W, 0.0, T1.Z,1219; EG-NEXT: MULLO_INT * T2.X, T1.Y, T1.W,1220; EG-NEXT: ADD_INT T7.W, T1.Z, PV.W,1221; EG-NEXT: MULHI * T0.Y, PV.Z, PV.Y,1222; EG-NEXT: XOR_INT T7.W, PV.W, T5.W, BS:VEC_021/SCL_1221223; EG-NEXT: MULLO_INT * T1.Z, PS, T3.W,1224; EG-NEXT: SUB_INT T4.Z, 0.0, PV.W,1225; EG-NEXT: SETGT_INT T8.W, 0.0, T1.X,1226; EG-NEXT: RECIP_UINT * T2.Y, PV.W,1227; EG-NEXT: ADD_INT T9.W, T1.X, PV.W,1228; EG-NEXT: MULLO_INT * T1.X, PV.Z, PS,1229; EG-NEXT: SETGT_INT T4.Z, 0.0, T0.Z,1230; EG-NEXT: XOR_INT T9.W, PV.W, T8.W,1231; EG-NEXT: MULHI * T1.X, T2.Y, PS,1232; EG-NEXT: ADD_INT T1.X, T2.Y, PS,1233; EG-NEXT: SUB_INT T2.Y, 0.0, PV.W,1234; EG-NEXT: SUB_INT T1.Z, T3.Z, T1.Z,1235; EG-NEXT: ADD_INT T10.W, T0.Z, PV.Z, BS:VEC_2011236; EG-NEXT: RECIP_UINT * T0.Z, PV.W,1237; EG-NEXT: XOR_INT T3.X, PV.W, T4.Z,1238; EG-NEXT: ADD_INT T3.Y, T0.Y, 1,1239; EG-NEXT: SETGE_UINT T3.Z, PV.Z, T3.W,1240; EG-NEXT: SUB_INT T10.W, PV.Z, T3.W,1241; EG-NEXT: MULLO_INT * T2.Y, PV.Y, PS,1242; EG-NEXT: CNDE_INT T1.Z, PV.Z, T1.Z, PV.W,1243; EG-NEXT: CNDE_INT T10.W, PV.Z, T0.Y, PV.Y,1244; EG-NEXT: MULHI * T0.Y, PV.X, T1.X,1245; EG-NEXT: SETGT_INT T3.Y, 0.0, T0.X,1246; EG-NEXT: ADD_INT T3.Z, PV.W, 1,1247; EG-NEXT: SETGE_UINT T3.W, PV.Z, T3.W, BS:VEC_021/SCL_1221248; EG-NEXT: MULLO_INT * T1.X, PS, T7.W,1249; EG-NEXT: CNDE_INT T4.Y, PV.W, T10.W, PV.Z,1250; EG-NEXT: ADD_INT T1.Z, T0.X, PV.Y,1251; EG-NEXT: SUB_INT T3.W, T3.X, PS, BS:VEC_120/SCL_2121252; EG-NEXT: MULHI * T0.X, T0.Z, T2.Y,1253; EG-NEXT: ADD_INT T1.X, T0.Y, 1,1254; EG-NEXT: SETGE_UINT T2.Y, PV.W, T7.W,1255; EG-NEXT: ADD_INT T0.Z, T0.Z, PS,1256; EG-NEXT: XOR_INT T10.W, PV.Z, T3.Y,1257; EG-NEXT: SUB_INT * T0.W, T0.W, T2.X,1258; EG-NEXT: SUB_INT T0.X, T3.W, T7.W,1259; EG-NEXT: ADD_INT T5.Y, T1.Y, 1,1260; EG-NEXT: SETGE_UINT T1.Z, PS, T1.W, BS:VEC_021/SCL_1221261; EG-NEXT: SUB_INT T11.W, PS, T1.W, BS:VEC_021/SCL_1221262; EG-NEXT: MULHI * T0.Z, PV.W, PV.Z,1263; EG-NEXT: CNDE_INT T2.X, PV.Z, T0.W, PV.W, BS:VEC_021/SCL_1221264; EG-NEXT: CNDE_INT T1.Y, PV.Z, T1.Y, PV.Y,1265; EG-NEXT: CNDE_INT T1.Z, T2.Y, T3.W, PV.X, BS:VEC_2011266; EG-NEXT: CNDE_INT T0.W, T2.Y, T0.Y, T1.X, BS:VEC_2011267; EG-NEXT: MULLO_INT * T0.X, PS, T9.W,1268; EG-NEXT: ADD_INT T1.X, PV.W, 1,1269; EG-NEXT: SETGE_UINT T0.Y, PV.Z, T7.W,1270; EG-NEXT: ADD_INT T1.Z, PV.Y, 1,1271; EG-NEXT: SETGE_UINT T1.W, PV.X, T1.W, BS:VEC_102/SCL_2211272; EG-NEXT: SUB_INT * T3.W, T10.W, PS,1273; EG-NEXT: ADD_INT T0.X, T0.Z, 1,1274; EG-NEXT: SETGE_UINT T2.Y, PS, T9.W, BS:VEC_102/SCL_2211275; EG-NEXT: SUB_INT T3.Z, PS, T9.W, BS:VEC_102/SCL_2211276; EG-NEXT: CNDE_INT T1.W, PV.W, T1.Y, PV.Z,1277; EG-NEXT: XOR_INT * T2.W, T4.W, T2.W,1278; EG-NEXT: XOR_INT T2.X, PV.W, PS,1279; EG-NEXT: CNDE_INT T1.Y, PV.Y, T3.W, PV.Z, BS:VEC_021/SCL_1221280; EG-NEXT: CNDE_INT T0.Z, PV.Y, T0.Z, PV.X,1281; EG-NEXT: CNDE_INT T0.W, T0.Y, T0.W, T1.X, BS:VEC_102/SCL_2211282; EG-NEXT: XOR_INT * T1.W, T4.Z, T5.W,1283; EG-NEXT: XOR_INT T0.X, T6.W, T2.Z,1284; EG-NEXT: XOR_INT T0.Y, PV.W, PS,1285; EG-NEXT: ADD_INT T1.Z, PV.Z, 1,1286; EG-NEXT: SETGE_UINT T0.W, PV.Y, T9.W, BS:VEC_021/SCL_1221287; EG-NEXT: SUB_INT * T2.W, PV.X, T2.W,1288; EG-NEXT: CNDE_INT T1.Y, PV.W, T0.Z, PV.Z,1289; EG-NEXT: SUB_INT T2.Z, PV.Y, T1.W,1290; EG-NEXT: XOR_INT T0.W, T3.Y, T8.W, BS:VEC_021/SCL_1221291; EG-NEXT: XOR_INT * T1.W, T4.Y, PV.X,1292; EG-NEXT: SUB_INT T2.Y, PS, T0.X,1293; EG-NEXT: XOR_INT * T1.W, PV.Y, PV.W,1294; EG-NEXT: SUB_INT T2.X, PV.W, T0.W,1295; EG-NEXT: LSHR * T0.X, KC0[2].Y, literal.x,1296; EG-NEXT: 2(2.802597e-45), 0(0.000000e+00)1297 %den_ptr = getelementptr <4 x i32>, ptr addrspace(1) %in, i32 11298 %num = load <4 x i32>, ptr addrspace(1) %in1299 %den = load <4 x i32>, ptr addrspace(1) %den_ptr1300 %result = sdiv <4 x i32> %num, %den1301 store <4 x i32> %result, ptr addrspace(1) %out1302 ret void1303}1304 1305define amdgpu_kernel void @sdiv_v4i32_4(ptr addrspace(1) %out, ptr addrspace(1) %in) {1306; GCN-LABEL: sdiv_v4i32_4:1307; GCN: ; %bb.0:1308; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91309; GCN-NEXT: s_mov_b32 s7, 0xf0001310; GCN-NEXT: s_mov_b32 s6, -11311; GCN-NEXT: s_mov_b32 s10, s61312; GCN-NEXT: s_mov_b32 s11, s71313; GCN-NEXT: s_waitcnt lgkmcnt(0)1314; GCN-NEXT: s_mov_b32 s8, s21315; GCN-NEXT: s_mov_b32 s9, s31316; GCN-NEXT: buffer_load_dwordx4 v[0:3], off, s[8:11], 01317; GCN-NEXT: s_mov_b32 s4, s01318; GCN-NEXT: s_mov_b32 s5, s11319; GCN-NEXT: s_waitcnt vmcnt(0)1320; GCN-NEXT: v_ashrrev_i32_e32 v4, 31, v01321; GCN-NEXT: v_ashrrev_i32_e32 v5, 31, v11322; GCN-NEXT: v_ashrrev_i32_e32 v6, 31, v21323; GCN-NEXT: v_ashrrev_i32_e32 v7, 31, v31324; GCN-NEXT: v_lshrrev_b32_e32 v4, 30, v41325; GCN-NEXT: v_lshrrev_b32_e32 v5, 30, v51326; GCN-NEXT: v_lshrrev_b32_e32 v6, 30, v61327; GCN-NEXT: v_lshrrev_b32_e32 v7, 30, v71328; GCN-NEXT: v_add_i32_e32 v0, vcc, v4, v01329; GCN-NEXT: v_add_i32_e32 v1, vcc, v5, v11330; GCN-NEXT: v_add_i32_e32 v2, vcc, v6, v21331; GCN-NEXT: v_add_i32_e32 v3, vcc, v7, v31332; GCN-NEXT: v_ashrrev_i32_e32 v0, 2, v01333; GCN-NEXT: v_ashrrev_i32_e32 v1, 2, v11334; GCN-NEXT: v_ashrrev_i32_e32 v2, 2, v21335; GCN-NEXT: v_ashrrev_i32_e32 v3, 2, v31336; GCN-NEXT: buffer_store_dwordx4 v[0:3], off, s[4:7], 01337; GCN-NEXT: s_endpgm1338;1339; TONGA-LABEL: sdiv_v4i32_4:1340; TONGA: ; %bb.0:1341; TONGA-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x241342; TONGA-NEXT: s_mov_b32 s3, 0xf0001343; TONGA-NEXT: s_mov_b32 s2, -11344; TONGA-NEXT: s_mov_b32 s10, s21345; TONGA-NEXT: s_mov_b32 s11, s31346; TONGA-NEXT: s_waitcnt lgkmcnt(0)1347; TONGA-NEXT: s_mov_b32 s8, s61348; TONGA-NEXT: s_mov_b32 s9, s71349; TONGA-NEXT: buffer_load_dwordx4 v[0:3], off, s[8:11], 01350; TONGA-NEXT: s_mov_b32 s0, s41351; TONGA-NEXT: s_mov_b32 s1, s51352; TONGA-NEXT: s_waitcnt vmcnt(0)1353; TONGA-NEXT: v_ashrrev_i32_e32 v4, 31, v01354; TONGA-NEXT: v_ashrrev_i32_e32 v5, 31, v11355; TONGA-NEXT: v_ashrrev_i32_e32 v6, 31, v21356; TONGA-NEXT: v_ashrrev_i32_e32 v7, 31, v31357; TONGA-NEXT: v_lshrrev_b32_e32 v4, 30, v41358; TONGA-NEXT: v_lshrrev_b32_e32 v5, 30, v51359; TONGA-NEXT: v_lshrrev_b32_e32 v6, 30, v61360; TONGA-NEXT: v_lshrrev_b32_e32 v7, 30, v71361; TONGA-NEXT: v_add_u32_e32 v0, vcc, v4, v01362; TONGA-NEXT: v_add_u32_e32 v1, vcc, v5, v11363; TONGA-NEXT: v_add_u32_e32 v2, vcc, v6, v21364; TONGA-NEXT: v_add_u32_e32 v3, vcc, v7, v31365; TONGA-NEXT: v_ashrrev_i32_e32 v0, 2, v01366; TONGA-NEXT: v_ashrrev_i32_e32 v1, 2, v11367; TONGA-NEXT: v_ashrrev_i32_e32 v2, 2, v21368; TONGA-NEXT: v_ashrrev_i32_e32 v3, 2, v31369; TONGA-NEXT: buffer_store_dwordx4 v[0:3], off, s[0:3], 01370; TONGA-NEXT: s_endpgm1371;1372; GFX9-LABEL: sdiv_v4i32_4:1373; GFX9: ; %bb.0:1374; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241375; GFX9-NEXT: s_mov_b32 s7, 0xf0001376; GFX9-NEXT: s_mov_b32 s6, -11377; GFX9-NEXT: s_mov_b32 s10, s61378; GFX9-NEXT: s_mov_b32 s11, s71379; GFX9-NEXT: s_waitcnt lgkmcnt(0)1380; GFX9-NEXT: s_mov_b32 s8, s21381; GFX9-NEXT: s_mov_b32 s9, s31382; GFX9-NEXT: buffer_load_dwordx4 v[0:3], off, s[8:11], 01383; GFX9-NEXT: s_mov_b32 s4, s01384; GFX9-NEXT: s_mov_b32 s5, s11385; GFX9-NEXT: s_waitcnt vmcnt(0)1386; GFX9-NEXT: v_ashrrev_i32_e32 v4, 31, v01387; GFX9-NEXT: v_ashrrev_i32_e32 v5, 31, v11388; GFX9-NEXT: v_ashrrev_i32_e32 v6, 31, v21389; GFX9-NEXT: v_ashrrev_i32_e32 v7, 31, v31390; GFX9-NEXT: v_lshrrev_b32_e32 v4, 30, v41391; GFX9-NEXT: v_lshrrev_b32_e32 v5, 30, v51392; GFX9-NEXT: v_lshrrev_b32_e32 v6, 30, v61393; GFX9-NEXT: v_lshrrev_b32_e32 v7, 30, v71394; GFX9-NEXT: v_add_u32_e32 v0, v0, v41395; GFX9-NEXT: v_add_u32_e32 v1, v1, v51396; GFX9-NEXT: v_add_u32_e32 v2, v2, v61397; GFX9-NEXT: v_add_u32_e32 v3, v3, v71398; GFX9-NEXT: v_ashrrev_i32_e32 v0, 2, v01399; GFX9-NEXT: v_ashrrev_i32_e32 v1, 2, v11400; GFX9-NEXT: v_ashrrev_i32_e32 v2, 2, v21401; GFX9-NEXT: v_ashrrev_i32_e32 v3, 2, v31402; GFX9-NEXT: buffer_store_dwordx4 v[0:3], off, s[4:7], 01403; GFX9-NEXT: s_endpgm1404;1405; EG-LABEL: sdiv_v4i32_4:1406; EG: ; %bb.0:1407; EG-NEXT: ALU 0, @8, KC0[CB0:0-32], KC1[]1408; EG-NEXT: TEX 0 @61409; EG-NEXT: ALU 24, @9, KC0[CB0:0-32], KC1[]1410; EG-NEXT: MEM_RAT_CACHELESS STORE_RAW T1.XYZW, T0.X, 11411; EG-NEXT: CF_END1412; EG-NEXT: PAD1413; EG-NEXT: Fetch clause starting at 6:1414; EG-NEXT: VTX_READ_128 T0.XYZW, T0.X, 0, #11415; EG-NEXT: ALU clause starting at 8:1416; EG-NEXT: MOV * T0.X, KC0[2].Z,1417; EG-NEXT: ALU clause starting at 9:1418; EG-NEXT: ASHR T1.W, T0.W, literal.x,1419; EG-NEXT: ASHR * T2.W, T0.Z, literal.x,1420; EG-NEXT: 31(4.344025e-44), 0(0.000000e+00)1421; EG-NEXT: LSHR * T1.W, PV.W, literal.x,1422; EG-NEXT: 30(4.203895e-44), 0(0.000000e+00)1423; EG-NEXT: ADD_INT T1.Z, T0.W, PV.W,1424; EG-NEXT: LSHR T0.W, T2.W, literal.x, BS:VEC_120/SCL_2121425; EG-NEXT: ASHR * T1.W, T0.Y, literal.y,1426; EG-NEXT: 30(4.203895e-44), 31(4.344025e-44)1427; EG-NEXT: LSHR T1.Y, PS, literal.x,1428; EG-NEXT: ASHR T2.Z, T0.X, literal.y,1429; EG-NEXT: ADD_INT T0.W, T0.Z, PV.W,1430; EG-NEXT: ASHR * T1.W, PV.Z, literal.z,1431; EG-NEXT: 30(4.203895e-44), 31(4.344025e-44)1432; EG-NEXT: 2(2.802597e-45), 0(0.000000e+00)1433; EG-NEXT: ASHR T1.Z, PV.W, literal.x,1434; EG-NEXT: LSHR T0.W, PV.Z, literal.y,1435; EG-NEXT: ADD_INT * T2.W, T0.Y, PV.Y,1436; EG-NEXT: 2(2.802597e-45), 30(4.203895e-44)1437; EG-NEXT: ASHR T1.Y, PS, literal.x,1438; EG-NEXT: ADD_INT * T0.W, T0.X, PV.W,1439; EG-NEXT: 2(2.802597e-45), 0(0.000000e+00)1440; EG-NEXT: ASHR T1.X, PV.W, literal.x,1441; EG-NEXT: LSHR * T0.X, KC0[2].Y, literal.x,1442; EG-NEXT: 2(2.802597e-45), 0(0.000000e+00)1443 %num = load <4 x i32>, ptr addrspace(1) %in1444 %result = sdiv <4 x i32> %num, <i32 4, i32 4, i32 4, i32 4>1445 store <4 x i32> %result, ptr addrspace(1) %out1446 ret void1447}1448 1449define amdgpu_kernel void @v_sdiv_i8(ptr addrspace(1) %out, ptr addrspace(1) %in) {1450; GCN-LABEL: v_sdiv_i8:1451; GCN: ; %bb.0:1452; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91453; GCN-NEXT: s_mov_b32 s7, 0xf0001454; GCN-NEXT: s_mov_b32 s6, -11455; GCN-NEXT: s_mov_b32 s10, s61456; GCN-NEXT: s_mov_b32 s11, s71457; GCN-NEXT: s_waitcnt lgkmcnt(0)1458; GCN-NEXT: s_mov_b32 s8, s21459; GCN-NEXT: s_mov_b32 s9, s31460; GCN-NEXT: buffer_load_sbyte v0, off, s[8:11], 0 offset:11461; GCN-NEXT: buffer_load_sbyte v1, off, s[8:11], 01462; GCN-NEXT: s_mov_b32 s4, s01463; GCN-NEXT: s_mov_b32 s5, s11464; GCN-NEXT: s_waitcnt vmcnt(1)1465; GCN-NEXT: v_cvt_f32_i32_e32 v2, v01466; GCN-NEXT: s_waitcnt vmcnt(0)1467; GCN-NEXT: v_cvt_f32_i32_e32 v3, v11468; GCN-NEXT: v_xor_b32_e32 v0, v1, v01469; GCN-NEXT: v_ashrrev_i32_e32 v0, 30, v01470; GCN-NEXT: v_rcp_iflag_f32_e32 v4, v21471; GCN-NEXT: v_or_b32_e32 v0, 1, v01472; GCN-NEXT: v_mul_f32_e32 v1, v3, v41473; GCN-NEXT: v_trunc_f32_e32 v1, v11474; GCN-NEXT: v_mad_f32 v3, -v1, v2, v31475; GCN-NEXT: v_cvt_i32_f32_e32 v1, v11476; GCN-NEXT: v_cmp_ge_f32_e64 vcc, |v3|, |v2|1477; GCN-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc1478; GCN-NEXT: v_add_i32_e32 v0, vcc, v0, v11479; GCN-NEXT: v_bfe_i32 v0, v0, 0, 81480; GCN-NEXT: buffer_store_dword v0, off, s[4:7], 01481; GCN-NEXT: s_endpgm1482;1483; TONGA-LABEL: v_sdiv_i8:1484; TONGA: ; %bb.0:1485; TONGA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241486; TONGA-NEXT: s_mov_b32 s7, 0xf0001487; TONGA-NEXT: s_mov_b32 s6, -11488; TONGA-NEXT: s_mov_b32 s10, s61489; TONGA-NEXT: s_mov_b32 s11, s71490; TONGA-NEXT: s_waitcnt lgkmcnt(0)1491; TONGA-NEXT: s_mov_b32 s8, s21492; TONGA-NEXT: s_mov_b32 s9, s31493; TONGA-NEXT: buffer_load_sbyte v0, off, s[8:11], 0 offset:11494; TONGA-NEXT: buffer_load_sbyte v1, off, s[8:11], 01495; TONGA-NEXT: s_mov_b32 s4, s01496; TONGA-NEXT: s_mov_b32 s5, s11497; TONGA-NEXT: s_waitcnt vmcnt(1)1498; TONGA-NEXT: v_cvt_f32_i32_e32 v2, v01499; TONGA-NEXT: s_waitcnt vmcnt(0)1500; TONGA-NEXT: v_cvt_f32_i32_e32 v3, v11501; TONGA-NEXT: v_xor_b32_e32 v0, v1, v01502; TONGA-NEXT: v_ashrrev_i32_e32 v0, 30, v01503; TONGA-NEXT: v_rcp_iflag_f32_e32 v4, v21504; TONGA-NEXT: v_or_b32_e32 v0, 1, v01505; TONGA-NEXT: v_mul_f32_e32 v1, v3, v41506; TONGA-NEXT: v_trunc_f32_e32 v1, v11507; TONGA-NEXT: v_mad_f32 v3, -v1, v2, v31508; TONGA-NEXT: v_cvt_i32_f32_e32 v1, v11509; TONGA-NEXT: v_cmp_ge_f32_e64 vcc, |v3|, |v2|1510; TONGA-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc1511; TONGA-NEXT: v_add_u32_e32 v0, vcc, v0, v11512; TONGA-NEXT: v_bfe_i32 v0, v0, 0, 81513; TONGA-NEXT: buffer_store_dword v0, off, s[4:7], 01514; TONGA-NEXT: s_endpgm1515;1516; GFX9-LABEL: v_sdiv_i8:1517; GFX9: ; %bb.0:1518; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241519; GFX9-NEXT: s_mov_b32 s7, 0xf0001520; GFX9-NEXT: s_mov_b32 s6, -11521; GFX9-NEXT: s_mov_b32 s10, s61522; GFX9-NEXT: s_mov_b32 s11, s71523; GFX9-NEXT: s_waitcnt lgkmcnt(0)1524; GFX9-NEXT: s_mov_b32 s8, s21525; GFX9-NEXT: s_mov_b32 s9, s31526; GFX9-NEXT: buffer_load_sbyte v0, off, s[8:11], 0 offset:11527; GFX9-NEXT: buffer_load_sbyte v1, off, s[8:11], 01528; GFX9-NEXT: s_mov_b32 s4, s01529; GFX9-NEXT: s_mov_b32 s5, s11530; GFX9-NEXT: s_waitcnt vmcnt(1)1531; GFX9-NEXT: v_cvt_f32_i32_e32 v2, v01532; GFX9-NEXT: s_waitcnt vmcnt(0)1533; GFX9-NEXT: v_cvt_f32_i32_e32 v3, v11534; GFX9-NEXT: v_xor_b32_e32 v0, v1, v01535; GFX9-NEXT: v_ashrrev_i32_e32 v0, 30, v01536; GFX9-NEXT: v_rcp_iflag_f32_e32 v4, v21537; GFX9-NEXT: v_or_b32_e32 v0, 1, v01538; GFX9-NEXT: v_mul_f32_e32 v1, v3, v41539; GFX9-NEXT: v_trunc_f32_e32 v1, v11540; GFX9-NEXT: v_cvt_i32_f32_e32 v4, v11541; GFX9-NEXT: v_mad_f32 v1, -v1, v2, v31542; GFX9-NEXT: v_cmp_ge_f32_e64 vcc, |v1|, |v2|1543; GFX9-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc1544; GFX9-NEXT: v_add_u32_e32 v0, v4, v01545; GFX9-NEXT: v_bfe_i32 v0, v0, 0, 81546; GFX9-NEXT: buffer_store_dword v0, off, s[4:7], 01547; GFX9-NEXT: s_endpgm1548;1549; EG-LABEL: v_sdiv_i8:1550; EG: ; %bb.0:1551; EG-NEXT: ALU 0, @10, KC0[CB0:0-32], KC1[]1552; EG-NEXT: TEX 1 @61553; EG-NEXT: ALU 21, @11, KC0[CB0:0-32], KC1[]1554; EG-NEXT: MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 11555; EG-NEXT: CF_END1556; EG-NEXT: PAD1557; EG-NEXT: Fetch clause starting at 6:1558; EG-NEXT: VTX_READ_8 T1.X, T0.X, 1, #11559; EG-NEXT: VTX_READ_8 T0.X, T0.X, 0, #11560; EG-NEXT: ALU clause starting at 10:1561; EG-NEXT: MOV * T0.X, KC0[2].Z,1562; EG-NEXT: ALU clause starting at 11:1563; EG-NEXT: BFE_INT * T0.W, T1.X, 0.0, literal.x,1564; EG-NEXT: 8(1.121039e-44), 0(0.000000e+00)1565; EG-NEXT: INT_TO_FLT * T0.Y, PV.W,1566; EG-NEXT: BFE_INT T1.W, T0.X, 0.0, literal.x,1567; EG-NEXT: RECIP_IEEE * T0.X, PS,1568; EG-NEXT: 8(1.121039e-44), 0(0.000000e+00)1569; EG-NEXT: INT_TO_FLT * T0.Z, PV.W,1570; EG-NEXT: MUL_IEEE * T2.W, PS, T0.X,1571; EG-NEXT: TRUNC T2.W, PV.W,1572; EG-NEXT: XOR_INT * T0.W, T1.W, T0.W,1573; EG-NEXT: ASHR T0.W, PS, literal.x,1574; EG-NEXT: MULADD_IEEE * T1.W, -PV.W, T0.Y, T0.Z,1575; EG-NEXT: 30(4.203895e-44), 0(0.000000e+00)1576; EG-NEXT: TRUNC T0.Z, T2.W,1577; EG-NEXT: SETGE T1.W, |PS|, |T0.Y|,1578; EG-NEXT: OR_INT * T0.W, PV.W, 1,1579; EG-NEXT: CNDE T0.W, PV.W, 0.0, PS,1580; EG-NEXT: FLT_TO_INT * T1.W, PV.Z,1581; EG-NEXT: ADD_INT * T0.W, PS, PV.W,1582; EG-NEXT: BFE_INT T0.X, PV.W, 0.0, literal.x,1583; EG-NEXT: LSHR * T1.X, KC0[2].Y, literal.y,1584; EG-NEXT: 8(1.121039e-44), 2(2.802597e-45)1585 %den_ptr = getelementptr i8, ptr addrspace(1) %in, i8 11586 %num = load i8, ptr addrspace(1) %in1587 %den = load i8, ptr addrspace(1) %den_ptr1588 %result = sdiv i8 %num, %den1589 %result.ext = sext i8 %result to i321590 store i32 %result.ext, ptr addrspace(1) %out1591 ret void1592}1593 1594define amdgpu_kernel void @v_sdiv_i23(ptr addrspace(1) %out, ptr addrspace(1) %in) {1595; GCN-LABEL: v_sdiv_i23:1596; GCN: ; %bb.0:1597; GCN-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x91598; GCN-NEXT: s_mov_b32 s3, 0xf0001599; GCN-NEXT: s_mov_b32 s2, -11600; GCN-NEXT: s_mov_b32 s10, s21601; GCN-NEXT: s_mov_b32 s11, s31602; GCN-NEXT: s_waitcnt lgkmcnt(0)1603; GCN-NEXT: s_mov_b32 s8, s61604; GCN-NEXT: s_mov_b32 s9, s71605; GCN-NEXT: buffer_load_ubyte v0, off, s[8:11], 0 offset:21606; GCN-NEXT: buffer_load_ubyte v1, off, s[8:11], 0 offset:61607; GCN-NEXT: buffer_load_ushort v2, off, s[8:11], 0 offset:41608; GCN-NEXT: buffer_load_ushort v3, off, s[8:11], 01609; GCN-NEXT: s_mov_b32 s0, s41610; GCN-NEXT: s_mov_b32 s1, s51611; GCN-NEXT: s_waitcnt vmcnt(3)1612; GCN-NEXT: v_lshlrev_b32_e32 v0, 16, v01613; GCN-NEXT: s_waitcnt vmcnt(2)1614; GCN-NEXT: v_lshlrev_b32_e32 v1, 16, v11615; GCN-NEXT: s_waitcnt vmcnt(1)1616; GCN-NEXT: v_or_b32_e32 v1, v2, v11617; GCN-NEXT: v_bfe_i32 v1, v1, 0, 231618; GCN-NEXT: v_cvt_f32_i32_e32 v2, v11619; GCN-NEXT: s_waitcnt vmcnt(0)1620; GCN-NEXT: v_or_b32_e32 v0, v3, v01621; GCN-NEXT: v_bfe_i32 v0, v0, 0, 231622; GCN-NEXT: v_cvt_f32_i32_e32 v3, v01623; GCN-NEXT: v_rcp_iflag_f32_e32 v4, v21624; GCN-NEXT: v_xor_b32_e32 v0, v0, v11625; GCN-NEXT: v_ashrrev_i32_e32 v0, 30, v01626; GCN-NEXT: v_or_b32_e32 v0, 1, v01627; GCN-NEXT: v_mul_f32_e32 v1, v3, v41628; GCN-NEXT: v_trunc_f32_e32 v1, v11629; GCN-NEXT: v_mad_f32 v3, -v1, v2, v31630; GCN-NEXT: v_cvt_i32_f32_e32 v1, v11631; GCN-NEXT: v_cmp_ge_f32_e64 vcc, |v3|, |v2|1632; GCN-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc1633; GCN-NEXT: v_add_i32_e32 v0, vcc, v0, v11634; GCN-NEXT: v_bfe_i32 v0, v0, 0, 231635; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 01636; GCN-NEXT: s_endpgm1637;1638; TONGA-LABEL: v_sdiv_i23:1639; TONGA: ; %bb.0:1640; TONGA-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x241641; TONGA-NEXT: s_mov_b32 s3, 0xf0001642; TONGA-NEXT: s_mov_b32 s2, -11643; TONGA-NEXT: s_mov_b32 s10, s21644; TONGA-NEXT: s_mov_b32 s11, s31645; TONGA-NEXT: s_waitcnt lgkmcnt(0)1646; TONGA-NEXT: s_mov_b32 s8, s61647; TONGA-NEXT: s_mov_b32 s9, s71648; TONGA-NEXT: buffer_load_ubyte v0, off, s[8:11], 0 offset:21649; TONGA-NEXT: buffer_load_ubyte v1, off, s[8:11], 0 offset:61650; TONGA-NEXT: buffer_load_ushort v2, off, s[8:11], 0 offset:41651; TONGA-NEXT: buffer_load_ushort v3, off, s[8:11], 01652; TONGA-NEXT: s_mov_b32 s0, s41653; TONGA-NEXT: s_mov_b32 s1, s51654; TONGA-NEXT: s_waitcnt vmcnt(3)1655; TONGA-NEXT: v_lshlrev_b32_e32 v0, 16, v01656; TONGA-NEXT: s_waitcnt vmcnt(2)1657; TONGA-NEXT: v_lshlrev_b32_e32 v1, 16, v11658; TONGA-NEXT: s_waitcnt vmcnt(1)1659; TONGA-NEXT: v_or_b32_e32 v1, v2, v11660; TONGA-NEXT: v_bfe_i32 v1, v1, 0, 231661; TONGA-NEXT: v_cvt_f32_i32_e32 v2, v11662; TONGA-NEXT: s_waitcnt vmcnt(0)1663; TONGA-NEXT: v_or_b32_e32 v0, v3, v01664; TONGA-NEXT: v_bfe_i32 v0, v0, 0, 231665; TONGA-NEXT: v_cvt_f32_i32_e32 v3, v01666; TONGA-NEXT: v_rcp_iflag_f32_e32 v4, v21667; TONGA-NEXT: v_xor_b32_e32 v0, v0, v11668; TONGA-NEXT: v_ashrrev_i32_e32 v0, 30, v01669; TONGA-NEXT: v_or_b32_e32 v0, 1, v01670; TONGA-NEXT: v_mul_f32_e32 v1, v3, v41671; TONGA-NEXT: v_trunc_f32_e32 v1, v11672; TONGA-NEXT: v_mad_f32 v3, -v1, v2, v31673; TONGA-NEXT: v_cvt_i32_f32_e32 v1, v11674; TONGA-NEXT: v_cmp_ge_f32_e64 vcc, |v3|, |v2|1675; TONGA-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc1676; TONGA-NEXT: v_add_u32_e32 v0, vcc, v0, v11677; TONGA-NEXT: v_bfe_i32 v0, v0, 0, 231678; TONGA-NEXT: buffer_store_dword v0, off, s[0:3], 01679; TONGA-NEXT: s_endpgm1680;1681; GFX9-LABEL: v_sdiv_i23:1682; GFX9: ; %bb.0:1683; GFX9-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x241684; GFX9-NEXT: s_mov_b32 s3, 0xf0001685; GFX9-NEXT: s_mov_b32 s2, -11686; GFX9-NEXT: s_mov_b32 s6, s21687; GFX9-NEXT: s_mov_b32 s7, s31688; GFX9-NEXT: s_waitcnt lgkmcnt(0)1689; GFX9-NEXT: s_mov_b32 s4, s101690; GFX9-NEXT: s_mov_b32 s5, s111691; GFX9-NEXT: buffer_load_ubyte v0, off, s[4:7], 0 offset:21692; GFX9-NEXT: buffer_load_ubyte v1, off, s[4:7], 0 offset:61693; GFX9-NEXT: buffer_load_ushort v2, off, s[4:7], 0 offset:41694; GFX9-NEXT: buffer_load_ushort v3, off, s[4:7], 01695; GFX9-NEXT: s_mov_b32 s0, s81696; GFX9-NEXT: s_mov_b32 s1, s91697; GFX9-NEXT: s_waitcnt vmcnt(3)1698; GFX9-NEXT: v_lshlrev_b32_e32 v0, 16, v01699; GFX9-NEXT: s_waitcnt vmcnt(2)1700; GFX9-NEXT: v_lshlrev_b32_e32 v1, 16, v11701; GFX9-NEXT: s_waitcnt vmcnt(1)1702; GFX9-NEXT: v_or_b32_e32 v1, v2, v11703; GFX9-NEXT: v_bfe_i32 v1, v1, 0, 231704; GFX9-NEXT: v_cvt_f32_i32_e32 v2, v11705; GFX9-NEXT: s_waitcnt vmcnt(0)1706; GFX9-NEXT: v_or_b32_e32 v0, v3, v01707; GFX9-NEXT: v_bfe_i32 v0, v0, 0, 231708; GFX9-NEXT: v_cvt_f32_i32_e32 v3, v01709; GFX9-NEXT: v_rcp_iflag_f32_e32 v4, v21710; GFX9-NEXT: v_xor_b32_e32 v0, v0, v11711; GFX9-NEXT: v_ashrrev_i32_e32 v0, 30, v01712; GFX9-NEXT: v_or_b32_e32 v0, 1, v01713; GFX9-NEXT: v_mul_f32_e32 v1, v3, v41714; GFX9-NEXT: v_trunc_f32_e32 v1, v11715; GFX9-NEXT: v_cvt_i32_f32_e32 v4, v11716; GFX9-NEXT: v_mad_f32 v1, -v1, v2, v31717; GFX9-NEXT: v_cmp_ge_f32_e64 vcc, |v1|, |v2|1718; GFX9-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc1719; GFX9-NEXT: v_add_u32_e32 v0, v4, v01720; GFX9-NEXT: v_bfe_i32 v0, v0, 0, 231721; GFX9-NEXT: buffer_store_dword v0, off, s[0:3], 01722; GFX9-NEXT: s_endpgm1723;1724; EG-LABEL: v_sdiv_i23:1725; EG: ; %bb.0:1726; EG-NEXT: ALU 0, @14, KC0[CB0:0-32], KC1[]1727; EG-NEXT: TEX 3 @61728; EG-NEXT: ALU 33, @15, KC0[CB0:0-32], KC1[]1729; EG-NEXT: MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 11730; EG-NEXT: CF_END1731; EG-NEXT: PAD1732; EG-NEXT: Fetch clause starting at 6:1733; EG-NEXT: VTX_READ_8 T1.X, T0.X, 6, #11734; EG-NEXT: VTX_READ_16 T2.X, T0.X, 0, #11735; EG-NEXT: VTX_READ_8 T3.X, T0.X, 2, #11736; EG-NEXT: VTX_READ_16 T0.X, T0.X, 4, #11737; EG-NEXT: ALU clause starting at 14:1738; EG-NEXT: MOV * T0.X, KC0[2].Z,1739; EG-NEXT: ALU clause starting at 15:1740; EG-NEXT: LSHL * T0.W, T1.X, literal.x,1741; EG-NEXT: 16(2.242078e-44), 0(0.000000e+00)1742; EG-NEXT: OR_INT T0.W, T0.X, PV.W,1743; EG-NEXT: LSHL * T1.W, T3.X, literal.x,1744; EG-NEXT: 16(2.242078e-44), 0(0.000000e+00)1745; EG-NEXT: LSHL * T0.W, PV.W, literal.x,1746; EG-NEXT: 9(1.261169e-44), 0(0.000000e+00)1747; EG-NEXT: ASHR T0.W, PV.W, literal.x,1748; EG-NEXT: OR_INT * T1.W, T2.X, T1.W,1749; EG-NEXT: 9(1.261169e-44), 0(0.000000e+00)1750; EG-NEXT: LSHL T1.W, PS, literal.x,1751; EG-NEXT: INT_TO_FLT * T0.X, PV.W,1752; EG-NEXT: 9(1.261169e-44), 0(0.000000e+00)1753; EG-NEXT: ASHR T1.W, PV.W, literal.x,1754; EG-NEXT: RECIP_IEEE * T0.Y, PS,1755; EG-NEXT: 9(1.261169e-44), 0(0.000000e+00)1756; EG-NEXT: INT_TO_FLT * T0.Z, PV.W,1757; EG-NEXT: MUL_IEEE * T2.W, PS, T0.Y,1758; EG-NEXT: TRUNC T2.W, PV.W,1759; EG-NEXT: XOR_INT * T0.W, T1.W, T0.W,1760; EG-NEXT: ASHR T0.W, PS, literal.x,1761; EG-NEXT: MULADD_IEEE * T1.W, -PV.W, T0.X, T0.Z,1762; EG-NEXT: 30(4.203895e-44), 0(0.000000e+00)1763; EG-NEXT: TRUNC T0.Z, T2.W,1764; EG-NEXT: SETGE T1.W, |PS|, |T0.X|,1765; EG-NEXT: OR_INT * T0.W, PV.W, 1,1766; EG-NEXT: CNDE T0.W, PV.W, 0.0, PS,1767; EG-NEXT: FLT_TO_INT * T1.W, PV.Z,1768; EG-NEXT: ADD_INT * T0.W, PS, PV.W,1769; EG-NEXT: LSHL * T0.W, PV.W, literal.x,1770; EG-NEXT: 9(1.261169e-44), 0(0.000000e+00)1771; EG-NEXT: ASHR T0.X, PV.W, literal.x,1772; EG-NEXT: LSHR * T1.X, KC0[2].Y, literal.y,1773; EG-NEXT: 9(1.261169e-44), 2(2.802597e-45)1774 %den_ptr = getelementptr i23, ptr addrspace(1) %in, i23 11775 %num = load i23, ptr addrspace(1) %in1776 %den = load i23, ptr addrspace(1) %den_ptr1777 %result = sdiv i23 %num, %den1778 %result.ext = sext i23 %result to i321779 store i32 %result.ext, ptr addrspace(1) %out1780 ret void1781}1782 1783define amdgpu_kernel void @v_sdiv_i24(ptr addrspace(1) %out, ptr addrspace(1) %in) {1784; GCN-LABEL: v_sdiv_i24:1785; GCN: ; %bb.0:1786; GCN-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x91787; GCN-NEXT: s_mov_b32 s3, 0xf0001788; GCN-NEXT: s_mov_b32 s2, -11789; GCN-NEXT: s_mov_b32 s10, s21790; GCN-NEXT: s_mov_b32 s11, s31791; GCN-NEXT: s_waitcnt lgkmcnt(0)1792; GCN-NEXT: s_mov_b32 s8, s61793; GCN-NEXT: s_mov_b32 s9, s71794; GCN-NEXT: buffer_load_sbyte v0, off, s[8:11], 0 offset:61795; GCN-NEXT: buffer_load_ushort v1, off, s[8:11], 0 offset:41796; GCN-NEXT: buffer_load_sbyte v2, off, s[8:11], 0 offset:21797; GCN-NEXT: buffer_load_ushort v3, off, s[8:11], 01798; GCN-NEXT: s_mov_b32 s0, s41799; GCN-NEXT: s_mov_b32 s1, s51800; GCN-NEXT: s_waitcnt vmcnt(3)1801; GCN-NEXT: v_lshlrev_b32_e32 v4, 16, v01802; GCN-NEXT: s_waitcnt vmcnt(2)1803; GCN-NEXT: v_or_b32_e32 v1, v1, v41804; GCN-NEXT: v_cvt_f32_i32_e32 v1, v11805; GCN-NEXT: s_waitcnt vmcnt(1)1806; GCN-NEXT: v_lshlrev_b32_e32 v4, 16, v21807; GCN-NEXT: s_waitcnt vmcnt(0)1808; GCN-NEXT: v_or_b32_e32 v3, v3, v41809; GCN-NEXT: v_cvt_f32_i32_e32 v3, v31810; GCN-NEXT: v_rcp_iflag_f32_e32 v4, v11811; GCN-NEXT: v_xor_b32_e32 v0, v2, v01812; GCN-NEXT: v_ashrrev_i32_e32 v0, 30, v01813; GCN-NEXT: v_or_b32_e32 v0, 1, v01814; GCN-NEXT: v_mul_f32_e32 v2, v3, v41815; GCN-NEXT: v_trunc_f32_e32 v2, v21816; GCN-NEXT: v_mad_f32 v3, -v2, v1, v31817; GCN-NEXT: v_cvt_i32_f32_e32 v2, v21818; GCN-NEXT: v_cmp_ge_f32_e64 vcc, |v3|, |v1|1819; GCN-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc1820; GCN-NEXT: v_add_i32_e32 v0, vcc, v0, v21821; GCN-NEXT: v_bfe_i32 v0, v0, 0, 241822; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 01823; GCN-NEXT: s_endpgm1824;1825; TONGA-LABEL: v_sdiv_i24:1826; TONGA: ; %bb.0:1827; TONGA-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x241828; TONGA-NEXT: s_mov_b32 s3, 0xf0001829; TONGA-NEXT: s_mov_b32 s2, -11830; TONGA-NEXT: s_mov_b32 s10, s21831; TONGA-NEXT: s_mov_b32 s11, s31832; TONGA-NEXT: s_waitcnt lgkmcnt(0)1833; TONGA-NEXT: s_mov_b32 s8, s61834; TONGA-NEXT: s_mov_b32 s9, s71835; TONGA-NEXT: buffer_load_sbyte v0, off, s[8:11], 0 offset:61836; TONGA-NEXT: buffer_load_ushort v1, off, s[8:11], 0 offset:41837; TONGA-NEXT: buffer_load_sbyte v2, off, s[8:11], 0 offset:21838; TONGA-NEXT: buffer_load_ushort v3, off, s[8:11], 01839; TONGA-NEXT: s_mov_b32 s0, s41840; TONGA-NEXT: s_mov_b32 s1, s51841; TONGA-NEXT: s_waitcnt vmcnt(3)1842; TONGA-NEXT: v_lshlrev_b32_e32 v4, 16, v01843; TONGA-NEXT: s_waitcnt vmcnt(2)1844; TONGA-NEXT: v_or_b32_e32 v1, v1, v41845; TONGA-NEXT: v_cvt_f32_i32_e32 v1, v11846; TONGA-NEXT: s_waitcnt vmcnt(1)1847; TONGA-NEXT: v_lshlrev_b32_e32 v4, 16, v21848; TONGA-NEXT: s_waitcnt vmcnt(0)1849; TONGA-NEXT: v_or_b32_e32 v3, v3, v41850; TONGA-NEXT: v_cvt_f32_i32_e32 v3, v31851; TONGA-NEXT: v_rcp_iflag_f32_e32 v4, v11852; TONGA-NEXT: v_xor_b32_e32 v0, v2, v01853; TONGA-NEXT: v_ashrrev_i32_e32 v0, 30, v01854; TONGA-NEXT: v_or_b32_e32 v0, 1, v01855; TONGA-NEXT: v_mul_f32_e32 v2, v3, v41856; TONGA-NEXT: v_trunc_f32_e32 v2, v21857; TONGA-NEXT: v_mad_f32 v3, -v2, v1, v31858; TONGA-NEXT: v_cvt_i32_f32_e32 v2, v21859; TONGA-NEXT: v_cmp_ge_f32_e64 vcc, |v3|, |v1|1860; TONGA-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc1861; TONGA-NEXT: v_add_u32_e32 v0, vcc, v0, v21862; TONGA-NEXT: v_bfe_i32 v0, v0, 0, 241863; TONGA-NEXT: buffer_store_dword v0, off, s[0:3], 01864; TONGA-NEXT: s_endpgm1865;1866; GFX9-LABEL: v_sdiv_i24:1867; GFX9: ; %bb.0:1868; GFX9-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x241869; GFX9-NEXT: s_mov_b32 s3, 0xf0001870; GFX9-NEXT: s_mov_b32 s2, -11871; GFX9-NEXT: s_mov_b32 s6, s21872; GFX9-NEXT: s_mov_b32 s7, s31873; GFX9-NEXT: s_waitcnt lgkmcnt(0)1874; GFX9-NEXT: s_mov_b32 s4, s101875; GFX9-NEXT: s_mov_b32 s5, s111876; GFX9-NEXT: buffer_load_sbyte v0, off, s[4:7], 0 offset:61877; GFX9-NEXT: buffer_load_ushort v1, off, s[4:7], 0 offset:41878; GFX9-NEXT: buffer_load_sbyte v2, off, s[4:7], 0 offset:21879; GFX9-NEXT: buffer_load_ushort v3, off, s[4:7], 01880; GFX9-NEXT: s_mov_b32 s0, s81881; GFX9-NEXT: s_mov_b32 s1, s91882; GFX9-NEXT: s_waitcnt vmcnt(3)1883; GFX9-NEXT: v_lshlrev_b32_e32 v4, 16, v01884; GFX9-NEXT: s_waitcnt vmcnt(2)1885; GFX9-NEXT: v_or_b32_e32 v1, v1, v41886; GFX9-NEXT: v_cvt_f32_i32_e32 v1, v11887; GFX9-NEXT: s_waitcnt vmcnt(1)1888; GFX9-NEXT: v_lshlrev_b32_e32 v4, 16, v21889; GFX9-NEXT: s_waitcnt vmcnt(0)1890; GFX9-NEXT: v_or_b32_e32 v3, v3, v41891; GFX9-NEXT: v_cvt_f32_i32_e32 v3, v31892; GFX9-NEXT: v_rcp_iflag_f32_e32 v4, v11893; GFX9-NEXT: v_xor_b32_e32 v0, v2, v01894; GFX9-NEXT: v_ashrrev_i32_e32 v0, 30, v01895; GFX9-NEXT: v_or_b32_e32 v0, 1, v01896; GFX9-NEXT: v_mul_f32_e32 v2, v3, v41897; GFX9-NEXT: v_trunc_f32_e32 v2, v21898; GFX9-NEXT: v_cvt_i32_f32_e32 v4, v21899; GFX9-NEXT: v_mad_f32 v2, -v2, v1, v31900; GFX9-NEXT: v_cmp_ge_f32_e64 vcc, |v2|, |v1|1901; GFX9-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc1902; GFX9-NEXT: v_add_u32_e32 v0, v4, v01903; GFX9-NEXT: v_bfe_i32 v0, v0, 0, 241904; GFX9-NEXT: buffer_store_dword v0, off, s[0:3], 01905; GFX9-NEXT: s_endpgm1906;1907; EG-LABEL: v_sdiv_i24:1908; EG: ; %bb.0:1909; EG-NEXT: ALU 0, @14, KC0[CB0:0-32], KC1[]1910; EG-NEXT: TEX 3 @61911; EG-NEXT: ALU 29, @15, KC0[CB0:0-32], KC1[]1912; EG-NEXT: MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 11913; EG-NEXT: CF_END1914; EG-NEXT: PAD1915; EG-NEXT: Fetch clause starting at 6:1916; EG-NEXT: VTX_READ_8 T1.X, T0.X, 6, #11917; EG-NEXT: VTX_READ_16 T2.X, T0.X, 0, #11918; EG-NEXT: VTX_READ_16 T3.X, T0.X, 4, #11919; EG-NEXT: VTX_READ_8 T0.X, T0.X, 2, #11920; EG-NEXT: ALU clause starting at 14:1921; EG-NEXT: MOV * T0.X, KC0[2].Z,1922; EG-NEXT: ALU clause starting at 15:1923; EG-NEXT: BFE_INT * T0.W, T1.X, 0.0, literal.x,1924; EG-NEXT: 8(1.121039e-44), 0(0.000000e+00)1925; EG-NEXT: LSHL * T1.W, PV.W, literal.x,1926; EG-NEXT: 16(2.242078e-44), 0(0.000000e+00)1927; EG-NEXT: BFE_INT T2.W, T0.X, 0.0, literal.x,1928; EG-NEXT: OR_INT * T1.W, T3.X, PV.W,1929; EG-NEXT: 8(1.121039e-44), 0(0.000000e+00)1930; EG-NEXT: LSHL T3.W, PV.W, literal.x,1931; EG-NEXT: INT_TO_FLT * T0.X, PS,1932; EG-NEXT: 16(2.242078e-44), 0(0.000000e+00)1933; EG-NEXT: OR_INT T1.W, T2.X, PV.W,1934; EG-NEXT: RECIP_IEEE * T0.Y, PS,1935; EG-NEXT: INT_TO_FLT * T0.Z, PV.W,1936; EG-NEXT: MUL_IEEE * T1.W, PS, T0.Y,1937; EG-NEXT: TRUNC T1.W, PV.W,1938; EG-NEXT: XOR_INT * T0.W, T2.W, T0.W,1939; EG-NEXT: ASHR T0.W, PS, literal.x,1940; EG-NEXT: MULADD_IEEE * T2.W, -PV.W, T0.X, T0.Z,1941; EG-NEXT: 30(4.203895e-44), 0(0.000000e+00)1942; EG-NEXT: TRUNC T0.Z, T1.W,1943; EG-NEXT: SETGE T1.W, |PS|, |T0.X|,1944; EG-NEXT: OR_INT * T0.W, PV.W, 1,1945; EG-NEXT: CNDE T0.W, PV.W, 0.0, PS,1946; EG-NEXT: FLT_TO_INT * T1.W, PV.Z,1947; EG-NEXT: ADD_INT * T0.W, PS, PV.W,1948; EG-NEXT: LSHL * T0.W, PV.W, literal.x,1949; EG-NEXT: 8(1.121039e-44), 0(0.000000e+00)1950; EG-NEXT: ASHR T0.X, PV.W, literal.x,1951; EG-NEXT: LSHR * T1.X, KC0[2].Y, literal.y,1952; EG-NEXT: 8(1.121039e-44), 2(2.802597e-45)1953 %den_ptr = getelementptr i24, ptr addrspace(1) %in, i24 11954 %num = load i24, ptr addrspace(1) %in1955 %den = load i24, ptr addrspace(1) %den_ptr1956 %result = sdiv i24 %num, %den1957 %result.ext = sext i24 %result to i321958 store i32 %result.ext, ptr addrspace(1) %out1959 ret void1960}1961 1962define amdgpu_kernel void @v_sdiv_i25(ptr addrspace(1) %out, ptr addrspace(1) %in) {1963; GCN-LABEL: v_sdiv_i25:1964; GCN: ; %bb.0:1965; GCN-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x91966; GCN-NEXT: s_mov_b32 s3, 0xf0001967; GCN-NEXT: s_mov_b32 s2, -11968; GCN-NEXT: s_mov_b32 s10, s21969; GCN-NEXT: s_mov_b32 s11, s31970; GCN-NEXT: s_waitcnt lgkmcnt(0)1971; GCN-NEXT: s_mov_b32 s8, s61972; GCN-NEXT: s_mov_b32 s9, s71973; GCN-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 01974; GCN-NEXT: s_mov_b32 s0, s41975; GCN-NEXT: s_mov_b32 s1, s51976; GCN-NEXT: s_waitcnt vmcnt(0)1977; GCN-NEXT: v_bfe_i32 v1, v1, 0, 251978; GCN-NEXT: v_sub_i32_e32 v2, vcc, 0, v11979; GCN-NEXT: v_max_i32_e32 v2, v1, v21980; GCN-NEXT: v_cvt_f32_u32_e32 v3, v21981; GCN-NEXT: v_sub_i32_e32 v4, vcc, 0, v21982; GCN-NEXT: v_bfe_i32 v0, v0, 0, 251983; GCN-NEXT: v_rcp_iflag_f32_e32 v3, v31984; GCN-NEXT: v_sub_i32_e32 v5, vcc, 0, v01985; GCN-NEXT: v_max_i32_e32 v5, v0, v51986; GCN-NEXT: v_mul_f32_e32 v3, 0x4f7ffffe, v31987; GCN-NEXT: v_cvt_u32_f32_e32 v3, v31988; GCN-NEXT: v_xor_b32_e32 v0, v0, v11989; GCN-NEXT: v_ashrrev_i32_e32 v0, 31, v01990; GCN-NEXT: v_mul_lo_u32 v4, v4, v31991; GCN-NEXT: v_mul_hi_u32 v4, v3, v41992; GCN-NEXT: v_add_i32_e32 v3, vcc, v3, v41993; GCN-NEXT: v_mul_hi_u32 v3, v5, v31994; GCN-NEXT: v_mul_lo_u32 v1, v3, v21995; GCN-NEXT: v_add_i32_e32 v4, vcc, 1, v31996; GCN-NEXT: v_sub_i32_e32 v1, vcc, v5, v11997; GCN-NEXT: v_sub_i32_e32 v5, vcc, v1, v21998; GCN-NEXT: v_cmp_ge_u32_e32 vcc, v1, v21999; GCN-NEXT: v_cndmask_b32_e32 v3, v3, v4, vcc2000; GCN-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc2001; GCN-NEXT: v_add_i32_e32 v4, vcc, 1, v32002; GCN-NEXT: v_cmp_ge_u32_e32 vcc, v1, v22003; GCN-NEXT: v_cndmask_b32_e32 v1, v3, v4, vcc2004; GCN-NEXT: v_xor_b32_e32 v1, v1, v02005; GCN-NEXT: v_sub_i32_e32 v0, vcc, v1, v02006; GCN-NEXT: v_bfe_i32 v0, v0, 0, 252007; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 02008; GCN-NEXT: s_endpgm2009;2010; TONGA-LABEL: v_sdiv_i25:2011; TONGA: ; %bb.0:2012; TONGA-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x242013; TONGA-NEXT: s_mov_b32 s3, 0xf0002014; TONGA-NEXT: s_mov_b32 s2, -12015; TONGA-NEXT: s_mov_b32 s10, s22016; TONGA-NEXT: s_mov_b32 s11, s32017; TONGA-NEXT: s_waitcnt lgkmcnt(0)2018; TONGA-NEXT: s_mov_b32 s8, s62019; TONGA-NEXT: s_mov_b32 s9, s72020; TONGA-NEXT: buffer_load_dwordx2 v[0:1], off, s[8:11], 02021; TONGA-NEXT: s_mov_b32 s0, s42022; TONGA-NEXT: s_mov_b32 s1, s52023; TONGA-NEXT: s_waitcnt vmcnt(0)2024; TONGA-NEXT: v_bfe_i32 v1, v1, 0, 252025; TONGA-NEXT: v_sub_u32_e32 v2, vcc, 0, v12026; TONGA-NEXT: v_max_i32_e32 v2, v1, v22027; TONGA-NEXT: v_cvt_f32_u32_e32 v3, v22028; TONGA-NEXT: v_sub_u32_e32 v4, vcc, 0, v22029; TONGA-NEXT: v_bfe_i32 v0, v0, 0, 252030; TONGA-NEXT: v_rcp_iflag_f32_e32 v3, v32031; TONGA-NEXT: v_sub_u32_e32 v5, vcc, 0, v02032; TONGA-NEXT: v_max_i32_e32 v5, v0, v52033; TONGA-NEXT: v_mul_f32_e32 v3, 0x4f7ffffe, v32034; TONGA-NEXT: v_cvt_u32_f32_e32 v3, v32035; TONGA-NEXT: v_xor_b32_e32 v0, v0, v12036; TONGA-NEXT: v_ashrrev_i32_e32 v0, 31, v02037; TONGA-NEXT: v_mul_lo_u32 v4, v4, v32038; TONGA-NEXT: v_mul_hi_u32 v4, v3, v42039; TONGA-NEXT: v_add_u32_e32 v3, vcc, v3, v42040; TONGA-NEXT: v_mul_hi_u32 v3, v5, v32041; TONGA-NEXT: v_mul_lo_u32 v1, v3, v22042; TONGA-NEXT: v_add_u32_e32 v4, vcc, 1, v32043; TONGA-NEXT: v_sub_u32_e32 v1, vcc, v5, v12044; TONGA-NEXT: v_sub_u32_e32 v5, vcc, v1, v22045; TONGA-NEXT: v_cmp_ge_u32_e32 vcc, v1, v22046; TONGA-NEXT: v_cndmask_b32_e32 v3, v3, v4, vcc2047; TONGA-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc2048; TONGA-NEXT: v_add_u32_e32 v4, vcc, 1, v32049; TONGA-NEXT: v_cmp_ge_u32_e32 vcc, v1, v22050; TONGA-NEXT: v_cndmask_b32_e32 v1, v3, v4, vcc2051; TONGA-NEXT: v_xor_b32_e32 v1, v1, v02052; TONGA-NEXT: v_sub_u32_e32 v0, vcc, v1, v02053; TONGA-NEXT: v_bfe_i32 v0, v0, 0, 252054; TONGA-NEXT: buffer_store_dword v0, off, s[0:3], 02055; TONGA-NEXT: s_endpgm2056;2057; GFX9-LABEL: v_sdiv_i25:2058; GFX9: ; %bb.0:2059; GFX9-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x242060; GFX9-NEXT: s_mov_b32 s3, 0xf0002061; GFX9-NEXT: s_mov_b32 s2, -12062; GFX9-NEXT: s_mov_b32 s6, s22063; GFX9-NEXT: s_mov_b32 s7, s32064; GFX9-NEXT: s_waitcnt lgkmcnt(0)2065; GFX9-NEXT: s_mov_b32 s4, s102066; GFX9-NEXT: s_mov_b32 s5, s112067; GFX9-NEXT: buffer_load_dwordx2 v[0:1], off, s[4:7], 02068; GFX9-NEXT: s_mov_b32 s1, s92069; GFX9-NEXT: s_waitcnt vmcnt(0)2070; GFX9-NEXT: v_readfirstlane_b32 s0, v12071; GFX9-NEXT: s_bfe_i32 s4, s0, 0x1900002072; GFX9-NEXT: s_abs_i32 s5, s42073; GFX9-NEXT: v_cvt_f32_u32_e32 v1, s52074; GFX9-NEXT: v_readfirstlane_b32 s6, v02075; GFX9-NEXT: s_mov_b32 s0, s82076; GFX9-NEXT: s_sub_i32 s7, 0, s52077; GFX9-NEXT: v_rcp_iflag_f32_e32 v1, v12078; GFX9-NEXT: s_bfe_i32 s6, s6, 0x1900002079; GFX9-NEXT: s_xor_b32 s4, s6, s42080; GFX9-NEXT: s_abs_i32 s6, s62081; GFX9-NEXT: v_mul_f32_e32 v0, 0x4f7ffffe, v12082; GFX9-NEXT: v_cvt_u32_f32_e32 v0, v02083; GFX9-NEXT: s_ashr_i32 s4, s4, 312084; GFX9-NEXT: v_readfirstlane_b32 s8, v02085; GFX9-NEXT: s_mul_i32 s7, s7, s82086; GFX9-NEXT: s_mul_hi_u32 s7, s8, s72087; GFX9-NEXT: s_add_i32 s8, s8, s72088; GFX9-NEXT: s_mul_hi_u32 s7, s6, s82089; GFX9-NEXT: s_mul_i32 s8, s7, s52090; GFX9-NEXT: s_sub_i32 s6, s6, s82091; GFX9-NEXT: s_add_i32 s9, s7, 12092; GFX9-NEXT: s_sub_i32 s8, s6, s52093; GFX9-NEXT: s_cmp_ge_u32 s6, s52094; GFX9-NEXT: s_cselect_b32 s7, s9, s72095; GFX9-NEXT: s_cselect_b32 s6, s8, s62096; GFX9-NEXT: s_add_i32 s8, s7, 12097; GFX9-NEXT: s_cmp_ge_u32 s6, s52098; GFX9-NEXT: s_cselect_b32 s5, s8, s72099; GFX9-NEXT: s_xor_b32 s5, s5, s42100; GFX9-NEXT: s_sub_i32 s4, s5, s42101; GFX9-NEXT: s_bfe_i32 s4, s4, 0x1900002102; GFX9-NEXT: v_mov_b32_e32 v0, s42103; GFX9-NEXT: buffer_store_dword v0, off, s[0:3], 02104; GFX9-NEXT: s_endpgm2105;2106; EG-LABEL: v_sdiv_i25:2107; EG: ; %bb.0:2108; EG-NEXT: ALU 1, @10, KC0[CB0:0-32], KC1[]2109; EG-NEXT: TEX 1 @62110; EG-NEXT: ALU 37, @12, KC0[CB0:0-32], KC1[]2111; EG-NEXT: MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 12112; EG-NEXT: CF_END2113; EG-NEXT: PAD2114; EG-NEXT: Fetch clause starting at 6:2115; EG-NEXT: VTX_READ_32 T0.X, T0.X, 4, #12116; EG-NEXT: VTX_READ_32 T1.X, T1.X, 0, #12117; EG-NEXT: ALU clause starting at 10:2118; EG-NEXT: MOV * T0.X, KC0[2].Z,2119; EG-NEXT: MOV * T1.X, PV.X,2120; EG-NEXT: ALU clause starting at 12:2121; EG-NEXT: LSHL * T0.W, T0.X, literal.x,2122; EG-NEXT: 7(9.809089e-45), 0(0.000000e+00)2123; EG-NEXT: ASHR * T0.W, PV.W, literal.x,2124; EG-NEXT: 7(9.809089e-45), 0(0.000000e+00)2125; EG-NEXT: SETGT_INT * T1.W, 0.0, PV.W,2126; EG-NEXT: ADD_INT T0.W, T0.W, PV.W,2127; EG-NEXT: LSHL * T2.W, T1.X, literal.x,2128; EG-NEXT: 7(9.809089e-45), 0(0.000000e+00)2129; EG-NEXT: XOR_INT * T0.W, PV.W, T1.W,2130; EG-NEXT: SUB_INT T0.Z, 0.0, PV.W,2131; EG-NEXT: ASHR T2.W, T2.W, literal.x,2132; EG-NEXT: RECIP_UINT * T0.X, PV.W,2133; EG-NEXT: 7(9.809089e-45), 0(0.000000e+00)2134; EG-NEXT: SETGT_INT T3.W, 0.0, PV.W,2135; EG-NEXT: MULLO_INT * T0.Y, PV.Z, PS,2136; EG-NEXT: ADD_INT T2.W, T2.W, PV.W,2137; EG-NEXT: MULHI * T0.Y, T0.X, PS,2138; EG-NEXT: ADD_INT T4.W, T0.X, PS,2139; EG-NEXT: XOR_INT * T2.W, PV.W, T3.W,2140; EG-NEXT: MULHI * T0.X, PS, PV.W,2141; EG-NEXT: MULLO_INT * T0.Y, PS, T0.W,2142; EG-NEXT: SUB_INT * T2.W, T2.W, PS,2143; EG-NEXT: ADD_INT T0.Z, T0.X, 1,2144; EG-NEXT: SETGE_UINT T4.W, PV.W, T0.W,2145; EG-NEXT: SUB_INT * T5.W, PV.W, T0.W,2146; EG-NEXT: CNDE_INT T2.W, PV.W, T2.W, PS,2147; EG-NEXT: CNDE_INT * T4.W, PV.W, T0.X, PV.Z,2148; EG-NEXT: ADD_INT T5.W, PS, 1,2149; EG-NEXT: SETGE_UINT * T0.W, PV.W, T0.W,2150; EG-NEXT: CNDE_INT T0.W, PS, T4.W, PV.W, BS:VEC_102/SCL_2212151; EG-NEXT: XOR_INT * T1.W, T3.W, T1.W,2152; EG-NEXT: XOR_INT * T0.W, PV.W, PS,2153; EG-NEXT: SUB_INT * T0.W, PV.W, T1.W,2154; EG-NEXT: LSHL * T0.W, PV.W, literal.x,2155; EG-NEXT: 7(9.809089e-45), 0(0.000000e+00)2156; EG-NEXT: ASHR T0.X, PV.W, literal.x,2157; EG-NEXT: LSHR * T1.X, KC0[2].Y, literal.y,2158; EG-NEXT: 7(9.809089e-45), 2(2.802597e-45)2159 %den_ptr = getelementptr i25, ptr addrspace(1) %in, i25 12160 %num = load i25, ptr addrspace(1) %in2161 %den = load i25, ptr addrspace(1) %den_ptr2162 %result = sdiv i25 %num, %den2163 %result.ext = sext i25 %result to i322164 store i32 %result.ext, ptr addrspace(1) %out2165 ret void2166}2167 2168; Tests for 64-bit divide bypass.2169; define amdgpu_kernel void @test_get_quotient(ptr addrspace(1) %out, i64 %a, i64 %b) nounwind {2170; %result = sdiv i64 %a, %b2171; store i64 %result, ptr addrspace(1) %out, align 82172; ret void2173; }2174 2175; define amdgpu_kernel void @test_get_remainder(ptr addrspace(1) %out, i64 %a, i64 %b) nounwind {2176; %result = srem i64 %a, %b2177; store i64 %result, ptr addrspace(1) %out, align 82178; ret void2179; }2180 2181; define amdgpu_kernel void @test_get_quotient_and_remainder(ptr addrspace(1) %out, i64 %a, i64 %b) nounwind {2182; %resultdiv = sdiv i64 %a, %b2183; %resultrem = srem i64 %a, %b2184; %result = add i64 %resultdiv, %resultrem2185; store i64 %result, ptr addrspace(1) %out, align 82186; ret void2187; }2188 2189define amdgpu_kernel void @scalarize_mulhs_4xi32(ptr addrspace(1) nocapture readonly %in, ptr addrspace(1) nocapture %out) {2190; GCN-LABEL: scalarize_mulhs_4xi32:2191; GCN: ; %bb.0:2192; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x92193; GCN-NEXT: s_mov_b32 s7, 0xf0002194; GCN-NEXT: s_mov_b32 s6, -12195; GCN-NEXT: s_waitcnt lgkmcnt(0)2196; GCN-NEXT: s_mov_b32 s4, s02197; GCN-NEXT: s_mov_b32 s5, s12198; GCN-NEXT: buffer_load_dwordx4 v[0:3], off, s[4:7], 02199; GCN-NEXT: s_mov_b32 s0, 0x1389c7552200; GCN-NEXT: s_mov_b32 s4, s22201; GCN-NEXT: s_mov_b32 s5, s32202; GCN-NEXT: s_waitcnt vmcnt(0)2203; GCN-NEXT: v_mul_hi_i32 v0, v0, s02204; GCN-NEXT: v_mul_hi_i32 v1, v1, s02205; GCN-NEXT: v_mul_hi_i32 v2, v2, s02206; GCN-NEXT: v_mul_hi_i32 v3, v3, s02207; GCN-NEXT: v_lshrrev_b32_e32 v4, 31, v02208; GCN-NEXT: v_ashrrev_i32_e32 v0, 12, v02209; GCN-NEXT: v_lshrrev_b32_e32 v5, 31, v12210; GCN-NEXT: v_ashrrev_i32_e32 v1, 12, v12211; GCN-NEXT: v_lshrrev_b32_e32 v6, 31, v22212; GCN-NEXT: v_ashrrev_i32_e32 v2, 12, v22213; GCN-NEXT: v_lshrrev_b32_e32 v7, 31, v32214; GCN-NEXT: v_ashrrev_i32_e32 v3, 12, v32215; GCN-NEXT: v_add_i32_e32 v0, vcc, v0, v42216; GCN-NEXT: v_add_i32_e32 v1, vcc, v1, v52217; GCN-NEXT: v_add_i32_e32 v2, vcc, v2, v62218; GCN-NEXT: v_add_i32_e32 v3, vcc, v3, v72219; GCN-NEXT: buffer_store_dwordx4 v[0:3], off, s[4:7], 02220; GCN-NEXT: s_endpgm2221;2222; TONGA-LABEL: scalarize_mulhs_4xi32:2223; TONGA: ; %bb.0:2224; TONGA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242225; TONGA-NEXT: s_mov_b32 s7, 0xf0002226; TONGA-NEXT: s_mov_b32 s6, -12227; TONGA-NEXT: s_waitcnt lgkmcnt(0)2228; TONGA-NEXT: s_mov_b32 s4, s02229; TONGA-NEXT: s_mov_b32 s5, s12230; TONGA-NEXT: buffer_load_dwordx4 v[0:3], off, s[4:7], 02231; TONGA-NEXT: s_mov_b32 s0, 0x1389c7552232; TONGA-NEXT: s_mov_b32 s4, s22233; TONGA-NEXT: s_mov_b32 s5, s32234; TONGA-NEXT: s_waitcnt vmcnt(0)2235; TONGA-NEXT: v_mul_hi_i32 v0, v0, s02236; TONGA-NEXT: v_mul_hi_i32 v1, v1, s02237; TONGA-NEXT: v_mul_hi_i32 v2, v2, s02238; TONGA-NEXT: v_mul_hi_i32 v3, v3, s02239; TONGA-NEXT: v_lshrrev_b32_e32 v4, 31, v02240; TONGA-NEXT: v_ashrrev_i32_e32 v0, 12, v02241; TONGA-NEXT: v_lshrrev_b32_e32 v5, 31, v12242; TONGA-NEXT: v_ashrrev_i32_e32 v1, 12, v12243; TONGA-NEXT: v_lshrrev_b32_e32 v6, 31, v22244; TONGA-NEXT: v_ashrrev_i32_e32 v2, 12, v22245; TONGA-NEXT: v_lshrrev_b32_e32 v7, 31, v32246; TONGA-NEXT: v_ashrrev_i32_e32 v3, 12, v32247; TONGA-NEXT: v_add_u32_e32 v0, vcc, v0, v42248; TONGA-NEXT: v_add_u32_e32 v1, vcc, v1, v52249; TONGA-NEXT: v_add_u32_e32 v2, vcc, v2, v62250; TONGA-NEXT: v_add_u32_e32 v3, vcc, v3, v72251; TONGA-NEXT: buffer_store_dwordx4 v[0:3], off, s[4:7], 02252; TONGA-NEXT: s_endpgm2253;2254; GFX9-LABEL: scalarize_mulhs_4xi32:2255; GFX9: ; %bb.0:2256; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242257; GFX9-NEXT: s_mov_b32 s7, 0xf0002258; GFX9-NEXT: s_mov_b32 s6, -12259; GFX9-NEXT: s_waitcnt lgkmcnt(0)2260; GFX9-NEXT: s_mov_b32 s4, s02261; GFX9-NEXT: s_mov_b32 s5, s12262; GFX9-NEXT: buffer_load_dwordx4 v[0:3], off, s[4:7], 02263; GFX9-NEXT: s_mov_b32 s0, 0x1389c7552264; GFX9-NEXT: s_mov_b32 s4, s22265; GFX9-NEXT: s_mov_b32 s5, s32266; GFX9-NEXT: s_waitcnt vmcnt(0)2267; GFX9-NEXT: v_mul_hi_i32 v0, v0, s02268; GFX9-NEXT: v_mul_hi_i32 v1, v1, s02269; GFX9-NEXT: v_mul_hi_i32 v2, v2, s02270; GFX9-NEXT: v_mul_hi_i32 v3, v3, s02271; GFX9-NEXT: v_lshrrev_b32_e32 v4, 31, v02272; GFX9-NEXT: v_ashrrev_i32_e32 v0, 12, v02273; GFX9-NEXT: v_lshrrev_b32_e32 v5, 31, v12274; GFX9-NEXT: v_ashrrev_i32_e32 v1, 12, v12275; GFX9-NEXT: v_lshrrev_b32_e32 v6, 31, v22276; GFX9-NEXT: v_ashrrev_i32_e32 v2, 12, v22277; GFX9-NEXT: v_lshrrev_b32_e32 v7, 31, v32278; GFX9-NEXT: v_ashrrev_i32_e32 v3, 12, v32279; GFX9-NEXT: v_add_u32_e32 v0, v0, v42280; GFX9-NEXT: v_add_u32_e32 v1, v1, v52281; GFX9-NEXT: v_add_u32_e32 v2, v2, v62282; GFX9-NEXT: v_add_u32_e32 v3, v3, v72283; GFX9-NEXT: buffer_store_dwordx4 v[0:3], off, s[4:7], 02284; GFX9-NEXT: s_endpgm2285;2286; EG-LABEL: scalarize_mulhs_4xi32:2287; EG: ; %bb.0:2288; EG-NEXT: ALU 0, @8, KC0[CB0:0-32], KC1[]2289; EG-NEXT: TEX 0 @62290; EG-NEXT: ALU 25, @9, KC0[CB0:0-32], KC1[]2291; EG-NEXT: MEM_RAT_CACHELESS STORE_RAW T0.XYZW, T1.X, 12292; EG-NEXT: CF_END2293; EG-NEXT: PAD2294; EG-NEXT: Fetch clause starting at 6:2295; EG-NEXT: VTX_READ_128 T0.XYZW, T0.X, 0, #12296; EG-NEXT: ALU clause starting at 8:2297; EG-NEXT: MOV * T0.X, KC0[2].Y,2298; EG-NEXT: ALU clause starting at 9:2299; EG-NEXT: MULHI_INT * T0.W, T0.W, literal.x,2300; EG-NEXT: 327796565(3.478022e-27), 0(0.000000e+00)2301; EG-NEXT: ASHR T1.Z, PS, literal.x,2302; EG-NEXT: LSHR T0.W, PS, literal.y,2303; EG-NEXT: MULHI_INT * T0.Z, T0.Z, literal.z,2304; EG-NEXT: 12(1.681558e-44), 31(4.344025e-44)2305; EG-NEXT: 327796565(3.478022e-27), 0(0.000000e+00)2306; EG-NEXT: ASHR T1.Y, PS, literal.x,2307; EG-NEXT: LSHR T0.Z, PS, literal.y,2308; EG-NEXT: ADD_INT T0.W, PV.Z, PV.W,2309; EG-NEXT: MULHI_INT * T0.Y, T0.Y, literal.z,2310; EG-NEXT: 12(1.681558e-44), 31(4.344025e-44)2311; EG-NEXT: 327796565(3.478022e-27), 0(0.000000e+00)2312; EG-NEXT: ASHR T2.Y, PS, literal.x,2313; EG-NEXT: ADD_INT T0.Z, PV.Y, PV.Z,2314; EG-NEXT: LSHR T1.W, PS, literal.y,2315; EG-NEXT: MULHI_INT * T0.X, T0.X, literal.z,2316; EG-NEXT: 12(1.681558e-44), 31(4.344025e-44)2317; EG-NEXT: 327796565(3.478022e-27), 0(0.000000e+00)2318; EG-NEXT: ADD_INT T0.Y, PV.Y, PV.W,2319; EG-NEXT: ASHR T1.W, PS, literal.x,2320; EG-NEXT: LSHR * T2.W, PS, literal.y,2321; EG-NEXT: 12(1.681558e-44), 31(4.344025e-44)2322; EG-NEXT: ADD_INT T0.X, PV.W, PS,2323; EG-NEXT: LSHR * T1.X, KC0[2].Z, literal.x,2324; EG-NEXT: 2(2.802597e-45), 0(0.000000e+00)2325 %1 = load <4 x i32>, ptr addrspace(1) %in, align 162326 %2 = sdiv <4 x i32> %1, <i32 53668, i32 53668, i32 53668, i32 53668>2327 store <4 x i32> %2, ptr addrspace(1) %out, align 162328 ret void2329}2330