213 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=amdgcn -mcpu=tonga | FileCheck -check-prefixes=PREGFX10-UNPACKED %s3; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx810 | FileCheck -check-prefixes=PREGFX10-PACKED %s4; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx900 | FileCheck -check-prefixes=PREGFX10-PACKED %s5; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1010 | FileCheck -check-prefixes=GFX10-PACKED %s6; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -amdgpu-enable-vopd=0 | FileCheck -check-prefixes=GFX11-PACKED,GFX11-PACKED-TRUE16 %s7; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -amdgpu-enable-vopd=0 | FileCheck -check-prefixes=GFX11-PACKED,GFX11-PACKED-FAKE16 %s8 9define amdgpu_kernel void @tbuffer_store_d16_x(ptr addrspace(8) %rsrc, half %data) {10; PREGFX10-UNPACKED-LABEL: tbuffer_store_d16_x:11; PREGFX10-UNPACKED: ; %bb.0: ; %main_body12; PREGFX10-UNPACKED-NEXT: s_load_dword s6, s[4:5], 0x3413; PREGFX10-UNPACKED-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2414; PREGFX10-UNPACKED-NEXT: s_waitcnt lgkmcnt(0)15; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v0, s616; PREGFX10-UNPACKED-NEXT: tbuffer_store_format_d16_x v0, off, s[0:3], 0 format:[BUF_NUM_FORMAT_USCALED]17; PREGFX10-UNPACKED-NEXT: s_endpgm18;19; PREGFX10-PACKED-LABEL: tbuffer_store_d16_x:20; PREGFX10-PACKED: ; %bb.0: ; %main_body21; PREGFX10-PACKED-NEXT: s_load_dword s6, s[4:5], 0x3422; PREGFX10-PACKED-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2423; PREGFX10-PACKED-NEXT: s_waitcnt lgkmcnt(0)24; PREGFX10-PACKED-NEXT: v_mov_b32_e32 v0, s625; PREGFX10-PACKED-NEXT: tbuffer_store_format_d16_x v0, off, s[0:3], 0 format:[BUF_NUM_FORMAT_USCALED]26; PREGFX10-PACKED-NEXT: s_endpgm27;28; GFX10-PACKED-LABEL: tbuffer_store_d16_x:29; GFX10-PACKED: ; %bb.0: ; %main_body30; GFX10-PACKED-NEXT: s_clause 0x131; GFX10-PACKED-NEXT: s_load_dword s6, s[4:5], 0x3432; GFX10-PACKED-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2433; GFX10-PACKED-NEXT: s_waitcnt lgkmcnt(0)34; GFX10-PACKED-NEXT: v_mov_b32_e32 v0, s635; GFX10-PACKED-NEXT: tbuffer_store_format_d16_x v0, off, s[0:3], 0 format:[BUF_FMT_10_11_11_SSCALED]36; GFX10-PACKED-NEXT: s_endpgm37;38; GFX11-PACKED-LABEL: tbuffer_store_d16_x:39; GFX11-PACKED: ; %bb.0: ; %main_body40; GFX11-PACKED-NEXT: s_clause 0x141; GFX11-PACKED-NEXT: s_load_b32 s6, s[4:5], 0x3442; GFX11-PACKED-NEXT: s_load_b128 s[0:3], s[4:5], 0x2443; GFX11-PACKED-NEXT: s_waitcnt lgkmcnt(0)44; GFX11-PACKED-NEXT: v_mov_b32_e32 v0, s645; GFX11-PACKED-NEXT: tbuffer_store_d16_format_x v0, off, s[0:3], 0 format:[BUF_FMT_10_10_10_2_SNORM]46; GFX11-PACKED-NEXT: s_endpgm47main_body:48 call void @llvm.amdgcn.raw.ptr.tbuffer.store.f16(half %data, ptr addrspace(8) %rsrc, i32 0, i32 0, i32 33, i32 0)49 ret void50}51 52define amdgpu_kernel void @tbuffer_store_d16_xy(ptr addrspace(8) %rsrc, <2 x half> %data) {53; PREGFX10-UNPACKED-LABEL: tbuffer_store_d16_xy:54; PREGFX10-UNPACKED: ; %bb.0: ; %main_body55; PREGFX10-UNPACKED-NEXT: s_load_dword s6, s[4:5], 0x3456; PREGFX10-UNPACKED-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2457; PREGFX10-UNPACKED-NEXT: s_waitcnt lgkmcnt(0)58; PREGFX10-UNPACKED-NEXT: s_lshr_b32 s4, s6, 1659; PREGFX10-UNPACKED-NEXT: s_and_b32 s5, s6, 0xffff60; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v0, s561; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v1, s462; PREGFX10-UNPACKED-NEXT: tbuffer_store_format_d16_xy v[0:1], off, s[0:3], 0 format:[BUF_NUM_FORMAT_USCALED]63; PREGFX10-UNPACKED-NEXT: s_endpgm64;65; PREGFX10-PACKED-LABEL: tbuffer_store_d16_xy:66; PREGFX10-PACKED: ; %bb.0: ; %main_body67; PREGFX10-PACKED-NEXT: s_load_dword s6, s[4:5], 0x3468; PREGFX10-PACKED-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2469; PREGFX10-PACKED-NEXT: s_waitcnt lgkmcnt(0)70; PREGFX10-PACKED-NEXT: v_mov_b32_e32 v0, s671; PREGFX10-PACKED-NEXT: tbuffer_store_format_d16_xy v0, off, s[0:3], 0 format:[BUF_NUM_FORMAT_USCALED]72; PREGFX10-PACKED-NEXT: s_endpgm73;74; GFX10-PACKED-LABEL: tbuffer_store_d16_xy:75; GFX10-PACKED: ; %bb.0: ; %main_body76; GFX10-PACKED-NEXT: s_clause 0x177; GFX10-PACKED-NEXT: s_load_dword s6, s[4:5], 0x3478; GFX10-PACKED-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2479; GFX10-PACKED-NEXT: s_waitcnt lgkmcnt(0)80; GFX10-PACKED-NEXT: v_mov_b32_e32 v0, s681; GFX10-PACKED-NEXT: tbuffer_store_format_d16_xy v0, off, s[0:3], 0 format:[BUF_FMT_10_11_11_SSCALED]82; GFX10-PACKED-NEXT: s_endpgm83;84; GFX11-PACKED-LABEL: tbuffer_store_d16_xy:85; GFX11-PACKED: ; %bb.0: ; %main_body86; GFX11-PACKED-NEXT: s_clause 0x187; GFX11-PACKED-NEXT: s_load_b32 s6, s[4:5], 0x3488; GFX11-PACKED-NEXT: s_load_b128 s[0:3], s[4:5], 0x2489; GFX11-PACKED-NEXT: s_waitcnt lgkmcnt(0)90; GFX11-PACKED-NEXT: v_mov_b32_e32 v0, s691; GFX11-PACKED-NEXT: tbuffer_store_d16_format_xy v0, off, s[0:3], 0 format:[BUF_FMT_10_10_10_2_SNORM]92; GFX11-PACKED-NEXT: s_endpgm93main_body:94 call void @llvm.amdgcn.raw.ptr.tbuffer.store.v2f16(<2 x half> %data, ptr addrspace(8) %rsrc, i32 0, i32 0, i32 33, i32 0)95 ret void96}97 98define amdgpu_kernel void @tbuffer_store_d16_xyz(ptr addrspace(8) %rsrc, <4 x half> %data) {99; PREGFX10-UNPACKED-LABEL: tbuffer_store_d16_xyz:100; PREGFX10-UNPACKED: ; %bb.0: ; %main_body101; PREGFX10-UNPACKED-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34102; PREGFX10-UNPACKED-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24103; PREGFX10-UNPACKED-NEXT: s_waitcnt lgkmcnt(0)104; PREGFX10-UNPACKED-NEXT: s_and_b32 s4, s7, 0xffff105; PREGFX10-UNPACKED-NEXT: s_lshr_b32 s5, s6, 16106; PREGFX10-UNPACKED-NEXT: s_and_b32 s6, s6, 0xffff107; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v0, s6108; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v1, s5109; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v2, s4110; PREGFX10-UNPACKED-NEXT: tbuffer_store_format_d16_xyz v[0:2], off, s[0:3], 0 format:[BUF_NUM_FORMAT_USCALED]111; PREGFX10-UNPACKED-NEXT: s_endpgm112;113; PREGFX10-PACKED-LABEL: tbuffer_store_d16_xyz:114; PREGFX10-PACKED: ; %bb.0: ; %main_body115; PREGFX10-PACKED-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34116; PREGFX10-PACKED-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24117; PREGFX10-PACKED-NEXT: s_waitcnt lgkmcnt(0)118; PREGFX10-PACKED-NEXT: s_and_b32 s4, s7, 0xffff119; PREGFX10-PACKED-NEXT: v_mov_b32_e32 v0, s6120; PREGFX10-PACKED-NEXT: v_mov_b32_e32 v1, s4121; PREGFX10-PACKED-NEXT: tbuffer_store_format_d16_xyz v[0:1], off, s[0:3], 0 format:[BUF_NUM_FORMAT_USCALED]122; PREGFX10-PACKED-NEXT: s_endpgm123;124; GFX10-PACKED-LABEL: tbuffer_store_d16_xyz:125; GFX10-PACKED: ; %bb.0: ; %main_body126; GFX10-PACKED-NEXT: s_clause 0x1127; GFX10-PACKED-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34128; GFX10-PACKED-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24129; GFX10-PACKED-NEXT: s_waitcnt lgkmcnt(0)130; GFX10-PACKED-NEXT: s_and_b32 s4, s7, 0xffff131; GFX10-PACKED-NEXT: v_mov_b32_e32 v0, s6132; GFX10-PACKED-NEXT: v_mov_b32_e32 v1, s4133; GFX10-PACKED-NEXT: tbuffer_store_format_d16_xyz v[0:1], off, s[0:3], 0 format:[BUF_FMT_10_11_11_SSCALED]134; GFX10-PACKED-NEXT: s_endpgm135;136; GFX11-PACKED-LABEL: tbuffer_store_d16_xyz:137; GFX11-PACKED: ; %bb.0: ; %main_body138; GFX11-PACKED-NEXT: s_clause 0x1139; GFX11-PACKED-NEXT: s_load_b64 s[6:7], s[4:5], 0x34140; GFX11-PACKED-NEXT: s_load_b128 s[0:3], s[4:5], 0x24141; GFX11-PACKED-NEXT: s_waitcnt lgkmcnt(0)142; GFX11-PACKED-NEXT: s_and_b32 s4, s7, 0xffff143; GFX11-PACKED-NEXT: v_mov_b32_e32 v0, s6144; GFX11-PACKED-NEXT: v_mov_b32_e32 v1, s4145; GFX11-PACKED-NEXT: tbuffer_store_d16_format_xyz v[0:1], off, s[0:3], 0 format:[BUF_FMT_10_10_10_2_SNORM]146; GFX11-PACKED-NEXT: s_endpgm147main_body:148 %data_subvec = shufflevector <4 x half> %data, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>149 call void @llvm.amdgcn.raw.ptr.tbuffer.store.v3f16(<3 x half> %data_subvec, ptr addrspace(8) %rsrc, i32 0, i32 0, i32 33, i32 0)150 ret void151}152 153define amdgpu_kernel void @tbuffer_store_d16_xyzw(ptr addrspace(8) %rsrc, <4 x half> %data) {154; PREGFX10-UNPACKED-LABEL: tbuffer_store_d16_xyzw:155; PREGFX10-UNPACKED: ; %bb.0: ; %main_body156; PREGFX10-UNPACKED-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34157; PREGFX10-UNPACKED-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24158; PREGFX10-UNPACKED-NEXT: s_waitcnt lgkmcnt(0)159; PREGFX10-UNPACKED-NEXT: s_lshr_b32 s4, s7, 16160; PREGFX10-UNPACKED-NEXT: s_and_b32 s5, s7, 0xffff161; PREGFX10-UNPACKED-NEXT: s_lshr_b32 s7, s6, 16162; PREGFX10-UNPACKED-NEXT: s_and_b32 s6, s6, 0xffff163; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v0, s6164; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v1, s7165; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v2, s5166; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v3, s4167; PREGFX10-UNPACKED-NEXT: tbuffer_store_format_d16_xyzw v[0:3], off, s[0:3], 0 format:[BUF_NUM_FORMAT_USCALED]168; PREGFX10-UNPACKED-NEXT: s_endpgm169;170; PREGFX10-PACKED-LABEL: tbuffer_store_d16_xyzw:171; PREGFX10-PACKED: ; %bb.0: ; %main_body172; PREGFX10-PACKED-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34173; PREGFX10-PACKED-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24174; PREGFX10-PACKED-NEXT: s_waitcnt lgkmcnt(0)175; PREGFX10-PACKED-NEXT: v_mov_b32_e32 v0, s6176; PREGFX10-PACKED-NEXT: v_mov_b32_e32 v1, s7177; PREGFX10-PACKED-NEXT: tbuffer_store_format_d16_xyzw v[0:1], off, s[0:3], 0 format:[BUF_NUM_FORMAT_USCALED]178; PREGFX10-PACKED-NEXT: s_endpgm179;180; GFX10-PACKED-LABEL: tbuffer_store_d16_xyzw:181; GFX10-PACKED: ; %bb.0: ; %main_body182; GFX10-PACKED-NEXT: s_clause 0x1183; GFX10-PACKED-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34184; GFX10-PACKED-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24185; GFX10-PACKED-NEXT: s_waitcnt lgkmcnt(0)186; GFX10-PACKED-NEXT: v_mov_b32_e32 v0, s6187; GFX10-PACKED-NEXT: v_mov_b32_e32 v1, s7188; GFX10-PACKED-NEXT: tbuffer_store_format_d16_xyzw v[0:1], off, s[0:3], 0 format:[BUF_FMT_10_11_11_SSCALED]189; GFX10-PACKED-NEXT: s_endpgm190;191; GFX11-PACKED-LABEL: tbuffer_store_d16_xyzw:192; GFX11-PACKED: ; %bb.0: ; %main_body193; GFX11-PACKED-NEXT: s_clause 0x1194; GFX11-PACKED-NEXT: s_load_b64 s[6:7], s[4:5], 0x34195; GFX11-PACKED-NEXT: s_load_b128 s[0:3], s[4:5], 0x24196; GFX11-PACKED-NEXT: s_waitcnt lgkmcnt(0)197; GFX11-PACKED-NEXT: v_mov_b32_e32 v0, s6198; GFX11-PACKED-NEXT: v_mov_b32_e32 v1, s7199; GFX11-PACKED-NEXT: tbuffer_store_d16_format_xyzw v[0:1], off, s[0:3], 0 format:[BUF_FMT_10_10_10_2_SNORM]200; GFX11-PACKED-NEXT: s_endpgm201main_body:202 call void @llvm.amdgcn.raw.ptr.tbuffer.store.v4f16(<4 x half> %data, ptr addrspace(8) %rsrc, i32 0, i32 0, i32 33, i32 0)203 ret void204}205 206declare void @llvm.amdgcn.raw.ptr.tbuffer.store.f16(half, ptr addrspace(8), i32, i32, i32, i32)207declare void @llvm.amdgcn.raw.ptr.tbuffer.store.v2f16(<2 x half>, ptr addrspace(8), i32, i32, i32, i32)208declare void @llvm.amdgcn.raw.ptr.tbuffer.store.v3f16(<3 x half>, ptr addrspace(8), i32, i32, i32, i32)209declare void @llvm.amdgcn.raw.ptr.tbuffer.store.v4f16(<4 x half>, ptr addrspace(8), i32, i32, i32, i32)210;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:211; GFX11-PACKED-FAKE16: {{.*}}212; GFX11-PACKED-TRUE16: {{.*}}213