447 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 7define amdgpu_vs {<4 x float>, <4 x float>, <4 x float>, <4 x float>} @tbuffer_load(ptr addrspace(8) inreg) {8; PREGFX10-LABEL: tbuffer_load:9; PREGFX10: ; %bb.0: ; %main_body10; PREGFX10-NEXT: v_mov_b32_e32 v12, 011; 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] idxen12; 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 glc13; 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 slc14; 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 glc15; PREGFX10-NEXT: s_waitcnt vmcnt(0)16; PREGFX10-NEXT: ; return to shader part epilog17;18; GFX10-LABEL: tbuffer_load:19; GFX10: ; %bb.0: ; %main_body20; GFX10-NEXT: v_mov_b32_e32 v16, 021; GFX10-NEXT: s_clause 0x322; GFX10-NEXT: tbuffer_load_format_xyzw v[0:3], v16, s[0:3], 0 format:78 idxen23; GFX10-NEXT: tbuffer_load_format_xyzw v[4:7], v16, s[0:3], 0 format:[BUF_FMT_32_32_SINT] idxen glc24; GFX10-NEXT: tbuffer_load_format_xyzw v[8:11], v16, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen slc25; GFX10-NEXT: tbuffer_load_format_xyzw v[12:15], v16, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen glc dlc26; GFX10-NEXT: s_waitcnt vmcnt(0)27; GFX10-NEXT: ; return to shader part epilog28;29; GFX11-LABEL: tbuffer_load:30; GFX11: ; %bb.0: ; %main_body31; GFX11-NEXT: v_mov_b32_e32 v12, 032; GFX11-NEXT: s_clause 0x333; GFX11-NEXT: tbuffer_load_format_xyzw v[0:3], v12, s[0:3], 0 format:78 idxen34; GFX11-NEXT: tbuffer_load_format_xyzw v[4:7], v12, s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen glc35; GFX11-NEXT: tbuffer_load_format_xyzw v[8:11], v12, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen slc36; GFX11-NEXT: tbuffer_load_format_xyzw v[12:15], v12, s[0:3], 0 format:[BUF_FMT_32_FLOAT] idxen glc dlc37; GFX11-NEXT: s_waitcnt vmcnt(0)38; GFX11-NEXT: ; return to shader part epilog39main_body:40 %vdata = call <4 x i32> @llvm.amdgcn.struct.ptr.tbuffer.load.v4i32(ptr addrspace(8) %0, i32 0, i32 0, i32 0, i32 78, i32 0)41 %vdata_glc = call <4 x i32> @llvm.amdgcn.struct.ptr.tbuffer.load.v4i32(ptr addrspace(8) %0, i32 0, i32 0, i32 0, i32 63, i32 1)42 %vdata_slc = call <4 x i32> @llvm.amdgcn.struct.ptr.tbuffer.load.v4i32(ptr addrspace(8) %0, i32 0, i32 0, i32 0, i32 22, i32 2)43 %vdata_f32 = call <4 x float> @llvm.amdgcn.struct.ptr.tbuffer.load.v4f32(ptr addrspace(8) %0, i32 0, i32 0, i32 0, i32 22, i32 5)44 %vdata.f = bitcast <4 x i32> %vdata to <4 x float>45 %vdata_glc.f = bitcast <4 x i32> %vdata_glc to <4 x float>46 %vdata_slc.f = bitcast <4 x i32> %vdata_slc to <4 x float>47 %r0 = insertvalue {<4 x float>, <4 x float>, <4 x float>, <4 x float>} poison, <4 x float> %vdata.f, 048 %r1 = insertvalue {<4 x float>, <4 x float>, <4 x float>, <4 x float>} %r0, <4 x float> %vdata_glc.f, 149 %r2 = insertvalue {<4 x float>, <4 x float>, <4 x float>, <4 x float>} %r1, <4 x float> %vdata_slc.f, 250 %r3 = insertvalue {<4 x float>, <4 x float>, <4 x float>, <4 x float>} %r2, <4 x float> %vdata_f32, 351 ret {<4 x float>, <4 x float>, <4 x float>, <4 x float>} %r352}53 54define amdgpu_vs <4 x float> @tbuffer_load_immoffs(ptr addrspace(8) inreg) {55; PREGFX10-LABEL: tbuffer_load_immoffs:56; PREGFX10: ; %bb.0: ; %main_body57; PREGFX10-NEXT: v_mov_b32_e32 v0, 058; 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:4259; PREGFX10-NEXT: s_waitcnt vmcnt(0)60; PREGFX10-NEXT: ; return to shader part epilog61;62; GFX10-LABEL: tbuffer_load_immoffs:63; GFX10: ; %bb.0: ; %main_body64; GFX10-NEXT: v_mov_b32_e32 v0, 065; GFX10-NEXT: tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:78 idxen offset:4266; GFX10-NEXT: s_waitcnt vmcnt(0)67; GFX10-NEXT: ; return to shader part epilog68;69; GFX11-LABEL: tbuffer_load_immoffs:70; GFX11: ; %bb.0: ; %main_body71; GFX11-NEXT: v_mov_b32_e32 v0, 072; GFX11-NEXT: tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:78 idxen offset:4273; GFX11-NEXT: s_waitcnt vmcnt(0)74; GFX11-NEXT: ; return to shader part epilog75main_body:76 %vdata = call <4 x i32> @llvm.amdgcn.struct.ptr.tbuffer.load.v4i32(ptr addrspace(8) %0, i32 0, i32 42, i32 0, i32 78, i32 0)77 %vdata.f = bitcast <4 x i32> %vdata to <4 x float>78 ret <4 x float> %vdata.f79}80 81define amdgpu_vs {<4 x float>, <4 x float>, <4 x float>} @tbuffer_load_immoffs_large(ptr addrspace(8) inreg, i32 inreg %soffs) {82; PREGFX10-LABEL: tbuffer_load_immoffs_large:83; PREGFX10: ; %bb.0:84; PREGFX10-NEXT: v_mov_b32_e32 v8, 085; 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:409586; 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:7387; 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:188; PREGFX10-NEXT: s_waitcnt vmcnt(0)89; PREGFX10-NEXT: ; return to shader part epilog90;91; GFX10-LABEL: tbuffer_load_immoffs_large:92; GFX10: ; %bb.0:93; GFX10-NEXT: v_mov_b32_e32 v12, 094; GFX10-NEXT: s_clause 0x295; GFX10-NEXT: tbuffer_load_format_xyzw v[0:3], v12, s[0:3], 61 format:[BUF_FMT_10_10_10_2_SSCALED] idxen offset:409596; GFX10-NEXT: tbuffer_load_format_xyzw v[4:7], v12, s[0:3], s4 format:[BUF_FMT_32_32_UINT] idxen offset:7397; GFX10-NEXT: tbuffer_load_format_xyzw v[8:11], v12, s[0:3], s4 format:[BUF_FMT_32_32_32_32_FLOAT] idxen offset:198; GFX10-NEXT: s_waitcnt vmcnt(0)99; GFX10-NEXT: ; return to shader part epilog100;101; GFX11-LABEL: tbuffer_load_immoffs_large:102; GFX11: ; %bb.0:103; GFX11-NEXT: v_mov_b32_e32 v8, 0104; GFX11-NEXT: s_clause 0x2105; GFX11-NEXT: tbuffer_load_format_xyzw v[0:3], v8, s[0:3], 61 format:[BUF_FMT_8_8_8_8_SINT] idxen offset:4095106; GFX11-NEXT: tbuffer_load_format_xyzw v[4:7], v8, s[0:3], s4 format:[BUF_FMT_32_32_32_32_SINT] idxen offset:73107; GFX11-NEXT: tbuffer_load_format_xyzw v[8:11], v8, s[0:3], s4 format:77 idxen offset:1108; GFX11-NEXT: s_waitcnt vmcnt(0)109; GFX11-NEXT: ; return to shader part epilog110 %vdata = call <4 x i32> @llvm.amdgcn.struct.ptr.tbuffer.load.v4i32(ptr addrspace(8) %0, i32 0, i32 4095, i32 61, i32 47, i32 0)111 %vdata_glc = call <4 x i32> @llvm.amdgcn.struct.ptr.tbuffer.load.v4i32(ptr addrspace(8) %0, i32 0, i32 73, i32 %soffs, i32 62, i32 0)112 %vdata_slc = call <4 x i32> @llvm.amdgcn.struct.ptr.tbuffer.load.v4i32(ptr addrspace(8) %0, i32 0, i32 1, i32 %soffs, i32 77, i32 0)113 %vdata.f = bitcast <4 x i32> %vdata to <4 x float>114 %vdata_glc.f = bitcast <4 x i32> %vdata_glc to <4 x float>115 %vdata_slc.f = bitcast <4 x i32> %vdata_slc to <4 x float>116 %r0 = insertvalue {<4 x float>, <4 x float>, <4 x float>} poison, <4 x float> %vdata.f, 0117 %r1 = insertvalue {<4 x float>, <4 x float>, <4 x float>} %r0, <4 x float> %vdata_glc.f, 1118 %r2 = insertvalue {<4 x float>, <4 x float>, <4 x float>} %r1, <4 x float> %vdata_slc.f, 2119 ret {<4 x float>, <4 x float>, <4 x float>} %r2120}121 122define amdgpu_vs <4 x float> @tbuffer_load_idx(ptr addrspace(8) inreg, i32 %vindex) {123; PREGFX10-LABEL: tbuffer_load_idx:124; PREGFX10: ; %bb.0: ; %main_body125; 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] idxen126; PREGFX10-NEXT: s_waitcnt vmcnt(0)127; PREGFX10-NEXT: ; return to shader part epilog128;129; GFX10-LABEL: tbuffer_load_idx:130; GFX10: ; %bb.0: ; %main_body131; GFX10-NEXT: tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:78 idxen132; GFX10-NEXT: s_waitcnt vmcnt(0)133; GFX10-NEXT: ; return to shader part epilog134;135; GFX11-LABEL: tbuffer_load_idx:136; GFX11: ; %bb.0: ; %main_body137; GFX11-NEXT: tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:78 idxen138; GFX11-NEXT: s_waitcnt vmcnt(0)139; GFX11-NEXT: ; return to shader part epilog140main_body:141 %vdata = call <4 x i32> @llvm.amdgcn.struct.ptr.tbuffer.load.v4i32(ptr addrspace(8) %0, i32 %vindex, i32 0, i32 0, i32 78, i32 0)142 %vdata.f = bitcast <4 x i32> %vdata to <4 x float>143 ret <4 x float> %vdata.f144}145 146define amdgpu_vs <4 x float> @tbuffer_load_ofs(ptr addrspace(8) inreg, i32 %voffs) {147; PREGFX10-LABEL: tbuffer_load_ofs:148; PREGFX10: ; %bb.0: ; %main_body149; PREGFX10-NEXT: s_mov_b32 s4, 0150; PREGFX10-NEXT: v_mov_b32_e32 v1, v0151; PREGFX10-NEXT: v_mov_b32_e32 v0, s4152; 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 offen153; PREGFX10-NEXT: s_waitcnt vmcnt(0)154; PREGFX10-NEXT: ; return to shader part epilog155;156; GFX10-LABEL: tbuffer_load_ofs:157; GFX10: ; %bb.0: ; %main_body158; GFX10-NEXT: s_mov_b32 s4, 0159; GFX10-NEXT: v_mov_b32_e32 v1, v0160; GFX10-NEXT: v_mov_b32_e32 v0, s4161; GFX10-NEXT: tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:78 idxen offen162; GFX10-NEXT: s_waitcnt vmcnt(0)163; GFX10-NEXT: ; return to shader part epilog164;165; GFX11-LABEL: tbuffer_load_ofs:166; GFX11: ; %bb.0: ; %main_body167; GFX11-NEXT: s_mov_b32 s4, 0168; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)169; GFX11-NEXT: v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v0, s4170; GFX11-NEXT: tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:78 idxen offen171; GFX11-NEXT: s_waitcnt vmcnt(0)172; GFX11-NEXT: ; return to shader part epilog173main_body:174 %vdata = call <4 x i32> @llvm.amdgcn.struct.ptr.tbuffer.load.v4i32(ptr addrspace(8) %0, i32 0, i32 %voffs, i32 0, i32 78, i32 0)175 %vdata.f = bitcast <4 x i32> %vdata to <4 x float>176 ret <4 x float> %vdata.f177}178 179define amdgpu_vs <4 x float> @tbuffer_load_ofs_imm(ptr addrspace(8) inreg, i32 %voffs) {180; PREGFX10-LABEL: tbuffer_load_ofs_imm:181; PREGFX10: ; %bb.0: ; %main_body182; PREGFX10-NEXT: s_mov_b32 s4, 0183; PREGFX10-NEXT: v_mov_b32_e32 v1, v0184; PREGFX10-NEXT: v_mov_b32_e32 v0, s4185; 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:52186; PREGFX10-NEXT: s_waitcnt vmcnt(0)187; PREGFX10-NEXT: ; return to shader part epilog188;189; GFX10-LABEL: tbuffer_load_ofs_imm:190; GFX10: ; %bb.0: ; %main_body191; GFX10-NEXT: s_mov_b32 s4, 0192; GFX10-NEXT: v_mov_b32_e32 v1, v0193; GFX10-NEXT: v_mov_b32_e32 v0, s4194; GFX10-NEXT: tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:78 idxen offen offset:52195; GFX10-NEXT: s_waitcnt vmcnt(0)196; GFX10-NEXT: ; return to shader part epilog197;198; GFX11-LABEL: tbuffer_load_ofs_imm:199; GFX11: ; %bb.0: ; %main_body200; GFX11-NEXT: s_mov_b32 s4, 0201; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)202; GFX11-NEXT: v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v0, s4203; GFX11-NEXT: tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:78 idxen offen offset:52204; GFX11-NEXT: s_waitcnt vmcnt(0)205; GFX11-NEXT: ; return to shader part epilog206main_body:207 %ofs = add i32 %voffs, 52208 %vdata = call <4 x i32> @llvm.amdgcn.struct.ptr.tbuffer.load.v4i32(ptr addrspace(8) %0, i32 0, i32 %ofs, i32 0, i32 78, i32 0)209 %vdata.f = bitcast <4 x i32> %vdata to <4 x float>210 ret <4 x float> %vdata.f211}212 213define amdgpu_vs <4 x float> @tbuffer_load_both(ptr addrspace(8) inreg, i32 %vindex, i32 %voffs) {214; PREGFX10-LABEL: tbuffer_load_both:215; PREGFX10: ; %bb.0: ; %main_body216; 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 offen217; PREGFX10-NEXT: s_waitcnt vmcnt(0)218; PREGFX10-NEXT: ; return to shader part epilog219;220; GFX10-LABEL: tbuffer_load_both:221; GFX10: ; %bb.0: ; %main_body222; GFX10-NEXT: tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:78 idxen offen223; GFX10-NEXT: s_waitcnt vmcnt(0)224; GFX10-NEXT: ; return to shader part epilog225;226; GFX11-LABEL: tbuffer_load_both:227; GFX11: ; %bb.0: ; %main_body228; GFX11-NEXT: tbuffer_load_format_xyzw v[0:3], v[0:1], s[0:3], 0 format:78 idxen offen229; GFX11-NEXT: s_waitcnt vmcnt(0)230; GFX11-NEXT: ; return to shader part epilog231main_body:232 %vdata = call <4 x i32> @llvm.amdgcn.struct.ptr.tbuffer.load.v4i32(ptr addrspace(8) %0, i32 %vindex, i32 %voffs, i32 0, i32 78, i32 0)233 %vdata.f = bitcast <4 x i32> %vdata to <4 x float>234 ret <4 x float> %vdata.f235}236 237define amdgpu_vs <2 x float> @buffer_load_xy(ptr addrspace(8) inreg %rsrc) {238; PREGFX10-LABEL: buffer_load_xy:239; PREGFX10: ; %bb.0:240; PREGFX10-NEXT: v_mov_b32_e32 v0, 0241; 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] idxen242; PREGFX10-NEXT: s_waitcnt vmcnt(0)243; PREGFX10-NEXT: ; return to shader part epilog244;245; GFX10-LABEL: buffer_load_xy:246; GFX10: ; %bb.0:247; GFX10-NEXT: v_mov_b32_e32 v0, 0248; GFX10-NEXT: tbuffer_load_format_xy v[0:1], v0, s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen249; GFX10-NEXT: s_waitcnt vmcnt(0)250; GFX10-NEXT: ; return to shader part epilog251;252; GFX11-LABEL: buffer_load_xy:253; GFX11: ; %bb.0:254; GFX11-NEXT: v_mov_b32_e32 v0, 0255; GFX11-NEXT: tbuffer_load_format_xy v[0:1], v0, s[0:3], 0 format:77 idxen256; GFX11-NEXT: s_waitcnt vmcnt(0)257; GFX11-NEXT: ; return to shader part epilog258 %vdata = call <2 x i32> @llvm.amdgcn.struct.ptr.tbuffer.load.v2i32(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0, i32 77, i32 0)259 %vdata.f = bitcast <2 x i32> %vdata to <2 x float>260 ret <2 x float> %vdata.f261}262 263define amdgpu_vs float @buffer_load_x(ptr addrspace(8) inreg %rsrc) {264; PREGFX10-LABEL: buffer_load_x:265; PREGFX10: ; %bb.0:266; PREGFX10-NEXT: v_mov_b32_e32 v0, 0267; PREGFX10-NEXT: tbuffer_load_format_x v0, v0, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32,BUF_NUM_FORMAT_UINT] idxen268; PREGFX10-NEXT: s_waitcnt vmcnt(0)269; PREGFX10-NEXT: ; return to shader part epilog270;271; GFX10-LABEL: buffer_load_x:272; GFX10: ; %bb.0:273; GFX10-NEXT: v_mov_b32_e32 v0, 0274; GFX10-NEXT: tbuffer_load_format_x v0, v0, s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen275; GFX10-NEXT: s_waitcnt vmcnt(0)276; GFX10-NEXT: ; return to shader part epilog277;278; GFX11-LABEL: buffer_load_x:279; GFX11: ; %bb.0:280; GFX11-NEXT: v_mov_b32_e32 v0, 0281; GFX11-NEXT: tbuffer_load_format_x v0, v0, s[0:3], 0 format:77 idxen282; GFX11-NEXT: s_waitcnt vmcnt(0)283; GFX11-NEXT: ; return to shader part epilog284 %vdata = call i32 @llvm.amdgcn.struct.ptr.tbuffer.load.i32(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0, i32 77, i32 0)285 %vdata.f = bitcast i32 %vdata to float286 ret float %vdata.f287}288 289define amdgpu_ps <4 x float> @buffer_load_voffset_large_12bit(ptr addrspace(8) inreg) {290; PREGFX10-LABEL: buffer_load_voffset_large_12bit:291; PREGFX10: ; %bb.0: ; %main_body292; PREGFX10-NEXT: v_mov_b32_e32 v0, 0293; 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:4092294; PREGFX10-NEXT: s_waitcnt vmcnt(0)295; PREGFX10-NEXT: ; return to shader part epilog296;297; GFX10-LABEL: buffer_load_voffset_large_12bit:298; GFX10: ; %bb.0: ; %main_body299; GFX10-NEXT: v_mov_b32_e32 v0, 0300; GFX10-NEXT: tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:[BUF_FMT_32_32_SINT] idxen offset:4092301; GFX10-NEXT: s_waitcnt vmcnt(0)302; GFX10-NEXT: ; return to shader part epilog303;304; GFX11-LABEL: buffer_load_voffset_large_12bit:305; GFX11: ; %bb.0: ; %main_body306; GFX11-NEXT: v_mov_b32_e32 v0, 0307; GFX11-NEXT: tbuffer_load_format_xyzw v[0:3], v0, s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen offset:4092308; GFX11-NEXT: s_waitcnt vmcnt(0)309; GFX11-NEXT: ; return to shader part epilog310main_body:311 %data = call <4 x float> @llvm.amdgcn.struct.ptr.tbuffer.load.v4f32(ptr addrspace(8) %0, i32 0, i32 4092, i32 0, i32 63, i32 0)312 ret <4 x float> %data313}314 315define amdgpu_ps <4 x float> @tbuffer_load_voffset_large_13bit(ptr addrspace(8) inreg) {316; PREGFX10-LABEL: tbuffer_load_voffset_large_13bit:317; PREGFX10: ; %bb.0: ; %main_body318; PREGFX10-NEXT: s_mov_b32 s4, 0319; PREGFX10-NEXT: v_mov_b32_e32 v1, 0x1000320; PREGFX10-NEXT: v_mov_b32_e32 v0, s4321; 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:4092322; PREGFX10-NEXT: s_waitcnt vmcnt(0)323; PREGFX10-NEXT: ; return to shader part epilog324;325; GFX10-LABEL: tbuffer_load_voffset_large_13bit:326; GFX10: ; %bb.0: ; %main_body327; GFX10-NEXT: s_mov_b32 s4, 0328; GFX10-NEXT: v_mov_b32_e32 v1, 0x1000329; GFX10-NEXT: v_mov_b32_e32 v0, s4330; 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:4092331; GFX10-NEXT: s_waitcnt vmcnt(0)332; GFX10-NEXT: ; return to shader part epilog333;334; GFX11-LABEL: tbuffer_load_voffset_large_13bit:335; GFX11: ; %bb.0: ; %main_body336; GFX11-NEXT: s_mov_b32 s4, 0337; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)338; GFX11-NEXT: v_dual_mov_b32 v1, 0x1000 :: v_dual_mov_b32 v0, s4339; 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:4092340; GFX11-NEXT: s_waitcnt vmcnt(0)341; GFX11-NEXT: ; return to shader part epilog342main_body:343 %data = call <4 x float> @llvm.amdgcn.struct.ptr.tbuffer.load.v4f32(ptr addrspace(8) %0, i32 0, i32 8188, i32 0, i32 63, i32 0)344 ret <4 x float> %data345}346 347define amdgpu_ps <4 x float> @tbuffer_load_voffset_large_16bit(ptr addrspace(8) inreg) {348; PREGFX10-LABEL: tbuffer_load_voffset_large_16bit:349; PREGFX10: ; %bb.0: ; %main_body350; PREGFX10-NEXT: s_mov_b32 s4, 0351; PREGFX10-NEXT: v_mov_b32_e32 v1, 0xf000352; PREGFX10-NEXT: v_mov_b32_e32 v0, s4353; 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:4092354; PREGFX10-NEXT: s_waitcnt vmcnt(0)355; PREGFX10-NEXT: ; return to shader part epilog356;357; GFX10-LABEL: tbuffer_load_voffset_large_16bit:358; GFX10: ; %bb.0: ; %main_body359; GFX10-NEXT: s_mov_b32 s4, 0360; GFX10-NEXT: v_mov_b32_e32 v1, 0xf000361; GFX10-NEXT: v_mov_b32_e32 v0, s4362; 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:4092363; GFX10-NEXT: s_waitcnt vmcnt(0)364; GFX10-NEXT: ; return to shader part epilog365;366; GFX11-LABEL: tbuffer_load_voffset_large_16bit:367; GFX11: ; %bb.0: ; %main_body368; GFX11-NEXT: s_mov_b32 s4, 0369; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)370; GFX11-NEXT: v_dual_mov_b32 v1, 0xf000 :: v_dual_mov_b32 v0, s4371; 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:4092372; GFX11-NEXT: s_waitcnt vmcnt(0)373; GFX11-NEXT: ; return to shader part epilog374main_body:375 %data = call <4 x float> @llvm.amdgcn.struct.ptr.tbuffer.load.v4f32(ptr addrspace(8) %0, i32 0, i32 65532, i32 0, i32 63, i32 0)376 ret <4 x float> %data377}378 379define amdgpu_ps <4 x float> @tbuffer_load_voffset_large_23bit(ptr addrspace(8) inreg) {380; PREGFX10-LABEL: tbuffer_load_voffset_large_23bit:381; PREGFX10: ; %bb.0: ; %main_body382; PREGFX10-NEXT: s_mov_b32 s4, 0383; PREGFX10-NEXT: v_mov_b32_e32 v1, 0x7ff000384; PREGFX10-NEXT: v_mov_b32_e32 v0, s4385; 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:4092386; PREGFX10-NEXT: s_waitcnt vmcnt(0)387; PREGFX10-NEXT: ; return to shader part epilog388;389; GFX10-LABEL: tbuffer_load_voffset_large_23bit:390; GFX10: ; %bb.0: ; %main_body391; GFX10-NEXT: s_mov_b32 s4, 0392; GFX10-NEXT: v_mov_b32_e32 v1, 0x7ff000393; GFX10-NEXT: v_mov_b32_e32 v0, s4394; 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:4092395; GFX10-NEXT: s_waitcnt vmcnt(0)396; GFX10-NEXT: ; return to shader part epilog397;398; GFX11-LABEL: tbuffer_load_voffset_large_23bit:399; GFX11: ; %bb.0: ; %main_body400; GFX11-NEXT: s_mov_b32 s4, 0401; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)402; GFX11-NEXT: v_dual_mov_b32 v1, 0x7ff000 :: v_dual_mov_b32 v0, s4403; 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:4092404; GFX11-NEXT: s_waitcnt vmcnt(0)405; GFX11-NEXT: ; return to shader part epilog406main_body:407 %data = call <4 x float> @llvm.amdgcn.struct.ptr.tbuffer.load.v4f32(ptr addrspace(8) %0, i32 0, i32 8388604, i32 0, i32 63, i32 0)408 ret <4 x float> %data409}410 411define amdgpu_ps <4 x float> @tbuffer_load_voffset_large_24bit(ptr addrspace(8) inreg) {412; PREGFX10-LABEL: tbuffer_load_voffset_large_24bit:413; PREGFX10: ; %bb.0: ; %main_body414; PREGFX10-NEXT: s_mov_b32 s4, 0415; PREGFX10-NEXT: v_mov_b32_e32 v1, 0xfff000416; PREGFX10-NEXT: v_mov_b32_e32 v0, s4417; 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:4092418; PREGFX10-NEXT: s_waitcnt vmcnt(0)419; PREGFX10-NEXT: ; return to shader part epilog420;421; GFX10-LABEL: tbuffer_load_voffset_large_24bit:422; GFX10: ; %bb.0: ; %main_body423; GFX10-NEXT: s_mov_b32 s4, 0424; GFX10-NEXT: v_mov_b32_e32 v1, 0xfff000425; GFX10-NEXT: v_mov_b32_e32 v0, s4426; 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:4092427; GFX10-NEXT: s_waitcnt vmcnt(0)428; GFX10-NEXT: ; return to shader part epilog429;430; GFX11-LABEL: tbuffer_load_voffset_large_24bit:431; GFX11: ; %bb.0: ; %main_body432; GFX11-NEXT: s_mov_b32 s4, 0433; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)434; GFX11-NEXT: v_dual_mov_b32 v1, 0xfff000 :: v_dual_mov_b32 v0, s4435; 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:4092436; GFX11-NEXT: s_waitcnt vmcnt(0)437; GFX11-NEXT: ; return to shader part epilog438main_body:439 %data = call <4 x float> @llvm.amdgcn.struct.ptr.tbuffer.load.v4f32(ptr addrspace(8) %0, i32 0, i32 16777212, i32 0, i32 63, i32 0)440 ret <4 x float> %data441}442 443declare i32 @llvm.amdgcn.struct.ptr.tbuffer.load.i32(ptr addrspace(8), i32, i32, i32, i32, i32)444declare <2 x i32> @llvm.amdgcn.struct.ptr.tbuffer.load.v2i32(ptr addrspace(8), i32, i32, i32, i32, i32)445declare <4 x i32> @llvm.amdgcn.struct.ptr.tbuffer.load.v4i32(ptr addrspace(8), i32, i32, i32, i32, i32)446declare <4 x float> @llvm.amdgcn.struct.ptr.tbuffer.load.v4f32(ptr addrspace(8), i32, i32, i32, i32, i32)447