brintos

brintos / llvm-project-archived public Read only

0
0
Text · 27.8 KiB · a6afb75 Raw
560 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2;RUN: llc < %s -mtriple=amdgcn -mcpu=verde | FileCheck -check-prefixes=PREGFX10 %s3;RUN: llc < %s -mtriple=amdgcn -mcpu=tonga | FileCheck -check-prefixes=PREGFX10 %s4;RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1010 | FileCheck -check-prefixes=GFX10 %s5;RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1100 | FileCheck -check-prefixes=GFX11 %s6;RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1200 | FileCheck -check-prefixes=GFX12,GFX12-SDAG %s7;RUN: llc < %s -global-isel -new-reg-bank-select -mtriple=amdgcn -mcpu=gfx1200 | FileCheck -check-prefixes=GFX12,GFX12-GISEL %s8 9define amdgpu_vs {<4 x float>, <4 x float>, <4 x float>, <4 x float>} @tbuffer_load(<4 x i32> inreg) {10; PREGFX10-LABEL: tbuffer_load:11; PREGFX10:       ; %bb.0: ; %main_body12; PREGFX10-NEXT:    v_mov_b32_e32 v12, 013; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v12, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32_32,BUF_NUM_FORMAT_UINT] idxen14; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[4:7], v12, s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen glc15; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[8:11], v12, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM] idxen slc16; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[12:15], v12, s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_SNORM] idxen glc17; PREGFX10-NEXT:    s_waitcnt vmcnt(0)18; PREGFX10-NEXT:    ; return to shader part epilog19;20; GFX10-LABEL: tbuffer_load:21; GFX10:       ; %bb.0: ; %main_body22; GFX10-NEXT:    v_mov_b32_e32 v16, 023; GFX10-NEXT:    s_clause 0x324; GFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v16, s[0:3], 0 format:78 idxen25; GFX10-NEXT:    tbuffer_load_format_xyzw v[4:7], v16, s[0:3], 0 format:[BUF_FMT_32_32_SINT] idxen glc26; GFX10-NEXT:    tbuffer_load_format_xyzw v[8:11], v16, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen slc27; GFX10-NEXT:    tbuffer_load_format_xyzw v[12:15], v16, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen glc dlc28; GFX10-NEXT:    s_waitcnt vmcnt(0)29; GFX10-NEXT:    ; return to shader part epilog30;31; GFX11-LABEL: tbuffer_load:32; GFX11:       ; %bb.0: ; %main_body33; GFX11-NEXT:    v_mov_b32_e32 v12, 034; GFX11-NEXT:    s_clause 0x335; GFX11-NEXT:    tbuffer_load_format_xyzw v[0:3], v12, s[0:3], 0 format:78 idxen36; GFX11-NEXT:    tbuffer_load_format_xyzw v[4:7], v12, s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen glc37; GFX11-NEXT:    tbuffer_load_format_xyzw v[8:11], v12, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen slc38; GFX11-NEXT:    tbuffer_load_format_xyzw v[12:15], v12, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen glc dlc39; GFX11-NEXT:    s_waitcnt vmcnt(0)40; GFX11-NEXT:    ; return to shader part epilog41;42; GFX12-LABEL: tbuffer_load:43; GFX12:       ; %bb.0: ; %main_body44; GFX12-NEXT:    v_mov_b32_e32 v12, 045; GFX12-NEXT:    s_clause 0x346; GFX12-NEXT:    tbuffer_load_format_xyzw v[0:3], v12, s[0:3], null format:78 idxen47; GFX12-NEXT:    tbuffer_load_format_xyzw v[4:7], v12, s[0:3], null format:[BUF_FMT_32_32_32_32_FLOAT] idxen th:TH_LOAD_NT48; GFX12-NEXT:    tbuffer_load_format_xyzw v[8:11], v12, s[0:3], null format:[BUF_FMT_32_FLOAT] idxen th:TH_LOAD_HT49; GFX12-NEXT:    tbuffer_load_format_xyzw v[12:15], v12, s[0:3], null format:[BUF_FMT_32_FLOAT] idxen th:TH_LOAD_RT_NT50; GFX12-NEXT:    s_wait_loadcnt 0x051; GFX12-NEXT:    ; return to shader part epilog52main_body:53    %vdata     = call <4 x i32> @llvm.amdgcn.struct.tbuffer.load.v4i32(<4 x i32> %0, i32 0, i32 0, i32 0, i32 78, i32 0)54    %vdata_glc = call <4 x i32> @llvm.amdgcn.struct.tbuffer.load.v4i32(<4 x i32> %0, i32 0, i32 0, i32 0, i32 63, i32 1)55    %vdata_slc = call <4 x i32> @llvm.amdgcn.struct.tbuffer.load.v4i32(<4 x i32> %0, i32 0, i32 0, i32 0, i32 22, i32 2)56    %vdata_f32 = call <4 x float> @llvm.amdgcn.struct.tbuffer.load.v4f32(<4 x i32> %0, i32 0, i32 0, i32 0, i32 22, i32 5)57    %vdata.f     = bitcast <4 x i32> %vdata to <4 x float>58    %vdata_glc.f = bitcast <4 x i32> %vdata_glc to <4 x float>59    %vdata_slc.f = bitcast <4 x i32> %vdata_slc to <4 x float>60    %r0 = insertvalue {<4 x float>, <4 x float>, <4 x float>, <4 x float>} poison, <4 x float> %vdata.f, 061    %r1 = insertvalue {<4 x float>, <4 x float>, <4 x float>, <4 x float>} %r0, <4 x float> %vdata_glc.f, 162    %r2 = insertvalue {<4 x float>, <4 x float>, <4 x float>, <4 x float>} %r1, <4 x float> %vdata_slc.f, 263    %r3 = insertvalue {<4 x float>, <4 x float>, <4 x float>, <4 x float>} %r2, <4 x float> %vdata_f32, 364    ret {<4 x float>, <4 x float>, <4 x float>, <4 x float>} %r365}66 67define amdgpu_vs <4 x float> @tbuffer_load_immoffs(<4 x i32> inreg) {68; PREGFX10-LABEL: tbuffer_load_immoffs:69; PREGFX10:       ; %bb.0: ; %main_body70; PREGFX10-NEXT:    v_mov_b32_e32 v0, 071; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32_32,BUF_NUM_FORMAT_UINT] idxen offset:4272; PREGFX10-NEXT:    s_waitcnt vmcnt(0)73; PREGFX10-NEXT:    ; return to shader part epilog74;75; GFX10-LABEL: tbuffer_load_immoffs:76; GFX10:       ; %bb.0: ; %main_body77; GFX10-NEXT:    v_mov_b32_e32 v0, 078; GFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:78 idxen offset:4279; GFX10-NEXT:    s_waitcnt vmcnt(0)80; GFX10-NEXT:    ; return to shader part epilog81;82; GFX11-LABEL: tbuffer_load_immoffs:83; GFX11:       ; %bb.0: ; %main_body84; GFX11-NEXT:    v_mov_b32_e32 v0, 085; GFX11-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:78 idxen offset:4286; GFX11-NEXT:    s_waitcnt vmcnt(0)87; GFX11-NEXT:    ; return to shader part epilog88;89; GFX12-LABEL: tbuffer_load_immoffs:90; GFX12:       ; %bb.0: ; %main_body91; GFX12-NEXT:    v_mov_b32_e32 v0, 092; GFX12-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], null format:78 idxen offset:4293; GFX12-NEXT:    s_wait_loadcnt 0x094; GFX12-NEXT:    ; return to shader part epilog95main_body:96    %vdata   = call <4 x i32> @llvm.amdgcn.struct.tbuffer.load.v4i32(<4 x i32> %0, i32 0, i32 42, i32 0, i32 78, i32 0)97    %vdata.f = bitcast <4 x i32> %vdata to <4 x float>98    ret <4 x float> %vdata.f99}100 101define amdgpu_vs {<4 x float>, <4 x float>, <4 x float>} @tbuffer_load_immoffs_large(<4 x i32> inreg, i32 inreg %soffs) {102; PREGFX10-LABEL: tbuffer_load_immoffs_large:103; PREGFX10:       ; %bb.0:104; PREGFX10-NEXT:    v_mov_b32_e32 v8, 0105; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v8, s[0:3], 61 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_USCALED] idxen offset:4095106; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[4:7], v8, s[0:3], s4 format:[BUF_DATA_FORMAT_32_32_32_32,BUF_NUM_FORMAT_SSCALED] idxen offset:73107; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[8:11], v8, s[0:3], s4 format:[BUF_DATA_FORMAT_32_32_32,BUF_NUM_FORMAT_UINT] idxen offset:1108; PREGFX10-NEXT:    s_waitcnt vmcnt(0)109; PREGFX10-NEXT:    ; return to shader part epilog110;111; GFX10-LABEL: tbuffer_load_immoffs_large:112; GFX10:       ; %bb.0:113; GFX10-NEXT:    v_mov_b32_e32 v12, 0114; GFX10-NEXT:    s_clause 0x2115; GFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v12, s[0:3], 61 format:[BUF_FMT_10_10_10_2_SSCALED] idxen offset:4095116; GFX10-NEXT:    tbuffer_load_format_xyzw v[4:7], v12, s[0:3], s4 format:[BUF_FMT_32_32_UINT] idxen offset:73117; GFX10-NEXT:    tbuffer_load_format_xyzw v[8:11], v12, s[0:3], s4 format:[BUF_FMT_32_32_32_32_FLOAT] idxen offset:1118; GFX10-NEXT:    s_waitcnt vmcnt(0)119; GFX10-NEXT:    ; return to shader part epilog120;121; GFX11-LABEL: tbuffer_load_immoffs_large:122; GFX11:       ; %bb.0:123; GFX11-NEXT:    v_mov_b32_e32 v8, 0124; GFX11-NEXT:    s_clause 0x2125; GFX11-NEXT:    tbuffer_load_format_xyzw v[0:3], v8, s[0:3], 61 format:[BUF_FMT_8_8_8_8_SINT] idxen offset:4095126; GFX11-NEXT:    tbuffer_load_format_xyzw v[4:7], v8, s[0:3], s4 format:[BUF_FMT_32_32_32_32_SINT] idxen offset:73127; GFX11-NEXT:    tbuffer_load_format_xyzw v[8:11], v8, s[0:3], s4 format:77 idxen offset:1128; GFX11-NEXT:    s_waitcnt vmcnt(0)129; GFX11-NEXT:    ; return to shader part epilog130;131; GFX12-LABEL: tbuffer_load_immoffs_large:132; GFX12:       ; %bb.0:133; GFX12-NEXT:    v_mov_b32_e32 v8, 0134; GFX12-NEXT:    s_mov_b32 s5, 61135; GFX12-NEXT:    s_clause 0x2136; GFX12-NEXT:    tbuffer_load_format_xyzw v[0:3], v8, s[0:3], s5 format:[BUF_FMT_8_8_8_8_SINT] idxen offset:4095137; GFX12-NEXT:    tbuffer_load_format_xyzw v[4:7], v8, s[0:3], s4 format:[BUF_FMT_32_32_32_32_SINT] idxen offset:73138; GFX12-NEXT:    tbuffer_load_format_xyzw v[8:11], v8, s[0:3], s4 format:77 idxen offset:1139; GFX12-NEXT:    s_wait_loadcnt 0x0140; GFX12-NEXT:    ; return to shader part epilog141    %vdata     = call <4 x i32> @llvm.amdgcn.struct.tbuffer.load.v4i32(<4 x i32> %0, i32 0, i32 4095, i32 61, i32 47, i32 0)142    %vdata_glc = call <4 x i32> @llvm.amdgcn.struct.tbuffer.load.v4i32(<4 x i32> %0, i32 0, i32 73, i32 %soffs, i32 62, i32 0)143    %vdata_slc = call <4 x i32> @llvm.amdgcn.struct.tbuffer.load.v4i32(<4 x i32> %0, i32 0, i32 1, i32 %soffs, i32 77, i32 0)144    %vdata.f     = bitcast <4 x i32> %vdata to <4 x float>145    %vdata_glc.f = bitcast <4 x i32> %vdata_glc to <4 x float>146    %vdata_slc.f = bitcast <4 x i32> %vdata_slc to <4 x float>147    %r0 = insertvalue {<4 x float>, <4 x float>, <4 x float>} poison, <4 x float> %vdata.f, 0148    %r1 = insertvalue {<4 x float>, <4 x float>, <4 x float>} %r0, <4 x float> %vdata_glc.f, 1149    %r2 = insertvalue {<4 x float>, <4 x float>, <4 x float>} %r1, <4 x float> %vdata_slc.f, 2150    ret {<4 x float>, <4 x float>, <4 x float>} %r2151}152 153define amdgpu_vs <4 x float> @tbuffer_load_idx(<4 x i32> inreg, i32 %vindex) {154; PREGFX10-LABEL: tbuffer_load_idx:155; PREGFX10:       ; %bb.0: ; %main_body156; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32_32,BUF_NUM_FORMAT_UINT] idxen157; PREGFX10-NEXT:    s_waitcnt vmcnt(0)158; PREGFX10-NEXT:    ; return to shader part epilog159;160; GFX10-LABEL: tbuffer_load_idx:161; GFX10:       ; %bb.0: ; %main_body162; GFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:78 idxen163; GFX10-NEXT:    s_waitcnt vmcnt(0)164; GFX10-NEXT:    ; return to shader part epilog165;166; GFX11-LABEL: tbuffer_load_idx:167; GFX11:       ; %bb.0: ; %main_body168; GFX11-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:78 idxen169; GFX11-NEXT:    s_waitcnt vmcnt(0)170; GFX11-NEXT:    ; return to shader part epilog171;172; GFX12-LABEL: tbuffer_load_idx:173; GFX12:       ; %bb.0: ; %main_body174; GFX12-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], null format:78 idxen175; GFX12-NEXT:    s_wait_loadcnt 0x0176; GFX12-NEXT:    ; return to shader part epilog177main_body:178    %vdata   = call <4 x i32> @llvm.amdgcn.struct.tbuffer.load.v4i32(<4 x i32> %0, i32 %vindex, i32 0, i32 0, i32 78, i32 0)179    %vdata.f = bitcast <4 x i32> %vdata to <4 x float>180    ret <4 x float> %vdata.f181}182 183define amdgpu_vs <4 x float> @tbuffer_load_ofs(<4 x i32> inreg, i32 %voffs) {184; PREGFX10-LABEL: tbuffer_load_ofs:185; PREGFX10:       ; %bb.0: ; %main_body186; PREGFX10-NEXT:    s_mov_b32 s4, 0187; PREGFX10-NEXT:    v_mov_b32_e32 v1, v0188; PREGFX10-NEXT:    v_mov_b32_e32 v0, s4189; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32_32,BUF_NUM_FORMAT_UINT] idxen offen190; PREGFX10-NEXT:    s_waitcnt vmcnt(0)191; PREGFX10-NEXT:    ; return to shader part epilog192;193; GFX10-LABEL: tbuffer_load_ofs:194; GFX10:       ; %bb.0: ; %main_body195; GFX10-NEXT:    s_mov_b32 s4, 0196; GFX10-NEXT:    v_mov_b32_e32 v1, v0197; GFX10-NEXT:    v_mov_b32_e32 v0, s4198; GFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:78 idxen offen199; GFX10-NEXT:    s_waitcnt vmcnt(0)200; GFX10-NEXT:    ; return to shader part epilog201;202; GFX11-LABEL: tbuffer_load_ofs:203; GFX11:       ; %bb.0: ; %main_body204; GFX11-NEXT:    s_mov_b32 s4, 0205; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)206; GFX11-NEXT:    v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v0, s4207; GFX11-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:78 idxen offen208; GFX11-NEXT:    s_waitcnt vmcnt(0)209; GFX11-NEXT:    ; return to shader part epilog210;211; GFX12-LABEL: tbuffer_load_ofs:212; GFX12:       ; %bb.0: ; %main_body213; GFX12-NEXT:    v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v0, 0214; GFX12-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], null format:78 idxen offen215; GFX12-NEXT:    s_wait_loadcnt 0x0216; GFX12-NEXT:    ; return to shader part epilog217main_body:218    %vdata   = call <4 x i32> @llvm.amdgcn.struct.tbuffer.load.v4i32(<4 x i32> %0, i32 0, i32 %voffs, i32 0, i32 78, i32 0)219    %vdata.f = bitcast <4 x i32> %vdata to <4 x float>220    ret <4 x float> %vdata.f221}222 223define amdgpu_vs <4 x float> @tbuffer_load_ofs_imm(<4 x i32> inreg, i32 %voffs) {224; PREGFX10-LABEL: tbuffer_load_ofs_imm:225; PREGFX10:       ; %bb.0: ; %main_body226; PREGFX10-NEXT:    s_mov_b32 s4, 0227; PREGFX10-NEXT:    v_mov_b32_e32 v1, v0228; PREGFX10-NEXT:    v_mov_b32_e32 v0, s4229; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32_32,BUF_NUM_FORMAT_UINT] idxen offen offset:52230; PREGFX10-NEXT:    s_waitcnt vmcnt(0)231; PREGFX10-NEXT:    ; return to shader part epilog232;233; GFX10-LABEL: tbuffer_load_ofs_imm:234; GFX10:       ; %bb.0: ; %main_body235; GFX10-NEXT:    s_mov_b32 s4, 0236; GFX10-NEXT:    v_mov_b32_e32 v1, v0237; GFX10-NEXT:    v_mov_b32_e32 v0, s4238; GFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:78 idxen offen offset:52239; GFX10-NEXT:    s_waitcnt vmcnt(0)240; GFX10-NEXT:    ; return to shader part epilog241;242; GFX11-LABEL: tbuffer_load_ofs_imm:243; GFX11:       ; %bb.0: ; %main_body244; GFX11-NEXT:    s_mov_b32 s4, 0245; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)246; GFX11-NEXT:    v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v0, s4247; GFX11-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:78 idxen offen offset:52248; GFX11-NEXT:    s_waitcnt vmcnt(0)249; GFX11-NEXT:    ; return to shader part epilog250;251; GFX12-LABEL: tbuffer_load_ofs_imm:252; GFX12:       ; %bb.0: ; %main_body253; GFX12-NEXT:    v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v0, 0254; GFX12-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], null format:78 idxen offen offset:52255; GFX12-NEXT:    s_wait_loadcnt 0x0256; GFX12-NEXT:    ; return to shader part epilog257main_body:258    %ofs = add i32 %voffs, 52259    %vdata   = call <4 x i32> @llvm.amdgcn.struct.tbuffer.load.v4i32(<4 x i32> %0, i32 0, i32 %ofs, i32 0, i32 78, i32 0)260    %vdata.f = bitcast <4 x i32> %vdata to <4 x float>261    ret <4 x float> %vdata.f262}263 264define amdgpu_vs <4 x float> @tbuffer_load_both(<4 x i32> inreg, i32 %vindex, i32 %voffs) {265; PREGFX10-LABEL: tbuffer_load_both:266; PREGFX10:       ; %bb.0: ; %main_body267; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32_32,BUF_NUM_FORMAT_UINT] idxen offen268; PREGFX10-NEXT:    s_waitcnt vmcnt(0)269; PREGFX10-NEXT:    ; return to shader part epilog270;271; GFX10-LABEL: tbuffer_load_both:272; GFX10:       ; %bb.0: ; %main_body273; GFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:78 idxen offen274; GFX10-NEXT:    s_waitcnt vmcnt(0)275; GFX10-NEXT:    ; return to shader part epilog276;277; GFX11-LABEL: tbuffer_load_both:278; GFX11:       ; %bb.0: ; %main_body279; GFX11-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:78 idxen offen280; GFX11-NEXT:    s_waitcnt vmcnt(0)281; GFX11-NEXT:    ; return to shader part epilog282;283; GFX12-LABEL: tbuffer_load_both:284; GFX12:       ; %bb.0: ; %main_body285; GFX12-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], null format:78 idxen offen286; GFX12-NEXT:    s_wait_loadcnt 0x0287; GFX12-NEXT:    ; return to shader part epilog288main_body:289    %vdata   = call <4 x i32> @llvm.amdgcn.struct.tbuffer.load.v4i32(<4 x i32> %0, i32 %vindex, i32 %voffs, i32 0, i32 78, i32 0)290    %vdata.f = bitcast <4 x i32> %vdata to <4 x float>291    ret <4 x float> %vdata.f292}293 294define amdgpu_vs <2 x float> @buffer_load_xy(<4 x i32> inreg %rsrc) {295; PREGFX10-LABEL: buffer_load_xy:296; PREGFX10:       ; %bb.0:297; PREGFX10-NEXT:    v_mov_b32_e32 v0, 0298; PREGFX10-NEXT:    tbuffer_load_format_xy v[0:1], v0, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32,BUF_NUM_FORMAT_UINT] idxen299; PREGFX10-NEXT:    s_waitcnt vmcnt(0)300; PREGFX10-NEXT:    ; return to shader part epilog301;302; GFX10-LABEL: buffer_load_xy:303; GFX10:       ; %bb.0:304; GFX10-NEXT:    v_mov_b32_e32 v0, 0305; GFX10-NEXT:    tbuffer_load_format_xy v[0:1], v0, s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen306; GFX10-NEXT:    s_waitcnt vmcnt(0)307; GFX10-NEXT:    ; return to shader part epilog308;309; GFX11-LABEL: buffer_load_xy:310; GFX11:       ; %bb.0:311; GFX11-NEXT:    v_mov_b32_e32 v0, 0312; GFX11-NEXT:    tbuffer_load_format_xy v[0:1], v0, s[0:3], 0 format:77 idxen313; GFX11-NEXT:    s_waitcnt vmcnt(0)314; GFX11-NEXT:    ; return to shader part epilog315;316; GFX12-LABEL: buffer_load_xy:317; GFX12:       ; %bb.0:318; GFX12-NEXT:    v_mov_b32_e32 v0, 0319; GFX12-NEXT:    tbuffer_load_format_xy v[0:1], v0, s[0:3], null format:77 idxen320; GFX12-NEXT:    s_wait_loadcnt 0x0321; GFX12-NEXT:    ; return to shader part epilog322    %vdata = call <2 x i32> @llvm.amdgcn.struct.tbuffer.load.v2i32(<4 x i32> %rsrc, i32 0, i32 0, i32 0, i32 77, i32 0)323    %vdata.f = bitcast <2 x i32> %vdata to <2 x float>324    ret <2 x float> %vdata.f325}326 327define amdgpu_vs float @buffer_load_x(<4 x i32> inreg %rsrc) {328; PREGFX10-LABEL: buffer_load_x:329; PREGFX10:       ; %bb.0:330; PREGFX10-NEXT:    v_mov_b32_e32 v0, 0331; PREGFX10-NEXT:    tbuffer_load_format_x v0, v0, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32,BUF_NUM_FORMAT_UINT] idxen332; PREGFX10-NEXT:    s_waitcnt vmcnt(0)333; PREGFX10-NEXT:    ; return to shader part epilog334;335; GFX10-LABEL: buffer_load_x:336; GFX10:       ; %bb.0:337; GFX10-NEXT:    v_mov_b32_e32 v0, 0338; GFX10-NEXT:    tbuffer_load_format_x v0, v0, s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen339; GFX10-NEXT:    s_waitcnt vmcnt(0)340; GFX10-NEXT:    ; return to shader part epilog341;342; GFX11-LABEL: buffer_load_x:343; GFX11:       ; %bb.0:344; GFX11-NEXT:    v_mov_b32_e32 v0, 0345; GFX11-NEXT:    tbuffer_load_format_x v0, v0, s[0:3], 0 format:77 idxen346; GFX11-NEXT:    s_waitcnt vmcnt(0)347; GFX11-NEXT:    ; return to shader part epilog348;349; GFX12-LABEL: buffer_load_x:350; GFX12:       ; %bb.0:351; GFX12-NEXT:    v_mov_b32_e32 v0, 0352; GFX12-NEXT:    tbuffer_load_format_x v0, v0, s[0:3], null format:77 idxen353; GFX12-NEXT:    s_wait_loadcnt 0x0354; GFX12-NEXT:    ; return to shader part epilog355    %vdata = call i32 @llvm.amdgcn.struct.tbuffer.load.i32(<4 x i32> %rsrc, i32 0, i32 0, i32 0, i32 77, i32 0)356    %vdata.f = bitcast i32 %vdata to float357    ret float %vdata.f358}359 360define amdgpu_ps <4 x float> @buffer_load_voffset_large_12bit(<4 x i32> inreg) {361; PREGFX10-LABEL: buffer_load_voffset_large_12bit:362; PREGFX10:       ; %bb.0: ; %main_body363; PREGFX10-NEXT:    v_mov_b32_e32 v0, 0364; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offset:4092365; PREGFX10-NEXT:    s_waitcnt vmcnt(0)366; PREGFX10-NEXT:    ; return to shader part epilog367;368; GFX10-LABEL: buffer_load_voffset_large_12bit:369; GFX10:       ; %bb.0: ; %main_body370; GFX10-NEXT:    v_mov_b32_e32 v0, 0371; GFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:[BUF_FMT_32_32_SINT] idxen offset:4092372; GFX10-NEXT:    s_waitcnt vmcnt(0)373; GFX10-NEXT:    ; return to shader part epilog374;375; GFX11-LABEL: buffer_load_voffset_large_12bit:376; GFX11:       ; %bb.0: ; %main_body377; GFX11-NEXT:    v_mov_b32_e32 v0, 0378; GFX11-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen offset:4092379; GFX11-NEXT:    s_waitcnt vmcnt(0)380; GFX11-NEXT:    ; return to shader part epilog381;382; GFX12-LABEL: buffer_load_voffset_large_12bit:383; GFX12:       ; %bb.0: ; %main_body384; GFX12-NEXT:    v_mov_b32_e32 v0, 0385; GFX12-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], null format:[BUF_FMT_32_32_32_32_FLOAT] idxen offset:4092386; GFX12-NEXT:    s_wait_loadcnt 0x0387; GFX12-NEXT:    ; return to shader part epilog388main_body:389  %data = call <4 x float> @llvm.amdgcn.struct.tbuffer.load.v4f32(<4 x i32> %0, i32 0, i32 4092, i32 0, i32 63, i32 0)390  ret <4 x float> %data391}392 393define amdgpu_ps <4 x float> @tbuffer_load_voffset_large_13bit(<4 x i32> inreg) {394; PREGFX10-LABEL: tbuffer_load_voffset_large_13bit:395; PREGFX10:       ; %bb.0: ; %main_body396; PREGFX10-NEXT:    s_mov_b32 s4, 0397; PREGFX10-NEXT:    v_mov_b32_e32 v1, 0x1000398; PREGFX10-NEXT:    v_mov_b32_e32 v0, s4399; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offen offset:4092400; PREGFX10-NEXT:    s_waitcnt vmcnt(0)401; PREGFX10-NEXT:    ; return to shader part epilog402;403; GFX10-LABEL: tbuffer_load_voffset_large_13bit:404; GFX10:       ; %bb.0: ; %main_body405; GFX10-NEXT:    s_mov_b32 s4, 0406; GFX10-NEXT:    v_mov_b32_e32 v1, 0x1000407; GFX10-NEXT:    v_mov_b32_e32 v0, s4408; GFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_FMT_32_32_SINT] idxen offen offset:4092409; GFX10-NEXT:    s_waitcnt vmcnt(0)410; GFX10-NEXT:    ; return to shader part epilog411;412; GFX11-LABEL: tbuffer_load_voffset_large_13bit:413; GFX11:       ; %bb.0: ; %main_body414; GFX11-NEXT:    s_mov_b32 s4, 0415; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)416; GFX11-NEXT:    v_dual_mov_b32 v1, 0x1000 :: v_dual_mov_b32 v0, s4417; GFX11-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen offen offset:4092418; GFX11-NEXT:    s_waitcnt vmcnt(0)419; GFX11-NEXT:    ; return to shader part epilog420;421; GFX12-LABEL: tbuffer_load_voffset_large_13bit:422; GFX12:       ; %bb.0: ; %main_body423; GFX12-NEXT:    v_mov_b32_e32 v0, 0424; GFX12-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], null format:[BUF_FMT_32_32_32_32_FLOAT] idxen offset:8188425; GFX12-NEXT:    s_wait_loadcnt 0x0426; GFX12-NEXT:    ; return to shader part epilog427main_body:428  %data = call <4 x float> @llvm.amdgcn.struct.tbuffer.load.v4f32(<4 x i32> %0, i32 0, i32 8188, i32 0, i32 63, i32 0)429  ret <4 x float> %data430}431 432define amdgpu_ps <4 x float> @tbuffer_load_voffset_large_16bit(<4 x i32> inreg) {433; PREGFX10-LABEL: tbuffer_load_voffset_large_16bit:434; PREGFX10:       ; %bb.0: ; %main_body435; PREGFX10-NEXT:    s_mov_b32 s4, 0436; PREGFX10-NEXT:    v_mov_b32_e32 v1, 0xf000437; PREGFX10-NEXT:    v_mov_b32_e32 v0, s4438; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offen offset:4092439; PREGFX10-NEXT:    s_waitcnt vmcnt(0)440; PREGFX10-NEXT:    ; return to shader part epilog441;442; GFX10-LABEL: tbuffer_load_voffset_large_16bit:443; GFX10:       ; %bb.0: ; %main_body444; GFX10-NEXT:    s_mov_b32 s4, 0445; GFX10-NEXT:    v_mov_b32_e32 v1, 0xf000446; GFX10-NEXT:    v_mov_b32_e32 v0, s4447; GFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_FMT_32_32_SINT] idxen offen offset:4092448; GFX10-NEXT:    s_waitcnt vmcnt(0)449; GFX10-NEXT:    ; return to shader part epilog450;451; GFX11-LABEL: tbuffer_load_voffset_large_16bit:452; GFX11:       ; %bb.0: ; %main_body453; GFX11-NEXT:    s_mov_b32 s4, 0454; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)455; GFX11-NEXT:    v_dual_mov_b32 v1, 0xf000 :: v_dual_mov_b32 v0, s4456; GFX11-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen offen offset:4092457; GFX11-NEXT:    s_waitcnt vmcnt(0)458; GFX11-NEXT:    ; return to shader part epilog459;460; GFX12-LABEL: tbuffer_load_voffset_large_16bit:461; GFX12:       ; %bb.0: ; %main_body462; GFX12-NEXT:    v_mov_b32_e32 v0, 0463; GFX12-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], null format:[BUF_FMT_32_32_32_32_FLOAT] idxen offset:65532464; GFX12-NEXT:    s_wait_loadcnt 0x0465; GFX12-NEXT:    ; return to shader part epilog466main_body:467  %data = call <4 x float> @llvm.amdgcn.struct.tbuffer.load.v4f32(<4 x i32> %0, i32 0, i32 65532, i32 0, i32 63, i32 0)468  ret <4 x float> %data469}470 471define amdgpu_ps <4 x float> @tbuffer_load_voffset_large_23bit(<4 x i32> inreg) {472; PREGFX10-LABEL: tbuffer_load_voffset_large_23bit:473; PREGFX10:       ; %bb.0: ; %main_body474; PREGFX10-NEXT:    s_mov_b32 s4, 0475; PREGFX10-NEXT:    v_mov_b32_e32 v1, 0x7ff000476; PREGFX10-NEXT:    v_mov_b32_e32 v0, s4477; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offen offset:4092478; PREGFX10-NEXT:    s_waitcnt vmcnt(0)479; PREGFX10-NEXT:    ; return to shader part epilog480;481; GFX10-LABEL: tbuffer_load_voffset_large_23bit:482; GFX10:       ; %bb.0: ; %main_body483; GFX10-NEXT:    s_mov_b32 s4, 0484; GFX10-NEXT:    v_mov_b32_e32 v1, 0x7ff000485; GFX10-NEXT:    v_mov_b32_e32 v0, s4486; GFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_FMT_32_32_SINT] idxen offen offset:4092487; GFX10-NEXT:    s_waitcnt vmcnt(0)488; GFX10-NEXT:    ; return to shader part epilog489;490; GFX11-LABEL: tbuffer_load_voffset_large_23bit:491; GFX11:       ; %bb.0: ; %main_body492; GFX11-NEXT:    s_mov_b32 s4, 0493; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)494; GFX11-NEXT:    v_dual_mov_b32 v1, 0x7ff000 :: v_dual_mov_b32 v0, s4495; GFX11-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen offen offset:4092496; GFX11-NEXT:    s_waitcnt vmcnt(0)497; GFX11-NEXT:    ; return to shader part epilog498;499; GFX12-LABEL: tbuffer_load_voffset_large_23bit:500; GFX12:       ; %bb.0: ; %main_body501; GFX12-NEXT:    v_mov_b32_e32 v0, 0502; GFX12-NEXT:    tbuffer_load_format_xyzw v[0:3], v0, s[0:3], null format:[BUF_FMT_32_32_32_32_FLOAT] idxen offset:8388604503; GFX12-NEXT:    s_wait_loadcnt 0x0504; GFX12-NEXT:    ; return to shader part epilog505main_body:506  %data = call <4 x float> @llvm.amdgcn.struct.tbuffer.load.v4f32(<4 x i32> %0, i32 0, i32 8388604, i32 0, i32 63, i32 0)507  ret <4 x float> %data508}509 510define amdgpu_ps <4 x float> @tbuffer_load_voffset_large_24bit(<4 x i32> inreg) {511; PREGFX10-LABEL: tbuffer_load_voffset_large_24bit:512; PREGFX10:       ; %bb.0: ; %main_body513; PREGFX10-NEXT:    s_mov_b32 s4, 0514; PREGFX10-NEXT:    v_mov_b32_e32 v1, 0xfff000515; PREGFX10-NEXT:    v_mov_b32_e32 v0, s4516; PREGFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offen offset:4092517; PREGFX10-NEXT:    s_waitcnt vmcnt(0)518; PREGFX10-NEXT:    ; return to shader part epilog519;520; GFX10-LABEL: tbuffer_load_voffset_large_24bit:521; GFX10:       ; %bb.0: ; %main_body522; GFX10-NEXT:    s_mov_b32 s4, 0523; GFX10-NEXT:    v_mov_b32_e32 v1, 0xfff000524; GFX10-NEXT:    v_mov_b32_e32 v0, s4525; GFX10-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_FMT_32_32_SINT] idxen offen offset:4092526; GFX10-NEXT:    s_waitcnt vmcnt(0)527; GFX10-NEXT:    ; return to shader part epilog528;529; GFX11-LABEL: tbuffer_load_voffset_large_24bit:530; GFX11:       ; %bb.0: ; %main_body531; GFX11-NEXT:    s_mov_b32 s4, 0532; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)533; GFX11-NEXT:    v_dual_mov_b32 v1, 0xfff000 :: v_dual_mov_b32 v0, s4534; GFX11-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen offen offset:4092535; GFX11-NEXT:    s_waitcnt vmcnt(0)536; GFX11-NEXT:    ; return to shader part epilog537;538; GFX12-SDAG-LABEL: tbuffer_load_voffset_large_24bit:539; GFX12-SDAG:       ; %bb.0: ; %main_body540; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, 0x800000 :: v_dual_mov_b32 v0, 0541; GFX12-SDAG-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], null format:[BUF_FMT_32_32_32_32_FLOAT] idxen offen offset:8388604542; GFX12-SDAG-NEXT:    s_wait_loadcnt 0x0543; GFX12-SDAG-NEXT:    ; return to shader part epilog544;545; GFX12-GISEL-LABEL: tbuffer_load_voffset_large_24bit:546; GFX12-GISEL:       ; %bb.0: ; %main_body547; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x800000548; GFX12-GISEL-NEXT:    tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], null format:[BUF_FMT_32_32_32_32_FLOAT] idxen offen offset:8388604549; GFX12-GISEL-NEXT:    s_wait_loadcnt 0x0550; GFX12-GISEL-NEXT:    ; return to shader part epilog551main_body:552  %data = call <4 x float> @llvm.amdgcn.struct.tbuffer.load.v4f32(<4 x i32> %0, i32 0, i32 16777212, i32 0, i32 63, i32 0)553  ret <4 x float> %data554}555 556declare i32 @llvm.amdgcn.struct.tbuffer.load.i32(<4 x i32>, i32, i32, i32, i32, i32)557declare <2 x i32> @llvm.amdgcn.struct.tbuffer.load.v2i32(<4 x i32>, i32, i32, i32, i32, i32)558declare <4 x i32> @llvm.amdgcn.struct.tbuffer.load.v4i32(<4 x i32>, i32, i32, i32, i32, i32)559declare <4 x float> @llvm.amdgcn.struct.tbuffer.load.v4f32(<4 x i32>, i32, i32, i32, i32, i32)560