173 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 -amdgpu-enable-delay-alu=0 | FileCheck -enable-var-scope -check-prefixes=GFX11-PACKED %s7; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -amdgpu-enable-delay-alu=0 | FileCheck -enable-var-scope -check-prefixes=GFX11-PACKED %s8; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 -amdgpu-enable-delay-alu=0 | FileCheck -enable-var-scope -check-prefixes=GFX12-PACKED %s9; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 -amdgpu-enable-delay-alu=0 | FileCheck -enable-var-scope -check-prefixes=GFX12-PACKED %s10 11define amdgpu_ps half @tbuffer_load_d16_x(<4 x i32> inreg %rsrc) {12; PREGFX10-UNPACKED-LABEL: tbuffer_load_d16_x:13; PREGFX10-UNPACKED: ; %bb.0: ; %main_body14; PREGFX10-UNPACKED-NEXT: tbuffer_load_format_d16_x v0, off, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM] ; encoding: [0x00,0x00,0xb4,0xe8,0x00,0x00,0x00,0x80]15; PREGFX10-UNPACKED-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]16; PREGFX10-UNPACKED-NEXT: ; return to shader part epilog17;18; PREGFX10-PACKED-LABEL: tbuffer_load_d16_x:19; PREGFX10-PACKED: ; %bb.0: ; %main_body20; PREGFX10-PACKED-NEXT: tbuffer_load_format_d16_x v0, off, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM]21; 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: tbuffer_load_format_d16_x v0, off, s[0:3], 0 format:[BUF_FMT_32_FLOAT]27; GFX10-PACKED-NEXT: s_waitcnt vmcnt(0)28; GFX10-PACKED-NEXT: ; return to shader part epilog29;30; GFX11-PACKED-LABEL: tbuffer_load_d16_x:31; GFX11-PACKED: ; %bb.0: ; %main_body32; GFX11-PACKED-NEXT: tbuffer_load_d16_format_x v0, off, s[0:3], 0 format:[BUF_FMT_32_FLOAT]33; GFX11-PACKED-NEXT: s_waitcnt vmcnt(0)34; GFX11-PACKED-NEXT: ; return to shader part epilog35;36; GFX12-PACKED-LABEL: tbuffer_load_d16_x:37; GFX12-PACKED: ; %bb.0: ; %main_body38; GFX12-PACKED-NEXT: tbuffer_load_d16_format_x v0, off, s[0:3], null format:[BUF_FMT_32_FLOAT]39; GFX12-PACKED-NEXT: s_wait_loadcnt 0x040; GFX12-PACKED-NEXT: ; return to shader part epilog41main_body:42 %data = call half @llvm.amdgcn.raw.tbuffer.load.f16(<4 x i32> %rsrc, i32 0, i32 0, i32 22, i32 0)43 ret half %data44}45 46define amdgpu_ps half @tbuffer_load_d16_xy(<4 x i32> inreg %rsrc) {47; PREGFX10-UNPACKED-LABEL: tbuffer_load_d16_xy:48; PREGFX10-UNPACKED: ; %bb.0: ; %main_body49; PREGFX10-UNPACKED-NEXT: tbuffer_load_format_d16_xy v[0:1], off, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM] ; encoding: [0x00,0x80,0xb4,0xe8,0x00,0x00,0x00,0x80]50; PREGFX10-UNPACKED-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]51; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v0, v1 ; encoding: [0x01,0x03,0x00,0x7e]52; PREGFX10-UNPACKED-NEXT: ; return to shader part epilog53;54; PREGFX10-PACKED-LABEL: tbuffer_load_d16_xy:55; PREGFX10-PACKED: ; %bb.0: ; %main_body56; PREGFX10-PACKED-NEXT: tbuffer_load_format_d16_xy v0, off, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM]57; PREGFX10-PACKED-NEXT: s_waitcnt vmcnt(0)58; PREGFX10-PACKED-NEXT: v_lshrrev_b32_e32 v0, 16, v059; PREGFX10-PACKED-NEXT: ; return to shader part epilog60;61; GFX10-PACKED-LABEL: tbuffer_load_d16_xy:62; GFX10-PACKED: ; %bb.0: ; %main_body63; GFX10-PACKED-NEXT: tbuffer_load_format_d16_xy v0, off, s[0:3], 0 format:[BUF_FMT_32_FLOAT]64; GFX10-PACKED-NEXT: s_waitcnt vmcnt(0)65; GFX10-PACKED-NEXT: v_lshrrev_b32_e32 v0, 16, v066; GFX10-PACKED-NEXT: ; return to shader part epilog67;68; GFX11-PACKED-LABEL: tbuffer_load_d16_xy:69; GFX11-PACKED: ; %bb.0: ; %main_body70; GFX11-PACKED-NEXT: tbuffer_load_d16_format_xy v0, off, s[0:3], 0 format:[BUF_FMT_32_FLOAT]71; 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 epilog74;75; GFX12-PACKED-LABEL: tbuffer_load_d16_xy:76; GFX12-PACKED: ; %bb.0: ; %main_body77; GFX12-PACKED-NEXT: tbuffer_load_d16_format_xy v0, off, s[0:3], null format:[BUF_FMT_32_FLOAT]78; GFX12-PACKED-NEXT: s_wait_loadcnt 0x079; GFX12-PACKED-NEXT: v_lshrrev_b32_e32 v0, 16, v080; GFX12-PACKED-NEXT: ; return to shader part epilog81main_body:82 %data = call <2 x half> @llvm.amdgcn.raw.tbuffer.load.v2f16(<4 x i32> %rsrc, i32 0, i32 0, i32 22, i32 0)83 %elt = extractelement <2 x half> %data, i32 184 ret half %elt85}86 87define amdgpu_ps half @tbuffer_load_d16_xyz(<4 x i32> inreg %rsrc) {88; PREGFX10-UNPACKED-LABEL: tbuffer_load_d16_xyz:89; PREGFX10-UNPACKED: ; %bb.0: ; %main_body90; PREGFX10-UNPACKED-NEXT: tbuffer_load_format_d16_xyz v[0:2], off, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM] ; encoding: [0x00,0x00,0xb5,0xe8,0x00,0x00,0x00,0x80]91; PREGFX10-UNPACKED-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]92; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v0, v2 ; encoding: [0x02,0x03,0x00,0x7e]93; PREGFX10-UNPACKED-NEXT: ; return to shader part epilog94;95; PREGFX10-PACKED-LABEL: tbuffer_load_d16_xyz:96; PREGFX10-PACKED: ; %bb.0: ; %main_body97; PREGFX10-PACKED-NEXT: tbuffer_load_format_d16_xyz v[0:1], off, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM]98; PREGFX10-PACKED-NEXT: s_waitcnt vmcnt(0)99; PREGFX10-PACKED-NEXT: v_mov_b32_e32 v0, v1100; PREGFX10-PACKED-NEXT: ; return to shader part epilog101;102; GFX10-PACKED-LABEL: tbuffer_load_d16_xyz:103; GFX10-PACKED: ; %bb.0: ; %main_body104; GFX10-PACKED-NEXT: tbuffer_load_format_d16_xyz v[0:1], off, s[0:3], 0 format:[BUF_FMT_32_FLOAT]105; GFX10-PACKED-NEXT: s_waitcnt vmcnt(0)106; GFX10-PACKED-NEXT: v_mov_b32_e32 v0, v1107; GFX10-PACKED-NEXT: ; return to shader part epilog108;109; GFX11-PACKED-LABEL: tbuffer_load_d16_xyz:110; GFX11-PACKED: ; %bb.0: ; %main_body111; GFX11-PACKED-NEXT: tbuffer_load_d16_format_xyz v[0:1], off, s[0:3], 0 format:[BUF_FMT_32_FLOAT]112; GFX11-PACKED-NEXT: s_waitcnt vmcnt(0)113; GFX11-PACKED-NEXT: v_mov_b32_e32 v0, v1114; GFX11-PACKED-NEXT: ; return to shader part epilog115;116; GFX12-PACKED-LABEL: tbuffer_load_d16_xyz:117; GFX12-PACKED: ; %bb.0: ; %main_body118; GFX12-PACKED-NEXT: tbuffer_load_d16_format_xyz v[0:1], off, s[0:3], null format:[BUF_FMT_32_FLOAT]119; GFX12-PACKED-NEXT: s_wait_loadcnt 0x0120; GFX12-PACKED-NEXT: v_mov_b32_e32 v0, v1121; GFX12-PACKED-NEXT: ; return to shader part epilog122main_body:123 %data = call <3 x half> @llvm.amdgcn.raw.tbuffer.load.v3f16(<4 x i32> %rsrc, i32 0, i32 0, i32 22, i32 0)124 %elt = extractelement <3 x half> %data, i32 2125 ret half %elt126}127 128define amdgpu_ps half @tbuffer_load_d16_xyzw(<4 x i32> inreg %rsrc) {129; PREGFX10-UNPACKED-LABEL: tbuffer_load_d16_xyzw:130; PREGFX10-UNPACKED: ; %bb.0: ; %main_body131; PREGFX10-UNPACKED-NEXT: tbuffer_load_format_d16_xyzw v[0:3], off, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM] ; encoding: [0x00,0x80,0xb5,0xe8,0x00,0x00,0x00,0x80]132; PREGFX10-UNPACKED-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]133; PREGFX10-UNPACKED-NEXT: v_mov_b32_e32 v0, v3 ; encoding: [0x03,0x03,0x00,0x7e]134; PREGFX10-UNPACKED-NEXT: ; return to shader part epilog135;136; PREGFX10-PACKED-LABEL: tbuffer_load_d16_xyzw:137; PREGFX10-PACKED: ; %bb.0: ; %main_body138; PREGFX10-PACKED-NEXT: tbuffer_load_format_d16_xyzw v[0:1], off, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM]139; PREGFX10-PACKED-NEXT: s_waitcnt vmcnt(0)140; PREGFX10-PACKED-NEXT: v_lshrrev_b32_e32 v0, 16, v1141; PREGFX10-PACKED-NEXT: ; return to shader part epilog142;143; GFX10-PACKED-LABEL: tbuffer_load_d16_xyzw:144; GFX10-PACKED: ; %bb.0: ; %main_body145; GFX10-PACKED-NEXT: tbuffer_load_format_d16_xyzw v[0:1], off, s[0:3], 0 format:[BUF_FMT_32_FLOAT]146; GFX10-PACKED-NEXT: s_waitcnt vmcnt(0)147; GFX10-PACKED-NEXT: v_lshrrev_b32_e32 v0, 16, v1148; GFX10-PACKED-NEXT: ; return to shader part epilog149;150; GFX11-PACKED-LABEL: tbuffer_load_d16_xyzw:151; GFX11-PACKED: ; %bb.0: ; %main_body152; GFX11-PACKED-NEXT: tbuffer_load_d16_format_xyzw v[0:1], off, s[0:3], 0 format:[BUF_FMT_32_FLOAT]153; GFX11-PACKED-NEXT: s_waitcnt vmcnt(0)154; GFX11-PACKED-NEXT: v_lshrrev_b32_e32 v0, 16, v1155; GFX11-PACKED-NEXT: ; return to shader part epilog156;157; GFX12-PACKED-LABEL: tbuffer_load_d16_xyzw:158; GFX12-PACKED: ; %bb.0: ; %main_body159; GFX12-PACKED-NEXT: tbuffer_load_d16_format_xyzw v[0:1], off, s[0:3], null format:[BUF_FMT_32_FLOAT]160; GFX12-PACKED-NEXT: s_wait_loadcnt 0x0161; GFX12-PACKED-NEXT: v_lshrrev_b32_e32 v0, 16, v1162; GFX12-PACKED-NEXT: ; return to shader part epilog163main_body:164 %data = call <4 x half> @llvm.amdgcn.raw.tbuffer.load.v4f16(<4 x i32> %rsrc, i32 0, i32 0, i32 22, i32 0)165 %elt = extractelement <4 x half> %data, i32 3166 ret half %elt167}168 169declare half @llvm.amdgcn.raw.tbuffer.load.f16(<4 x i32>, i32, i32, i32, i32)170declare <2 x half> @llvm.amdgcn.raw.tbuffer.load.v2f16(<4 x i32>, i32, i32, i32, i32)171declare <3 x half> @llvm.amdgcn.raw.tbuffer.load.v3f16(<4 x i32>, i32, i32, i32, i32)172declare <4 x half> @llvm.amdgcn.raw.tbuffer.load.v4f16(<4 x i32>, i32, i32, i32, i32)173