160 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=amdgcn -mcpu=tonga -show-mc-encoding | FileCheck -enable-var-scope -check-prefixes=PREGFX10-UNPACKED %s3; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx810 | FileCheck -enable-var-scope -check-prefixes=PREGFX10-PACKED %s4; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx900 | FileCheck -enable-var-scope -check-prefixes=PREGFX10-PACKED %s5; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1010 | FileCheck -enable-var-scope -check-prefixes=GFX10-PACKED %s6; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 | FileCheck -enable-var-scope -check-prefixes=GFX11-PACKED %s7; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 | FileCheck -enable-var-scope -check-prefixes=GFX11-PACKED %s8 9define amdgpu_ps half @tbuffer_load_d16_x(ptr addrspace(8) inreg %rsrc) {10; PREGFX10-UNPACKED-LABEL: tbuffer_load_d16_x:11; PREGFX10-UNPACKED: ; %bb.0: ; %main_body12; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e]13; PREGFX10-UNPACKED-NEXT: tbuffer_load_format_d16_x v0, v0, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM] idxen ; encoding: [0x00,0x20,0xb4,0xe8,0x00,0x00,0x00,0x80]14; PREGFX10-UNPACKED-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]15; PREGFX10-UNPACKED-NEXT: ; return to shader part epilog16;17; PREGFX10-PACKED-LABEL: tbuffer_load_d16_x:18; PREGFX10-PACKED: ; %bb.0: ; %main_body19; PREGFX10-PACKED-NEXT: v_mov_b32_e32 v0, 020; PREGFX10-PACKED-NEXT: tbuffer_load_format_d16_x v0, v0, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM] idxen21; PREGFX10-PACKED-NEXT: s_waitcnt vmcnt(0)22; PREGFX10-PACKED-NEXT: ; return to shader part epilog23;24; GFX10-PACKED-LABEL: tbuffer_load_d16_x:25; GFX10-PACKED: ; %bb.0: ; %main_body26; GFX10-PACKED-NEXT: v_mov_b32_e32 v0, 027; GFX10-PACKED-NEXT: tbuffer_load_format_d16_x v0, v0, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen28; GFX10-PACKED-NEXT: s_waitcnt vmcnt(0)29; GFX10-PACKED-NEXT: ; return to shader part epilog30;31; GFX11-PACKED-LABEL: tbuffer_load_d16_x:32; GFX11-PACKED: ; %bb.0: ; %main_body33; GFX11-PACKED-NEXT: v_mov_b32_e32 v0, 034; GFX11-PACKED-NEXT: tbuffer_load_d16_format_x v0, v0, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen35; GFX11-PACKED-NEXT: s_waitcnt vmcnt(0)36; GFX11-PACKED-NEXT: ; return to shader part epilog37main_body:38 %data = call half @llvm.amdgcn.struct.ptr.tbuffer.load.f16(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0, i32 22, i32 0)39 ret half %data40}41 42define amdgpu_ps half @tbuffer_load_d16_xy(ptr addrspace(8) inreg %rsrc) {43; PREGFX10-UNPACKED-LABEL: tbuffer_load_d16_xy:44; PREGFX10-UNPACKED: ; %bb.0: ; %main_body45; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e]46; PREGFX10-UNPACKED-NEXT: tbuffer_load_format_d16_xy v[0:1], v0, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM] idxen ; encoding: [0x00,0xa0,0xb4,0xe8,0x00,0x00,0x00,0x80]47; PREGFX10-UNPACKED-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]48; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v0, v1 ; encoding: [0x01,0x03,0x00,0x7e]49; PREGFX10-UNPACKED-NEXT: ; return to shader part epilog50;51; PREGFX10-PACKED-LABEL: tbuffer_load_d16_xy:52; PREGFX10-PACKED: ; %bb.0: ; %main_body53; PREGFX10-PACKED-NEXT: v_mov_b32_e32 v0, 054; PREGFX10-PACKED-NEXT: tbuffer_load_format_d16_xy v0, v0, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM] idxen55; PREGFX10-PACKED-NEXT: s_waitcnt vmcnt(0)56; PREGFX10-PACKED-NEXT: v_lshrrev_b32_e32 v0, 16, v057; PREGFX10-PACKED-NEXT: ; return to shader part epilog58;59; GFX10-PACKED-LABEL: tbuffer_load_d16_xy:60; GFX10-PACKED: ; %bb.0: ; %main_body61; GFX10-PACKED-NEXT: v_mov_b32_e32 v0, 062; GFX10-PACKED-NEXT: tbuffer_load_format_d16_xy v0, v0, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen63; GFX10-PACKED-NEXT: s_waitcnt vmcnt(0)64; GFX10-PACKED-NEXT: v_lshrrev_b32_e32 v0, 16, v065; GFX10-PACKED-NEXT: ; return to shader part epilog66;67; GFX11-PACKED-LABEL: tbuffer_load_d16_xy:68; GFX11-PACKED: ; %bb.0: ; %main_body69; GFX11-PACKED-NEXT: v_mov_b32_e32 v0, 070; GFX11-PACKED-NEXT: tbuffer_load_d16_format_xy v0, v0, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen71; GFX11-PACKED-NEXT: s_waitcnt vmcnt(0)72; GFX11-PACKED-NEXT: v_lshrrev_b32_e32 v0, 16, v073; GFX11-PACKED-NEXT: ; return to shader part epilog74main_body:75 %data = call <2 x half> @llvm.amdgcn.struct.ptr.tbuffer.load.v2f16(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0, i32 22, i32 0)76 %elt = extractelement <2 x half> %data, i32 177 ret half %elt78}79 80define amdgpu_ps half @tbuffer_load_d16_xyz(ptr addrspace(8) inreg %rsrc) {81; PREGFX10-UNPACKED-LABEL: tbuffer_load_d16_xyz:82; PREGFX10-UNPACKED: ; %bb.0: ; %main_body83; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e]84; PREGFX10-UNPACKED-NEXT: tbuffer_load_format_d16_xyz v[0:2], v0, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM] idxen ; encoding: [0x00,0x20,0xb5,0xe8,0x00,0x00,0x00,0x80]85; PREGFX10-UNPACKED-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]86; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v0, v2 ; encoding: [0x02,0x03,0x00,0x7e]87; PREGFX10-UNPACKED-NEXT: ; return to shader part epilog88;89; PREGFX10-PACKED-LABEL: tbuffer_load_d16_xyz:90; PREGFX10-PACKED: ; %bb.0: ; %main_body91; PREGFX10-PACKED-NEXT: v_mov_b32_e32 v0, 092; PREGFX10-PACKED-NEXT: tbuffer_load_format_d16_xyz v[0:1], v0, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM] idxen93; PREGFX10-PACKED-NEXT: s_waitcnt vmcnt(0)94; PREGFX10-PACKED-NEXT: v_mov_b32_e32 v0, v195; PREGFX10-PACKED-NEXT: ; return to shader part epilog96;97; GFX10-PACKED-LABEL: tbuffer_load_d16_xyz:98; GFX10-PACKED: ; %bb.0: ; %main_body99; GFX10-PACKED-NEXT: v_mov_b32_e32 v0, 0100; GFX10-PACKED-NEXT: tbuffer_load_format_d16_xyz v[0:1], v0, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen101; GFX10-PACKED-NEXT: s_waitcnt vmcnt(0)102; GFX10-PACKED-NEXT: v_mov_b32_e32 v0, v1103; GFX10-PACKED-NEXT: ; return to shader part epilog104;105; GFX11-PACKED-LABEL: tbuffer_load_d16_xyz:106; GFX11-PACKED: ; %bb.0: ; %main_body107; GFX11-PACKED-NEXT: v_mov_b32_e32 v0, 0108; GFX11-PACKED-NEXT: tbuffer_load_d16_format_xyz v[0:1], v0, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen109; GFX11-PACKED-NEXT: s_waitcnt vmcnt(0)110; GFX11-PACKED-NEXT: v_mov_b32_e32 v0, v1111; GFX11-PACKED-NEXT: ; return to shader part epilog112main_body:113 %data = call <3 x half> @llvm.amdgcn.struct.ptr.tbuffer.load.v3f16(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0, i32 22, i32 0)114 %elt = extractelement <3 x half> %data, i32 2115 ret half %elt116}117 118define amdgpu_ps half @tbuffer_load_d16_xyzw(ptr addrspace(8) inreg %rsrc) {119; PREGFX10-UNPACKED-LABEL: tbuffer_load_d16_xyzw:120; PREGFX10-UNPACKED: ; %bb.0: ; %main_body121; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e]122; PREGFX10-UNPACKED-NEXT: tbuffer_load_format_d16_xyzw v[0:3], v0, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM] idxen ; encoding: [0x00,0xa0,0xb5,0xe8,0x00,0x00,0x00,0x80]123; PREGFX10-UNPACKED-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]124; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v0, v3 ; encoding: [0x03,0x03,0x00,0x7e]125; PREGFX10-UNPACKED-NEXT: ; return to shader part epilog126;127; PREGFX10-PACKED-LABEL: tbuffer_load_d16_xyzw:128; PREGFX10-PACKED: ; %bb.0: ; %main_body129; PREGFX10-PACKED-NEXT: v_mov_b32_e32 v0, 0130; PREGFX10-PACKED-NEXT: tbuffer_load_format_d16_xyzw v[0:1], v0, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM] idxen131; PREGFX10-PACKED-NEXT: s_waitcnt vmcnt(0)132; PREGFX10-PACKED-NEXT: v_lshrrev_b32_e32 v0, 16, v1133; PREGFX10-PACKED-NEXT: ; return to shader part epilog134;135; GFX10-PACKED-LABEL: tbuffer_load_d16_xyzw:136; GFX10-PACKED: ; %bb.0: ; %main_body137; GFX10-PACKED-NEXT: v_mov_b32_e32 v0, 0138; GFX10-PACKED-NEXT: tbuffer_load_format_d16_xyzw v[0:1], v0, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen139; GFX10-PACKED-NEXT: s_waitcnt vmcnt(0)140; GFX10-PACKED-NEXT: v_lshrrev_b32_e32 v0, 16, v1141; GFX10-PACKED-NEXT: ; return to shader part epilog142;143; GFX11-PACKED-LABEL: tbuffer_load_d16_xyzw:144; GFX11-PACKED: ; %bb.0: ; %main_body145; GFX11-PACKED-NEXT: v_mov_b32_e32 v0, 0146; GFX11-PACKED-NEXT: tbuffer_load_d16_format_xyzw v[0:1], v0, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen147; GFX11-PACKED-NEXT: s_waitcnt vmcnt(0)148; GFX11-PACKED-NEXT: v_lshrrev_b32_e32 v0, 16, v1149; GFX11-PACKED-NEXT: ; return to shader part epilog150main_body:151 %data = call <4 x half> @llvm.amdgcn.struct.ptr.tbuffer.load.v4f16(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0, i32 22, i32 0)152 %elt = extractelement <4 x half> %data, i32 3153 ret half %elt154}155 156declare half @llvm.amdgcn.struct.ptr.tbuffer.load.f16(ptr addrspace(8), i32, i32, i32, i32, i32)157declare <2 x half> @llvm.amdgcn.struct.ptr.tbuffer.load.v2f16(ptr addrspace(8), i32, i32, i32, i32, i32)158declare <3 x half> @llvm.amdgcn.struct.ptr.tbuffer.load.v3f16(ptr addrspace(8), i32, i32, i32, i32, i32)159declare <4 x half> @llvm.amdgcn.struct.ptr.tbuffer.load.v4f16(ptr addrspace(8), i32, i32, i32, i32, i32)160