740 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope --check-prefix=GFX9 %s3; RUN: llc -mtriple=amdgcn -mcpu=tonga -mattr=-flat-for-global < %s | FileCheck -enable-var-scope --check-prefix=VI %s4; RUN: llc -mtriple=amdgcn -mcpu=bonaire < %s | FileCheck -enable-var-scope --check-prefix=CI %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope --check-prefix=GFX10 %s6; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope --check-prefix=GFX11 %s7 8define amdgpu_kernel void @s_ashr_v2i16(ptr addrspace(1) %out, i32, <2 x i16> %lhs, i32, <2 x i16> %rhs) #0 {9; GFX9-LABEL: s_ashr_v2i16:10; GFX9: ; %bb.0:11; GFX9-NEXT: s_load_dword s6, s[4:5], 0x3012; GFX9-NEXT: s_load_dword s7, s[4:5], 0x3813; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2414; GFX9-NEXT: s_mov_b32 s3, 0xf00015; GFX9-NEXT: s_mov_b32 s2, -116; GFX9-NEXT: s_waitcnt lgkmcnt(0)17; GFX9-NEXT: v_mov_b32_e32 v0, s618; GFX9-NEXT: v_pk_ashrrev_i16 v0, s7, v019; GFX9-NEXT: buffer_store_dword v0, off, s[0:3], 020; GFX9-NEXT: s_endpgm21;22; VI-LABEL: s_ashr_v2i16:23; VI: ; %bb.0:24; VI-NEXT: s_load_dword s6, s[4:5], 0x3825; VI-NEXT: s_load_dword s7, s[4:5], 0x3026; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2427; VI-NEXT: s_mov_b32 s3, 0xf00028; VI-NEXT: s_mov_b32 s2, -129; VI-NEXT: s_waitcnt lgkmcnt(0)30; VI-NEXT: s_lshr_b32 s4, s6, 1631; VI-NEXT: s_ashr_i32 s5, s7, 1632; VI-NEXT: s_ashr_i32 s4, s5, s433; VI-NEXT: s_sext_i32_i16 s5, s734; VI-NEXT: s_ashr_i32 s5, s5, s635; VI-NEXT: s_lshl_b32 s4, s4, 1636; VI-NEXT: s_and_b32 s5, s5, 0xffff37; VI-NEXT: s_or_b32 s4, s5, s438; VI-NEXT: v_mov_b32_e32 v0, s439; VI-NEXT: buffer_store_dword v0, off, s[0:3], 040; VI-NEXT: s_endpgm41;42; CI-LABEL: s_ashr_v2i16:43; CI: ; %bb.0:44; CI-NEXT: s_load_dword s6, s[4:5], 0xc45; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x946; CI-NEXT: s_load_dword s4, s[4:5], 0xe47; CI-NEXT: s_mov_b32 s3, 0xf00048; CI-NEXT: s_mov_b32 s2, -149; CI-NEXT: s_waitcnt lgkmcnt(0)50; CI-NEXT: s_ashr_i32 s5, s6, 1651; CI-NEXT: s_sext_i32_i16 s6, s652; CI-NEXT: s_lshr_b32 s7, s4, 1653; CI-NEXT: s_ashr_i32 s5, s5, s754; CI-NEXT: s_ashr_i32 s4, s6, s455; CI-NEXT: s_lshl_b32 s5, s5, 1656; CI-NEXT: s_and_b32 s4, s4, 0xffff57; CI-NEXT: s_or_b32 s4, s4, s558; CI-NEXT: v_mov_b32_e32 v0, s459; CI-NEXT: buffer_store_dword v0, off, s[0:3], 060; CI-NEXT: s_endpgm61;62; GFX10-LABEL: s_ashr_v2i16:63; GFX10: ; %bb.0:64; GFX10-NEXT: s_clause 0x265; GFX10-NEXT: s_load_dword s2, s[4:5], 0x3066; GFX10-NEXT: s_load_dword s3, s[4:5], 0x3867; GFX10-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2468; GFX10-NEXT: s_waitcnt lgkmcnt(0)69; GFX10-NEXT: v_pk_ashrrev_i16 v0, s3, s270; GFX10-NEXT: s_mov_b32 s3, 0x3101600071; GFX10-NEXT: s_mov_b32 s2, -172; GFX10-NEXT: buffer_store_dword v0, off, s[0:3], 073; GFX10-NEXT: s_endpgm74;75; GFX11-LABEL: s_ashr_v2i16:76; GFX11: ; %bb.0:77; GFX11-NEXT: s_clause 0x278; GFX11-NEXT: s_load_b32 s2, s[4:5], 0x3079; GFX11-NEXT: s_load_b32 s3, s[4:5], 0x3880; GFX11-NEXT: s_load_b64 s[0:1], s[4:5], 0x2481; GFX11-NEXT: s_waitcnt lgkmcnt(0)82; GFX11-NEXT: v_pk_ashrrev_i16 v0, s3, s283; GFX11-NEXT: s_mov_b32 s3, 0x3101600084; GFX11-NEXT: s_mov_b32 s2, -185; GFX11-NEXT: buffer_store_b32 v0, off, s[0:3], 086; GFX11-NEXT: s_endpgm87 %result = ashr <2 x i16> %lhs, %rhs88 store <2 x i16> %result, ptr addrspace(1) %out89 ret void90}91 92define amdgpu_kernel void @v_ashr_v2i16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {93; GFX9-LABEL: v_ashr_v2i16:94; GFX9: ; %bb.0:95; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2496; GFX9-NEXT: v_lshlrev_b32_e32 v2, 2, v097; GFX9-NEXT: s_waitcnt lgkmcnt(0)98; GFX9-NEXT: global_load_dwordx2 v[0:1], v2, s[2:3]99; GFX9-NEXT: s_waitcnt vmcnt(0)100; GFX9-NEXT: v_pk_ashrrev_i16 v0, v1, v0101; GFX9-NEXT: global_store_dword v2, v0, s[0:1]102; GFX9-NEXT: s_endpgm103;104; VI-LABEL: v_ashr_v2i16:105; VI: ; %bb.0:106; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24107; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v0108; VI-NEXT: s_waitcnt lgkmcnt(0)109; VI-NEXT: v_mov_b32_e32 v1, s3110; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v2111; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc112; VI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]113; VI-NEXT: v_mov_b32_e32 v3, s1114; VI-NEXT: v_add_u32_e32 v2, vcc, s0, v2115; VI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc116; VI-NEXT: s_waitcnt vmcnt(0)117; VI-NEXT: v_ashrrev_i16_e32 v4, v1, v0118; VI-NEXT: v_ashrrev_i16_sdwa v0, v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1119; VI-NEXT: v_or_b32_e32 v0, v4, v0120; VI-NEXT: flat_store_dword v[2:3], v0121; VI-NEXT: s_endpgm122;123; CI-LABEL: v_ashr_v2i16:124; CI: ; %bb.0:125; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9126; CI-NEXT: s_mov_b32 s7, 0xf000127; CI-NEXT: s_mov_b32 s6, 0128; CI-NEXT: v_lshlrev_b32_e32 v0, 2, v0129; CI-NEXT: v_mov_b32_e32 v1, 0130; CI-NEXT: s_waitcnt lgkmcnt(0)131; CI-NEXT: s_mov_b64 s[4:5], s[2:3]132; CI-NEXT: buffer_load_dwordx2 v[2:3], v[0:1], s[4:7], 0 addr64133; CI-NEXT: s_mov_b64 s[2:3], s[6:7]134; CI-NEXT: s_waitcnt vmcnt(0)135; CI-NEXT: v_bfe_i32 v4, v2, 0, 16136; CI-NEXT: v_ashrrev_i32_e32 v2, 16, v2137; CI-NEXT: v_lshrrev_b32_e32 v5, 16, v3138; CI-NEXT: v_ashrrev_i32_e32 v2, v5, v2139; CI-NEXT: v_ashrrev_i32_e32 v3, v3, v4140; CI-NEXT: v_lshlrev_b32_e32 v2, 16, v2141; CI-NEXT: v_and_b32_e32 v3, 0xffff, v3142; CI-NEXT: v_or_b32_e32 v2, v3, v2143; CI-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64144; CI-NEXT: s_endpgm145;146; GFX10-LABEL: v_ashr_v2i16:147; GFX10: ; %bb.0:148; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24149; GFX10-NEXT: v_lshlrev_b32_e32 v2, 2, v0150; GFX10-NEXT: s_waitcnt lgkmcnt(0)151; GFX10-NEXT: global_load_dwordx2 v[0:1], v2, s[2:3]152; GFX10-NEXT: s_waitcnt vmcnt(0)153; GFX10-NEXT: v_pk_ashrrev_i16 v0, v1, v0154; GFX10-NEXT: global_store_dword v2, v0, s[0:1]155; GFX10-NEXT: s_endpgm156;157; GFX11-LABEL: v_ashr_v2i16:158; GFX11: ; %bb.0:159; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24160; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0161; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)162; GFX11-NEXT: v_lshlrev_b32_e32 v2, 2, v0163; GFX11-NEXT: s_waitcnt lgkmcnt(0)164; GFX11-NEXT: global_load_b64 v[0:1], v2, s[2:3]165; GFX11-NEXT: s_waitcnt vmcnt(0)166; GFX11-NEXT: v_pk_ashrrev_i16 v0, v1, v0167; GFX11-NEXT: global_store_b32 v2, v0, s[0:1]168; GFX11-NEXT: s_endpgm169 %tid = call i32 @llvm.amdgcn.workitem.id.x()170 %tid.ext = sext i32 %tid to i64171 %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext172 %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext173 %b_ptr = getelementptr <2 x i16>, ptr addrspace(1) %in.gep, i32 1174 %a = load <2 x i16>, ptr addrspace(1) %in.gep175 %b = load <2 x i16>, ptr addrspace(1) %b_ptr176 %result = ashr <2 x i16> %a, %b177 store <2 x i16> %result, ptr addrspace(1) %out.gep178 ret void179}180 181define amdgpu_kernel void @ashr_v_s_v2i16(ptr addrspace(1) %out, ptr addrspace(1) %in, <2 x i16> %sgpr) #0 {182; GFX9-LABEL: ashr_v_s_v2i16:183; GFX9: ; %bb.0:184; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24185; GFX9-NEXT: s_load_dword s6, s[4:5], 0x34186; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0187; GFX9-NEXT: s_waitcnt lgkmcnt(0)188; GFX9-NEXT: global_load_dword v1, v0, s[2:3]189; GFX9-NEXT: s_waitcnt vmcnt(0)190; GFX9-NEXT: v_pk_ashrrev_i16 v1, s6, v1191; GFX9-NEXT: global_store_dword v0, v1, s[0:1]192; GFX9-NEXT: s_endpgm193;194; VI-LABEL: ashr_v_s_v2i16:195; VI: ; %bb.0:196; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24197; VI-NEXT: s_load_dword s4, s[4:5], 0x34198; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v0199; VI-NEXT: s_waitcnt lgkmcnt(0)200; VI-NEXT: v_mov_b32_e32 v1, s3201; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v2202; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc203; VI-NEXT: flat_load_dword v3, v[0:1]204; VI-NEXT: v_mov_b32_e32 v1, s1205; VI-NEXT: s_lshr_b32 s1, s4, 16206; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v2207; VI-NEXT: v_mov_b32_e32 v2, s1208; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc209; VI-NEXT: s_waitcnt vmcnt(0)210; VI-NEXT: v_ashrrev_i16_e32 v4, s4, v3211; VI-NEXT: v_ashrrev_i16_sdwa v2, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1212; VI-NEXT: v_or_b32_e32 v2, v4, v2213; VI-NEXT: flat_store_dword v[0:1], v2214; VI-NEXT: s_endpgm215;216; CI-LABEL: ashr_v_s_v2i16:217; CI: ; %bb.0:218; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9219; CI-NEXT: s_load_dword s8, s[4:5], 0xd220; CI-NEXT: s_mov_b32 s7, 0xf000221; CI-NEXT: s_mov_b32 s6, 0222; CI-NEXT: v_lshlrev_b32_e32 v0, 2, v0223; CI-NEXT: s_waitcnt lgkmcnt(0)224; CI-NEXT: s_mov_b64 s[4:5], s[2:3]225; CI-NEXT: v_mov_b32_e32 v1, 0226; CI-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64227; CI-NEXT: s_lshr_b32 s4, s8, 16228; CI-NEXT: s_mov_b64 s[2:3], s[6:7]229; CI-NEXT: s_waitcnt vmcnt(0)230; CI-NEXT: v_bfe_i32 v3, v2, 0, 16231; CI-NEXT: v_ashrrev_i32_e32 v2, 16, v2232; CI-NEXT: v_ashrrev_i32_e32 v2, s4, v2233; CI-NEXT: v_ashrrev_i32_e32 v3, s8, v3234; CI-NEXT: v_lshlrev_b32_e32 v2, 16, v2235; CI-NEXT: v_and_b32_e32 v3, 0xffff, v3236; CI-NEXT: v_or_b32_e32 v2, v3, v2237; CI-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64238; CI-NEXT: s_endpgm239;240; GFX10-LABEL: ashr_v_s_v2i16:241; GFX10: ; %bb.0:242; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24243; GFX10-NEXT: v_lshlrev_b32_e32 v0, 2, v0244; GFX10-NEXT: s_load_dword s4, s[4:5], 0x34245; GFX10-NEXT: s_waitcnt lgkmcnt(0)246; GFX10-NEXT: global_load_dword v1, v0, s[2:3]247; GFX10-NEXT: s_waitcnt vmcnt(0)248; GFX10-NEXT: v_pk_ashrrev_i16 v1, s4, v1249; GFX10-NEXT: global_store_dword v0, v1, s[0:1]250; GFX10-NEXT: s_endpgm251;252; GFX11-LABEL: ashr_v_s_v2i16:253; GFX11: ; %bb.0:254; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24255; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0256; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x34257; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)258; GFX11-NEXT: v_lshlrev_b32_e32 v0, 2, v0259; GFX11-NEXT: s_waitcnt lgkmcnt(0)260; GFX11-NEXT: global_load_b32 v1, v0, s[2:3]261; GFX11-NEXT: s_waitcnt vmcnt(0)262; GFX11-NEXT: v_pk_ashrrev_i16 v1, s4, v1263; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]264; GFX11-NEXT: s_endpgm265 %tid = call i32 @llvm.amdgcn.workitem.id.x()266 %tid.ext = sext i32 %tid to i64267 %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext268 %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext269 %vgpr = load <2 x i16>, ptr addrspace(1) %in.gep270 %result = ashr <2 x i16> %vgpr, %sgpr271 store <2 x i16> %result, ptr addrspace(1) %out.gep272 ret void273}274 275define amdgpu_kernel void @ashr_s_v_v2i16(ptr addrspace(1) %out, ptr addrspace(1) %in, <2 x i16> %sgpr) #0 {276; GFX9-LABEL: ashr_s_v_v2i16:277; GFX9: ; %bb.0:278; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24279; GFX9-NEXT: s_load_dword s6, s[4:5], 0x34280; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0281; GFX9-NEXT: s_waitcnt lgkmcnt(0)282; GFX9-NEXT: global_load_dword v1, v0, s[2:3]283; GFX9-NEXT: s_waitcnt vmcnt(0)284; GFX9-NEXT: v_pk_ashrrev_i16 v1, v1, s6285; GFX9-NEXT: global_store_dword v0, v1, s[0:1]286; GFX9-NEXT: s_endpgm287;288; VI-LABEL: ashr_s_v_v2i16:289; VI: ; %bb.0:290; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24291; VI-NEXT: s_load_dword s4, s[4:5], 0x34292; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v0293; VI-NEXT: s_waitcnt lgkmcnt(0)294; VI-NEXT: v_mov_b32_e32 v1, s3295; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v2296; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc297; VI-NEXT: flat_load_dword v3, v[0:1]298; VI-NEXT: v_mov_b32_e32 v1, s1299; VI-NEXT: s_lshr_b32 s1, s4, 16300; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v2301; VI-NEXT: v_mov_b32_e32 v2, s1302; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc303; VI-NEXT: s_waitcnt vmcnt(0)304; VI-NEXT: v_ashrrev_i16_e64 v4, v3, s4305; VI-NEXT: v_ashrrev_i16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD306; VI-NEXT: v_or_b32_e32 v2, v4, v2307; VI-NEXT: flat_store_dword v[0:1], v2308; VI-NEXT: s_endpgm309;310; CI-LABEL: ashr_s_v_v2i16:311; CI: ; %bb.0:312; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9313; CI-NEXT: s_load_dword s8, s[4:5], 0xd314; CI-NEXT: s_mov_b32 s7, 0xf000315; CI-NEXT: s_mov_b32 s6, 0316; CI-NEXT: v_lshlrev_b32_e32 v0, 2, v0317; CI-NEXT: s_waitcnt lgkmcnt(0)318; CI-NEXT: s_mov_b64 s[4:5], s[2:3]319; CI-NEXT: v_mov_b32_e32 v1, 0320; CI-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64321; CI-NEXT: s_ashr_i32 s4, s8, 16322; CI-NEXT: s_sext_i32_i16 s5, s8323; CI-NEXT: s_mov_b64 s[2:3], s[6:7]324; CI-NEXT: s_waitcnt vmcnt(0)325; CI-NEXT: v_lshrrev_b32_e32 v3, 16, v2326; CI-NEXT: v_ashr_i32_e32 v2, s5, v2327; CI-NEXT: v_ashr_i32_e32 v3, s4, v3328; CI-NEXT: v_and_b32_e32 v2, 0xffff, v2329; CI-NEXT: v_lshlrev_b32_e32 v3, 16, v3330; CI-NEXT: v_or_b32_e32 v2, v2, v3331; CI-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64332; CI-NEXT: s_endpgm333;334; GFX10-LABEL: ashr_s_v_v2i16:335; GFX10: ; %bb.0:336; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24337; GFX10-NEXT: v_lshlrev_b32_e32 v0, 2, v0338; GFX10-NEXT: s_load_dword s4, s[4:5], 0x34339; GFX10-NEXT: s_waitcnt lgkmcnt(0)340; GFX10-NEXT: global_load_dword v1, v0, s[2:3]341; GFX10-NEXT: s_waitcnt vmcnt(0)342; GFX10-NEXT: v_pk_ashrrev_i16 v1, v1, s4343; GFX10-NEXT: global_store_dword v0, v1, s[0:1]344; GFX10-NEXT: s_endpgm345;346; GFX11-LABEL: ashr_s_v_v2i16:347; GFX11: ; %bb.0:348; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24349; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0350; GFX11-NEXT: s_load_b32 s4, s[4:5], 0x34351; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)352; GFX11-NEXT: v_lshlrev_b32_e32 v0, 2, v0353; GFX11-NEXT: s_waitcnt lgkmcnt(0)354; GFX11-NEXT: global_load_b32 v1, v0, s[2:3]355; GFX11-NEXT: s_waitcnt vmcnt(0)356; GFX11-NEXT: v_pk_ashrrev_i16 v1, v1, s4357; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]358; GFX11-NEXT: s_endpgm359 %tid = call i32 @llvm.amdgcn.workitem.id.x()360 %tid.ext = sext i32 %tid to i64361 %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext362 %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext363 %vgpr = load <2 x i16>, ptr addrspace(1) %in.gep364 %result = ashr <2 x i16> %sgpr, %vgpr365 store <2 x i16> %result, ptr addrspace(1) %out.gep366 ret void367}368 369define amdgpu_kernel void @ashr_imm_v_v2i16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {370; GFX9-LABEL: ashr_imm_v_v2i16:371; GFX9: ; %bb.0:372; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24373; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0374; GFX9-NEXT: s_waitcnt lgkmcnt(0)375; GFX9-NEXT: global_load_dword v1, v0, s[2:3]376; GFX9-NEXT: s_waitcnt vmcnt(0)377; GFX9-NEXT: v_pk_ashrrev_i16 v1, v1, -4 op_sel_hi:[1,0]378; GFX9-NEXT: global_store_dword v0, v1, s[0:1]379; GFX9-NEXT: s_endpgm380;381; VI-LABEL: ashr_imm_v_v2i16:382; VI: ; %bb.0:383; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24384; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v0385; VI-NEXT: v_mov_b32_e32 v4, -4386; VI-NEXT: s_waitcnt lgkmcnt(0)387; VI-NEXT: v_mov_b32_e32 v1, s3388; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v2389; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc390; VI-NEXT: flat_load_dword v3, v[0:1]391; VI-NEXT: v_mov_b32_e32 v1, s1392; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v2393; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc394; VI-NEXT: s_waitcnt vmcnt(0)395; VI-NEXT: v_ashrrev_i16_e64 v2, v3, -4396; VI-NEXT: v_ashrrev_i16_sdwa v3, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD397; VI-NEXT: v_or_b32_e32 v2, v2, v3398; VI-NEXT: flat_store_dword v[0:1], v2399; VI-NEXT: s_endpgm400;401; CI-LABEL: ashr_imm_v_v2i16:402; CI: ; %bb.0:403; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9404; CI-NEXT: s_mov_b32 s7, 0xf000405; CI-NEXT: s_mov_b32 s6, 0406; CI-NEXT: v_lshlrev_b32_e32 v0, 2, v0407; CI-NEXT: v_mov_b32_e32 v1, 0408; CI-NEXT: s_waitcnt lgkmcnt(0)409; CI-NEXT: s_mov_b64 s[4:5], s[2:3]410; CI-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64411; CI-NEXT: s_mov_b64 s[2:3], s[6:7]412; CI-NEXT: s_waitcnt vmcnt(0)413; CI-NEXT: v_lshrrev_b32_e32 v3, 16, v2414; CI-NEXT: v_ashr_i32_e32 v2, -4, v2415; CI-NEXT: v_ashr_i32_e32 v3, -4, v3416; CI-NEXT: v_and_b32_e32 v2, 0xffff, v2417; CI-NEXT: v_lshlrev_b32_e32 v3, 16, v3418; CI-NEXT: v_or_b32_e32 v2, v2, v3419; CI-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64420; CI-NEXT: s_endpgm421;422; GFX10-LABEL: ashr_imm_v_v2i16:423; GFX10: ; %bb.0:424; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24425; GFX10-NEXT: v_lshlrev_b32_e32 v0, 2, v0426; GFX10-NEXT: s_waitcnt lgkmcnt(0)427; GFX10-NEXT: global_load_dword v1, v0, s[2:3]428; GFX10-NEXT: s_waitcnt vmcnt(0)429; GFX10-NEXT: v_pk_ashrrev_i16 v1, v1, -4 op_sel_hi:[1,0]430; GFX10-NEXT: global_store_dword v0, v1, s[0:1]431; GFX10-NEXT: s_endpgm432;433; GFX11-LABEL: ashr_imm_v_v2i16:434; GFX11: ; %bb.0:435; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24436; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0437; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)438; GFX11-NEXT: v_lshlrev_b32_e32 v0, 2, v0439; GFX11-NEXT: s_waitcnt lgkmcnt(0)440; GFX11-NEXT: global_load_b32 v1, v0, s[2:3]441; GFX11-NEXT: s_waitcnt vmcnt(0)442; GFX11-NEXT: v_pk_ashrrev_i16 v1, v1, -4 op_sel_hi:[1,0]443; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]444; GFX11-NEXT: s_endpgm445 %tid = call i32 @llvm.amdgcn.workitem.id.x()446 %tid.ext = sext i32 %tid to i64447 %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext448 %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext449 %vgpr = load <2 x i16>, ptr addrspace(1) %in.gep450 %result = ashr <2 x i16> <i16 -4, i16 -4>, %vgpr451 store <2 x i16> %result, ptr addrspace(1) %out.gep452 ret void453}454 455define amdgpu_kernel void @ashr_v_imm_v2i16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {456; GFX9-LABEL: ashr_v_imm_v2i16:457; GFX9: ; %bb.0:458; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24459; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0460; GFX9-NEXT: s_waitcnt lgkmcnt(0)461; GFX9-NEXT: global_load_dword v1, v0, s[2:3]462; GFX9-NEXT: s_waitcnt vmcnt(0)463; GFX9-NEXT: v_pk_ashrrev_i16 v1, 8, v1 op_sel_hi:[0,1]464; GFX9-NEXT: global_store_dword v0, v1, s[0:1]465; GFX9-NEXT: s_endpgm466;467; VI-LABEL: ashr_v_imm_v2i16:468; VI: ; %bb.0:469; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24470; VI-NEXT: v_lshlrev_b32_e32 v2, 2, v0471; VI-NEXT: s_waitcnt lgkmcnt(0)472; VI-NEXT: v_mov_b32_e32 v1, s3473; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v2474; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc475; VI-NEXT: flat_load_dword v3, v[0:1]476; VI-NEXT: v_add_u32_e32 v0, vcc, s0, v2477; VI-NEXT: v_mov_b32_e32 v2, 8478; VI-NEXT: v_mov_b32_e32 v1, s1479; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc480; VI-NEXT: s_waitcnt vmcnt(0)481; VI-NEXT: v_ashrrev_i16_sdwa v2, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1482; VI-NEXT: v_or_b32_sdwa v2, sext(v3), v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD483; VI-NEXT: flat_store_dword v[0:1], v2484; VI-NEXT: s_endpgm485;486; CI-LABEL: ashr_v_imm_v2i16:487; CI: ; %bb.0:488; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9489; CI-NEXT: s_mov_b32 s7, 0xf000490; CI-NEXT: s_mov_b32 s6, 0491; CI-NEXT: v_lshlrev_b32_e32 v0, 2, v0492; CI-NEXT: v_mov_b32_e32 v1, 0493; CI-NEXT: s_waitcnt lgkmcnt(0)494; CI-NEXT: s_mov_b64 s[4:5], s[2:3]495; CI-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64496; CI-NEXT: s_mov_b64 s[2:3], s[6:7]497; CI-NEXT: s_waitcnt vmcnt(0)498; CI-NEXT: v_bfe_i32 v3, v2, 0, 16499; CI-NEXT: v_ashrrev_i32_e32 v2, 24, v2500; CI-NEXT: v_lshlrev_b32_e32 v2, 16, v2501; CI-NEXT: v_bfe_u32 v3, v3, 8, 16502; CI-NEXT: v_or_b32_e32 v2, v3, v2503; CI-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64504; CI-NEXT: s_endpgm505;506; GFX10-LABEL: ashr_v_imm_v2i16:507; GFX10: ; %bb.0:508; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24509; GFX10-NEXT: v_lshlrev_b32_e32 v0, 2, v0510; GFX10-NEXT: s_waitcnt lgkmcnt(0)511; GFX10-NEXT: global_load_dword v1, v0, s[2:3]512; GFX10-NEXT: s_waitcnt vmcnt(0)513; GFX10-NEXT: v_pk_ashrrev_i16 v1, 8, v1 op_sel_hi:[0,1]514; GFX10-NEXT: global_store_dword v0, v1, s[0:1]515; GFX10-NEXT: s_endpgm516;517; GFX11-LABEL: ashr_v_imm_v2i16:518; GFX11: ; %bb.0:519; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24520; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0521; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)522; GFX11-NEXT: v_lshlrev_b32_e32 v0, 2, v0523; GFX11-NEXT: s_waitcnt lgkmcnt(0)524; GFX11-NEXT: global_load_b32 v1, v0, s[2:3]525; GFX11-NEXT: s_waitcnt vmcnt(0)526; GFX11-NEXT: v_pk_ashrrev_i16 v1, 8, v1 op_sel_hi:[0,1]527; GFX11-NEXT: global_store_b32 v0, v1, s[0:1]528; GFX11-NEXT: s_endpgm529 %tid = call i32 @llvm.amdgcn.workitem.id.x()530 %tid.ext = sext i32 %tid to i64531 %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext532 %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext533 %vgpr = load <2 x i16>, ptr addrspace(1) %in.gep534 %result = ashr <2 x i16> %vgpr, <i16 8, i16 8>535 store <2 x i16> %result, ptr addrspace(1) %out.gep536 ret void537}538 539define amdgpu_kernel void @v_ashr_v4i16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {540; GFX9-LABEL: v_ashr_v4i16:541; GFX9: ; %bb.0:542; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24543; GFX9-NEXT: v_lshlrev_b32_e32 v4, 3, v0544; GFX9-NEXT: s_waitcnt lgkmcnt(0)545; GFX9-NEXT: global_load_dwordx4 v[0:3], v4, s[2:3]546; GFX9-NEXT: s_waitcnt vmcnt(0)547; GFX9-NEXT: v_pk_ashrrev_i16 v1, v3, v1548; GFX9-NEXT: v_pk_ashrrev_i16 v0, v2, v0549; GFX9-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]550; GFX9-NEXT: s_endpgm551;552; VI-LABEL: v_ashr_v4i16:553; VI: ; %bb.0:554; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24555; VI-NEXT: v_lshlrev_b32_e32 v4, 3, v0556; VI-NEXT: s_waitcnt lgkmcnt(0)557; VI-NEXT: v_mov_b32_e32 v1, s3558; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v4559; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc560; VI-NEXT: flat_load_dwordx4 v[0:3], v[0:1]561; VI-NEXT: v_mov_b32_e32 v5, s1562; VI-NEXT: v_add_u32_e32 v4, vcc, s0, v4563; VI-NEXT: v_addc_u32_e32 v5, vcc, 0, v5, vcc564; VI-NEXT: s_waitcnt vmcnt(0)565; VI-NEXT: v_ashrrev_i16_e32 v6, v3, v1566; VI-NEXT: v_ashrrev_i16_sdwa v1, v3, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1567; VI-NEXT: v_ashrrev_i16_e32 v3, v2, v0568; VI-NEXT: v_ashrrev_i16_sdwa v0, v2, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1569; VI-NEXT: v_or_b32_e32 v1, v6, v1570; VI-NEXT: v_or_b32_e32 v0, v3, v0571; VI-NEXT: flat_store_dwordx2 v[4:5], v[0:1]572; VI-NEXT: s_endpgm573;574; CI-LABEL: v_ashr_v4i16:575; CI: ; %bb.0:576; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9577; CI-NEXT: s_mov_b32 s7, 0xf000578; CI-NEXT: s_mov_b32 s6, 0579; CI-NEXT: v_lshlrev_b32_e32 v4, 3, v0580; CI-NEXT: v_mov_b32_e32 v5, 0581; CI-NEXT: s_waitcnt lgkmcnt(0)582; CI-NEXT: s_mov_b64 s[4:5], s[2:3]583; CI-NEXT: buffer_load_dwordx4 v[0:3], v[4:5], s[4:7], 0 addr64584; CI-NEXT: s_mov_b64 s[2:3], s[6:7]585; CI-NEXT: s_waitcnt vmcnt(0)586; CI-NEXT: v_bfe_i32 v6, v0, 0, 16587; CI-NEXT: v_ashrrev_i32_e32 v0, 16, v0588; CI-NEXT: v_bfe_i32 v7, v1, 0, 16589; CI-NEXT: v_ashrrev_i32_e32 v1, 16, v1590; CI-NEXT: v_lshrrev_b32_e32 v8, 16, v2591; CI-NEXT: v_lshrrev_b32_e32 v9, 16, v3592; CI-NEXT: v_ashrrev_i32_e32 v1, v9, v1593; CI-NEXT: v_ashrrev_i32_e32 v3, v3, v7594; CI-NEXT: v_ashrrev_i32_e32 v0, v8, v0595; CI-NEXT: v_ashrrev_i32_e32 v2, v2, v6596; CI-NEXT: v_lshlrev_b32_e32 v1, 16, v1597; CI-NEXT: v_and_b32_e32 v3, 0xffff, v3598; CI-NEXT: v_lshlrev_b32_e32 v0, 16, v0599; CI-NEXT: v_and_b32_e32 v2, 0xffff, v2600; CI-NEXT: v_or_b32_e32 v1, v3, v1601; CI-NEXT: v_or_b32_e32 v0, v2, v0602; CI-NEXT: buffer_store_dwordx2 v[0:1], v[4:5], s[0:3], 0 addr64603; CI-NEXT: s_endpgm604;605; GFX10-LABEL: v_ashr_v4i16:606; GFX10: ; %bb.0:607; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24608; GFX10-NEXT: v_lshlrev_b32_e32 v4, 3, v0609; GFX10-NEXT: s_waitcnt lgkmcnt(0)610; GFX10-NEXT: global_load_dwordx4 v[0:3], v4, s[2:3]611; GFX10-NEXT: s_waitcnt vmcnt(0)612; GFX10-NEXT: v_pk_ashrrev_i16 v1, v3, v1613; GFX10-NEXT: v_pk_ashrrev_i16 v0, v2, v0614; GFX10-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]615; GFX10-NEXT: s_endpgm616;617; GFX11-LABEL: v_ashr_v4i16:618; GFX11: ; %bb.0:619; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24620; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0621; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)622; GFX11-NEXT: v_lshlrev_b32_e32 v4, 3, v0623; GFX11-NEXT: s_waitcnt lgkmcnt(0)624; GFX11-NEXT: global_load_b128 v[0:3], v4, s[2:3]625; GFX11-NEXT: s_waitcnt vmcnt(0)626; GFX11-NEXT: v_pk_ashrrev_i16 v1, v3, v1627; GFX11-NEXT: v_pk_ashrrev_i16 v0, v2, v0628; GFX11-NEXT: global_store_b64 v4, v[0:1], s[0:1]629; GFX11-NEXT: s_endpgm630 %tid = call i32 @llvm.amdgcn.workitem.id.x()631 %tid.ext = sext i32 %tid to i64632 %in.gep = getelementptr inbounds <4 x i16>, ptr addrspace(1) %in, i64 %tid.ext633 %out.gep = getelementptr inbounds <4 x i16>, ptr addrspace(1) %out, i64 %tid.ext634 %b_ptr = getelementptr <4 x i16>, ptr addrspace(1) %in.gep, i32 1635 %a = load <4 x i16>, ptr addrspace(1) %in.gep636 %b = load <4 x i16>, ptr addrspace(1) %b_ptr637 %result = ashr <4 x i16> %a, %b638 store <4 x i16> %result, ptr addrspace(1) %out.gep639 ret void640}641 642define amdgpu_kernel void @ashr_v_imm_v4i16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {643; GFX9-LABEL: ashr_v_imm_v4i16:644; GFX9: ; %bb.0:645; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24646; GFX9-NEXT: v_lshlrev_b32_e32 v2, 3, v0647; GFX9-NEXT: s_waitcnt lgkmcnt(0)648; GFX9-NEXT: global_load_dwordx2 v[0:1], v2, s[2:3]649; GFX9-NEXT: s_waitcnt vmcnt(0)650; GFX9-NEXT: v_pk_ashrrev_i16 v1, 8, v1 op_sel_hi:[0,1]651; GFX9-NEXT: v_pk_ashrrev_i16 v0, 8, v0 op_sel_hi:[0,1]652; GFX9-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]653; GFX9-NEXT: s_endpgm654;655; VI-LABEL: ashr_v_imm_v4i16:656; VI: ; %bb.0:657; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24658; VI-NEXT: v_lshlrev_b32_e32 v2, 3, v0659; VI-NEXT: v_mov_b32_e32 v4, 8660; VI-NEXT: s_waitcnt lgkmcnt(0)661; VI-NEXT: v_mov_b32_e32 v1, s3662; VI-NEXT: v_add_u32_e32 v0, vcc, s2, v2663; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc664; VI-NEXT: flat_load_dwordx2 v[0:1], v[0:1]665; VI-NEXT: v_mov_b32_e32 v3, s1666; VI-NEXT: v_add_u32_e32 v2, vcc, s0, v2667; VI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc668; VI-NEXT: s_waitcnt vmcnt(0)669; VI-NEXT: v_ashrrev_i16_sdwa v5, v4, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1670; VI-NEXT: v_ashrrev_i16_sdwa v4, v4, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1671; VI-NEXT: v_or_b32_sdwa v1, sext(v1), v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD672; VI-NEXT: v_or_b32_sdwa v0, sext(v0), v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD673; VI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]674; VI-NEXT: s_endpgm675;676; CI-LABEL: ashr_v_imm_v4i16:677; CI: ; %bb.0:678; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9679; CI-NEXT: s_mov_b32 s7, 0xf000680; CI-NEXT: s_mov_b32 s6, 0681; CI-NEXT: v_lshlrev_b32_e32 v0, 3, v0682; CI-NEXT: v_mov_b32_e32 v1, 0683; CI-NEXT: s_waitcnt lgkmcnt(0)684; CI-NEXT: s_mov_b64 s[4:5], s[2:3]685; CI-NEXT: buffer_load_dwordx2 v[2:3], v[0:1], s[4:7], 0 addr64686; CI-NEXT: s_mov_b64 s[2:3], s[6:7]687; CI-NEXT: s_waitcnt vmcnt(0)688; CI-NEXT: v_bfe_i32 v4, v2, 0, 16689; CI-NEXT: v_bfe_i32 v5, v3, 0, 16690; CI-NEXT: v_ashrrev_i32_e32 v3, 24, v3691; CI-NEXT: v_ashrrev_i32_e32 v2, 24, v2692; CI-NEXT: v_lshlrev_b32_e32 v3, 16, v3693; CI-NEXT: v_bfe_u32 v5, v5, 8, 16694; CI-NEXT: v_lshlrev_b32_e32 v2, 16, v2695; CI-NEXT: v_bfe_u32 v4, v4, 8, 16696; CI-NEXT: v_or_b32_e32 v3, v5, v3697; CI-NEXT: v_or_b32_e32 v2, v4, v2698; CI-NEXT: buffer_store_dwordx2 v[2:3], v[0:1], s[0:3], 0 addr64699; CI-NEXT: s_endpgm700;701; GFX10-LABEL: ashr_v_imm_v4i16:702; GFX10: ; %bb.0:703; GFX10-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24704; GFX10-NEXT: v_lshlrev_b32_e32 v2, 3, v0705; GFX10-NEXT: s_waitcnt lgkmcnt(0)706; GFX10-NEXT: global_load_dwordx2 v[0:1], v2, s[2:3]707; GFX10-NEXT: s_waitcnt vmcnt(0)708; GFX10-NEXT: v_pk_ashrrev_i16 v1, 8, v1 op_sel_hi:[0,1]709; GFX10-NEXT: v_pk_ashrrev_i16 v0, 8, v0 op_sel_hi:[0,1]710; GFX10-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]711; GFX10-NEXT: s_endpgm712;713; GFX11-LABEL: ashr_v_imm_v4i16:714; GFX11: ; %bb.0:715; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x24716; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v0717; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)718; GFX11-NEXT: v_lshlrev_b32_e32 v2, 3, v0719; GFX11-NEXT: s_waitcnt lgkmcnt(0)720; GFX11-NEXT: global_load_b64 v[0:1], v2, s[2:3]721; GFX11-NEXT: s_waitcnt vmcnt(0)722; GFX11-NEXT: v_pk_ashrrev_i16 v1, 8, v1 op_sel_hi:[0,1]723; GFX11-NEXT: v_pk_ashrrev_i16 v0, 8, v0 op_sel_hi:[0,1]724; GFX11-NEXT: global_store_b64 v2, v[0:1], s[0:1]725; GFX11-NEXT: s_endpgm726 %tid = call i32 @llvm.amdgcn.workitem.id.x()727 %tid.ext = sext i32 %tid to i64728 %in.gep = getelementptr inbounds <4 x i16>, ptr addrspace(1) %in, i64 %tid.ext729 %out.gep = getelementptr inbounds <4 x i16>, ptr addrspace(1) %out, i64 %tid.ext730 %vgpr = load <4 x i16>, ptr addrspace(1) %in.gep731 %result = ashr <4 x i16> %vgpr, <i16 8, i16 8, i16 8, i16 8>732 store <4 x i16> %result, ptr addrspace(1) %out.gep733 ret void734}735 736declare i32 @llvm.amdgcn.workitem.id.x() #1737 738attributes #0 = { nounwind }739attributes #1 = { nounwind readnone }740