486 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=VERDE %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_ps void @tbuffer_store(ptr addrspace(8) inreg, <4 x float>, <4 x float>, <4 x float>) {8; VERDE-LABEL: tbuffer_store:9; VERDE: ; %bb.0: ; %main_body10; VERDE-NEXT: v_mov_b32_e32 v12, 011; VERDE-NEXT: tbuffer_store_format_xyzw v[0:3], v12, s[0:3], 0 format:[BUF_DATA_FORMAT_16_16_16_16,BUF_NUM_FORMAT_USCALED] idxen12; VERDE-NEXT: tbuffer_store_format_xyzw v[4:7], v12, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32,BUF_NUM_FORMAT_SSCALED] idxen glc13; VERDE-NEXT: tbuffer_store_format_xyzw v[8:11], v12, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32_32,BUF_NUM_FORMAT_UINT] idxen slc14; VERDE-NEXT: tbuffer_store_format_xyzw v[8:11], v12, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32_32,BUF_NUM_FORMAT_UINT] idxen glc15; VERDE-NEXT: s_endpgm16;17; PREGFX10-LABEL: tbuffer_store:18; PREGFX10: ; %bb.0: ; %main_body19; PREGFX10-NEXT: v_mov_b32_e32 v12, 020; PREGFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v12, s[0:3], 0 format:[BUF_DATA_FORMAT_16_16_16_16,BUF_NUM_FORMAT_USCALED] idxen21; PREGFX10-NEXT: tbuffer_store_format_xyzw v[4:7], v12, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32,BUF_NUM_FORMAT_SSCALED] idxen glc22; PREGFX10-NEXT: tbuffer_store_format_xyzw v[8:11], v12, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32_32,BUF_NUM_FORMAT_UINT] idxen slc23; PREGFX10-NEXT: tbuffer_store_format_xyzw v[8:11], v12, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32_32,BUF_NUM_FORMAT_UINT] idxen glc24; PREGFX10-NEXT: s_endpgm25;26; GFX10-LABEL: tbuffer_store:27; GFX10: ; %bb.0: ; %main_body28; GFX10-NEXT: v_mov_b32_e32 v12, 029; GFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v12, s[0:3], 0 format:[BUF_FMT_10_10_10_2_UNORM] idxen30; GFX10-NEXT: tbuffer_store_format_xyzw v[4:7], v12, s[0:3], 0 format:[BUF_FMT_8_8_8_8_SINT] idxen glc31; GFX10-NEXT: tbuffer_store_format_xyzw v[8:11], v12, s[0:3], 0 format:78 idxen slc32; GFX10-NEXT: tbuffer_store_format_xyzw v[8:11], v12, s[0:3], 0 format:78 idxen glc dlc33; GFX10-NEXT: s_endpgm34;35; GFX11-LABEL: tbuffer_store:36; GFX11: ; %bb.0: ; %main_body37; GFX11-NEXT: v_mov_b32_e32 v12, 038; GFX11-NEXT: s_clause 0x339; GFX11-NEXT: tbuffer_store_format_xyzw v[0:3], v12, s[0:3], 0 format:[BUF_FMT_8_8_8_8_USCALED] idxen40; GFX11-NEXT: tbuffer_store_format_xyzw v[4:7], v12, s[0:3], 0 format:[BUF_FMT_32_32_32_32_UINT] idxen glc41; GFX11-NEXT: tbuffer_store_format_xyzw v[8:11], v12, s[0:3], 0 format:78 idxen slc42; GFX11-NEXT: tbuffer_store_format_xyzw v[8:11], v12, s[0:3], 0 format:78 idxen glc dlc43; GFX11-NEXT: s_endpgm44main_body:45 %in1 = bitcast <4 x float> %1 to <4 x i32>46 %in2 = bitcast <4 x float> %2 to <4 x i32>47 %in3 = bitcast <4 x float> %3 to <4 x i32>48 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4i32(<4 x i32> %in1, ptr addrspace(8) %0, i32 0, i32 0, i32 0, i32 44, i32 0)49 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4i32(<4 x i32> %in2, ptr addrspace(8) %0, i32 0, i32 0, i32 0, i32 61, i32 1)50 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4i32(<4 x i32> %in3, ptr addrspace(8) %0, i32 0, i32 0, i32 0, i32 78, i32 2)51 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4f32(<4 x float> %3, ptr addrspace(8) %0, i32 0, i32 0, i32 0, i32 78, i32 5)52 ret void53}54 55define amdgpu_ps void @tbuffer_store_immoffs(ptr addrspace(8) inreg, <4 x float>) {56; VERDE-LABEL: tbuffer_store_immoffs:57; VERDE: ; %bb.0: ; %main_body58; VERDE-NEXT: v_mov_b32_e32 v4, 059; VERDE-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:[BUF_DATA_FORMAT_16_16,BUF_NUM_FORMAT_FLOAT] idxen offset:4260; VERDE-NEXT: s_endpgm61;62; PREGFX10-LABEL: tbuffer_store_immoffs:63; PREGFX10: ; %bb.0: ; %main_body64; PREGFX10-NEXT: v_mov_b32_e32 v4, 065; PREGFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:[BUF_DATA_FORMAT_16_16,BUF_NUM_FORMAT_FLOAT] idxen offset:4266; PREGFX10-NEXT: s_endpgm67;68; GFX10-LABEL: tbuffer_store_immoffs:69; GFX10: ; %bb.0: ; %main_body70; GFX10-NEXT: v_mov_b32_e32 v4, 071; GFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:117 idxen offset:4272; GFX10-NEXT: s_endpgm73;74; GFX11-LABEL: tbuffer_store_immoffs:75; GFX11: ; %bb.0: ; %main_body76; GFX11-NEXT: v_mov_b32_e32 v4, 077; GFX11-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:117 idxen offset:4278; GFX11-NEXT: s_endpgm79main_body:80 %in1 = bitcast <4 x float> %1 to <4 x i32>81 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4i32(<4 x i32> %in1, ptr addrspace(8) %0, i32 0, i32 42, i32 0, i32 117, i32 0)82 ret void83}84 85define amdgpu_ps void @tbuffer_store_scalar_and_imm_offs(ptr addrspace(8) inreg, <4 x float> %vdata, i32 inreg %soffset) {86; VERDE-LABEL: tbuffer_store_scalar_and_imm_offs:87; VERDE: ; %bb.0: ; %main_body88; VERDE-NEXT: v_mov_b32_e32 v4, 089; VERDE-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], s4 format:[BUF_DATA_FORMAT_16_16,BUF_NUM_FORMAT_FLOAT] idxen offset:4290; VERDE-NEXT: s_endpgm91;92; PREGFX10-LABEL: tbuffer_store_scalar_and_imm_offs:93; PREGFX10: ; %bb.0: ; %main_body94; PREGFX10-NEXT: v_mov_b32_e32 v4, 095; PREGFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], s4 format:[BUF_DATA_FORMAT_16_16,BUF_NUM_FORMAT_FLOAT] idxen offset:4296; PREGFX10-NEXT: s_endpgm97;98; GFX10-LABEL: tbuffer_store_scalar_and_imm_offs:99; GFX10: ; %bb.0: ; %main_body100; GFX10-NEXT: v_mov_b32_e32 v4, 0101; GFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], s4 format:117 idxen offset:42102; GFX10-NEXT: s_endpgm103;104; GFX11-LABEL: tbuffer_store_scalar_and_imm_offs:105; GFX11: ; %bb.0: ; %main_body106; GFX11-NEXT: v_mov_b32_e32 v4, 0107; GFX11-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], s4 format:117 idxen offset:42108; GFX11-NEXT: s_endpgm109main_body:110 %in1 = bitcast <4 x float> %vdata to <4 x i32>111 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4i32(<4 x i32> %in1, ptr addrspace(8) %0, i32 0, i32 42, i32 %soffset, i32 117, i32 0)112 ret void113}114 115define amdgpu_ps void @buffer_store_idx(ptr addrspace(8) inreg, <4 x float> %vdata, i32 %vindex) {116; VERDE-LABEL: buffer_store_idx:117; VERDE: ; %bb.0: ; %main_body118; VERDE-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_USCALED] idxen119; VERDE-NEXT: s_endpgm120;121; PREGFX10-LABEL: buffer_store_idx:122; PREGFX10: ; %bb.0: ; %main_body123; PREGFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_USCALED] idxen124; PREGFX10-NEXT: s_endpgm125;126; GFX10-LABEL: buffer_store_idx:127; GFX10: ; %bb.0: ; %main_body128; GFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:[BUF_FMT_10_10_10_2_SSCALED] idxen129; GFX10-NEXT: s_endpgm130;131; GFX11-LABEL: buffer_store_idx:132; GFX11: ; %bb.0: ; %main_body133; GFX11-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:[BUF_FMT_8_8_8_8_SINT] idxen134; GFX11-NEXT: s_endpgm135main_body:136 %in1 = bitcast <4 x float> %vdata to <4 x i32>137 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4i32(<4 x i32> %in1, ptr addrspace(8) %0, i32 %vindex, i32 0, i32 0, i32 47, i32 0)138 ret void139}140 141define amdgpu_ps void @buffer_store_ofs(ptr addrspace(8) inreg, <4 x float> %vdata, i32 %voffset) {142; VERDE-LABEL: buffer_store_ofs:143; VERDE: ; %bb.0: ; %main_body144; VERDE-NEXT: s_mov_b32 s4, 0145; VERDE-NEXT: v_mov_b32_e32 v5, v4146; VERDE-NEXT: v_mov_b32_e32 v4, s4147; VERDE-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_DATA_FORMAT_8_8,BUF_NUM_FORMAT_FLOAT] idxen offen148; VERDE-NEXT: s_endpgm149;150; PREGFX10-LABEL: buffer_store_ofs:151; PREGFX10: ; %bb.0: ; %main_body152; PREGFX10-NEXT: s_mov_b32 s4, 0153; PREGFX10-NEXT: v_mov_b32_e32 v5, v4154; PREGFX10-NEXT: v_mov_b32_e32 v4, s4155; PREGFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_DATA_FORMAT_8_8,BUF_NUM_FORMAT_FLOAT] idxen offen156; PREGFX10-NEXT: s_endpgm157;158; GFX10-LABEL: buffer_store_ofs:159; GFX10: ; %bb.0: ; %main_body160; GFX10-NEXT: s_mov_b32 s4, 0161; GFX10-NEXT: v_mov_b32_e32 v5, v4162; GFX10-NEXT: v_mov_b32_e32 v4, s4163; GFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:115 idxen offen164; GFX10-NEXT: s_endpgm165;166; GFX11-LABEL: buffer_store_ofs:167; GFX11: ; %bb.0: ; %main_body168; GFX11-NEXT: s_mov_b32 s4, 0169; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)170; GFX11-NEXT: v_dual_mov_b32 v5, v4 :: v_dual_mov_b32 v4, s4171; GFX11-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:115 idxen offen172; GFX11-NEXT: s_endpgm173main_body:174 %in1 = bitcast <4 x float> %vdata to <4 x i32>175 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4i32(<4 x i32> %in1, ptr addrspace(8) %0, i32 0, i32 %voffset, i32 0, i32 115, i32 0)176 ret void177}178 179define amdgpu_ps void @buffer_store_both(ptr addrspace(8) inreg, <4 x float> %vdata, i32 %vindex, i32 %voffset) {180; VERDE-LABEL: buffer_store_both:181; VERDE: ; %bb.0: ; %main_body182; VERDE-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_UINT] idxen offen183; VERDE-NEXT: s_endpgm184;185; PREGFX10-LABEL: buffer_store_both:186; PREGFX10: ; %bb.0: ; %main_body187; PREGFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_DATA_FORMAT_10_11_11,BUF_NUM_FORMAT_UINT] idxen offen188; PREGFX10-NEXT: s_endpgm189;190; GFX10-LABEL: buffer_store_both:191; GFX10: ; %bb.0: ; %main_body192; GFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_FMT_16_16_16_16_SINT] idxen offen193; GFX10-NEXT: s_endpgm194;195; GFX11-LABEL: buffer_store_both:196; GFX11: ; %bb.0: ; %main_body197; GFX11-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:70 idxen offen198; GFX11-NEXT: s_endpgm199main_body:200 %in1 = bitcast <4 x float> %vdata to <4 x i32>201 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4i32(<4 x i32> %in1, ptr addrspace(8) %0, i32 %vindex, i32 %voffset, i32 0, i32 70, i32 0)202 ret void203}204 205define amdgpu_ps void @buffer_store_wait(ptr addrspace(8) inreg, <4 x float> %vdata, i32 %vindex.1, i32 %vindex.2, i32 %vindex.3) {206; VERDE-LABEL: buffer_store_wait:207; VERDE: ; %bb.0: ; %main_body208; VERDE-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen209; VERDE-NEXT: s_waitcnt expcnt(0)210; VERDE-NEXT: buffer_load_format_xyzw v[0:3], v5, s[0:3], 0 idxen211; VERDE-NEXT: s_waitcnt vmcnt(0)212; VERDE-NEXT: tbuffer_store_format_xyzw v[0:3], v6, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32_32,BUF_NUM_FORMAT_USCALED] idxen213; VERDE-NEXT: s_endpgm214;215; PREGFX10-LABEL: buffer_store_wait:216; PREGFX10: ; %bb.0: ; %main_body217; PREGFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen218; PREGFX10-NEXT: buffer_load_format_xyzw v[0:3], v5, s[0:3], 0 idxen219; PREGFX10-NEXT: s_waitcnt vmcnt(0)220; PREGFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v6, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32_32,BUF_NUM_FORMAT_USCALED] idxen221; PREGFX10-NEXT: s_endpgm222;223; GFX10-LABEL: buffer_store_wait:224; GFX10: ; %bb.0: ; %main_body225; GFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:[BUF_FMT_32_32_SINT] idxen226; GFX10-NEXT: buffer_load_format_xyzw v[0:3], v5, s[0:3], 0 idxen227; GFX10-NEXT: s_waitcnt vmcnt(0)228; GFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v6, s[0:3], 0 format:[BUF_FMT_10_10_10_2_USCALED] idxen229; GFX10-NEXT: s_endpgm230;231; GFX11-LABEL: buffer_store_wait:232; GFX11: ; %bb.0: ; %main_body233; GFX11-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen234; GFX11-NEXT: buffer_load_format_xyzw v[0:3], v5, s[0:3], 0 idxen235; GFX11-NEXT: s_waitcnt vmcnt(0)236; GFX11-NEXT: tbuffer_store_format_xyzw v[0:3], v6, s[0:3], 0 format:[BUF_FMT_8_8_8_8_UINT] idxen237; GFX11-NEXT: s_endpgm238main_body:239 %in1 = bitcast <4 x float> %vdata to <4 x i32>240 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4i32(<4 x i32> %in1, ptr addrspace(8) %0, i32 %vindex.1, i32 0, i32 0, i32 63, i32 0)241 %data = call <4 x float> @llvm.amdgcn.struct.ptr.buffer.load.format.v4f32(ptr addrspace(8) %0, i32 %vindex.2, i32 0, i32 0, i32 0)242 %data.i = bitcast <4 x float> %data to <4 x i32>243 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4i32(<4 x i32> %data.i, ptr addrspace(8) %0, i32 %vindex.3, i32 0, i32 0, i32 46, i32 0)244 ret void245}246 247define amdgpu_ps void @buffer_store_x1(ptr addrspace(8) inreg %rsrc, float %data, i32 %vindex) {248; VERDE-LABEL: buffer_store_x1:249; VERDE: ; %bb.0: ; %main_body250; VERDE-NEXT: tbuffer_store_format_x v0, v1, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32,BUF_NUM_FORMAT_FLOAT] idxen251; VERDE-NEXT: s_endpgm252;253; PREGFX10-LABEL: buffer_store_x1:254; PREGFX10: ; %bb.0: ; %main_body255; PREGFX10-NEXT: tbuffer_store_format_x v0, v1, s[0:3], 0 format:[BUF_DATA_FORMAT_32_32_32,BUF_NUM_FORMAT_FLOAT] idxen256; PREGFX10-NEXT: s_endpgm257;258; GFX10-LABEL: buffer_store_x1:259; GFX10: ; %bb.0: ; %main_body260; GFX10-NEXT: tbuffer_store_format_x v0, v1, s[0:3], 0 format:125 idxen261; GFX10-NEXT: s_endpgm262;263; GFX11-LABEL: buffer_store_x1:264; GFX11: ; %bb.0: ; %main_body265; GFX11-NEXT: tbuffer_store_format_x v0, v1, s[0:3], 0 format:125 idxen266; GFX11-NEXT: s_endpgm267main_body:268 %data.i = bitcast float %data to i32269 call void @llvm.amdgcn.struct.ptr.tbuffer.store.i32(i32 %data.i, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 0, i32 125, i32 0)270 ret void271}272 273define amdgpu_ps void @buffer_store_x2(ptr addrspace(8) inreg %rsrc, <2 x float> %data, i32 %vindex) {274; VERDE-LABEL: buffer_store_x2:275; VERDE: ; %bb.0: ; %main_body276; VERDE-NEXT: tbuffer_store_format_xy v[0:1], v2, s[0:3], 0 format:[BUF_NUM_FORMAT_USCALED] idxen277; VERDE-NEXT: s_endpgm278;279; PREGFX10-LABEL: buffer_store_x2:280; PREGFX10: ; %bb.0: ; %main_body281; PREGFX10-NEXT: tbuffer_store_format_xy v[0:1], v2, s[0:3], 0 format:[BUF_NUM_FORMAT_USCALED] idxen282; PREGFX10-NEXT: s_endpgm283;284; GFX10-LABEL: buffer_store_x2:285; GFX10: ; %bb.0: ; %main_body286; GFX10-NEXT: tbuffer_store_format_xy v[0:1], v2, s[0:3], 0 format:[BUF_FMT_10_11_11_SSCALED] idxen287; GFX10-NEXT: s_endpgm288;289; GFX11-LABEL: buffer_store_x2:290; GFX11: ; %bb.0: ; %main_body291; GFX11-NEXT: tbuffer_store_format_xy v[0:1], v2, s[0:3], 0 format:[BUF_FMT_10_10_10_2_SNORM] idxen292; GFX11-NEXT: s_endpgm293main_body:294 %data.i = bitcast <2 x float> %data to <2 x i32>295 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v2i32(<2 x i32> %data.i, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 0, i32 33, i32 0)296 ret void297}298 299define amdgpu_ps void @buffer_store_voffset_large_12bit(ptr addrspace(8) inreg %rsrc, <4 x float> %data) {300; VERDE-LABEL: buffer_store_voffset_large_12bit:301; VERDE: ; %bb.0: ; %main_body302; VERDE-NEXT: v_mov_b32_e32 v4, 0303; VERDE-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offset:4092304; VERDE-NEXT: s_endpgm305;306; PREGFX10-LABEL: buffer_store_voffset_large_12bit:307; PREGFX10: ; %bb.0: ; %main_body308; PREGFX10-NEXT: v_mov_b32_e32 v4, 0309; PREGFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offset:4092310; PREGFX10-NEXT: s_endpgm311;312; GFX10-LABEL: buffer_store_voffset_large_12bit:313; GFX10: ; %bb.0: ; %main_body314; GFX10-NEXT: v_mov_b32_e32 v4, 0315; GFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:[BUF_FMT_32_32_SINT] idxen offset:4092316; GFX10-NEXT: s_endpgm317;318; GFX11-LABEL: buffer_store_voffset_large_12bit:319; GFX11: ; %bb.0: ; %main_body320; GFX11-NEXT: v_mov_b32_e32 v4, 0321; GFX11-NEXT: tbuffer_store_format_xyzw v[0:3], v4, s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen offset:4092322; GFX11-NEXT: s_endpgm323main_body:324 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4f32(<4 x float> %data, ptr addrspace(8) %rsrc, i32 0, i32 4092, i32 0, i32 63, i32 0)325 ret void326}327 328define amdgpu_ps void @buffer_store_voffset_large_13bit(ptr addrspace(8) inreg %rsrc, <4 x float> %data) {329; VERDE-LABEL: buffer_store_voffset_large_13bit:330; VERDE: ; %bb.0: ; %main_body331; VERDE-NEXT: s_mov_b32 s4, 0332; VERDE-NEXT: v_mov_b32_e32 v5, 0x1000333; VERDE-NEXT: v_mov_b32_e32 v4, s4334; VERDE-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offen offset:4092335; VERDE-NEXT: s_endpgm336;337; PREGFX10-LABEL: buffer_store_voffset_large_13bit:338; PREGFX10: ; %bb.0: ; %main_body339; PREGFX10-NEXT: s_mov_b32 s4, 0340; PREGFX10-NEXT: v_mov_b32_e32 v5, 0x1000341; PREGFX10-NEXT: v_mov_b32_e32 v4, s4342; PREGFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offen offset:4092343; PREGFX10-NEXT: s_endpgm344;345; GFX10-LABEL: buffer_store_voffset_large_13bit:346; GFX10: ; %bb.0: ; %main_body347; GFX10-NEXT: s_mov_b32 s4, 0348; GFX10-NEXT: v_mov_b32_e32 v5, 0x1000349; GFX10-NEXT: v_mov_b32_e32 v4, s4350; GFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_FMT_32_32_SINT] idxen offen offset:4092351; GFX10-NEXT: s_endpgm352;353; GFX11-LABEL: buffer_store_voffset_large_13bit:354; GFX11: ; %bb.0: ; %main_body355; GFX11-NEXT: s_mov_b32 s4, 0356; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)357; GFX11-NEXT: v_dual_mov_b32 v5, 0x1000 :: v_dual_mov_b32 v4, s4358; GFX11-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen offen offset:4092359; GFX11-NEXT: s_endpgm360main_body:361 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4f32(<4 x float> %data, ptr addrspace(8) %rsrc, i32 0, i32 8188, i32 0, i32 63, i32 0)362 ret void363}364 365define amdgpu_ps void @buffer_store_voffset_large_16bit(ptr addrspace(8) inreg %rsrc, <4 x float> %data) {366; VERDE-LABEL: buffer_store_voffset_large_16bit:367; VERDE: ; %bb.0: ; %main_body368; VERDE-NEXT: s_mov_b32 s4, 0369; VERDE-NEXT: v_mov_b32_e32 v5, 0xf000370; VERDE-NEXT: v_mov_b32_e32 v4, s4371; VERDE-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offen offset:4092372; VERDE-NEXT: s_endpgm373;374; PREGFX10-LABEL: buffer_store_voffset_large_16bit:375; PREGFX10: ; %bb.0: ; %main_body376; PREGFX10-NEXT: s_mov_b32 s4, 0377; PREGFX10-NEXT: v_mov_b32_e32 v5, 0xf000378; PREGFX10-NEXT: v_mov_b32_e32 v4, s4379; PREGFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offen offset:4092380; PREGFX10-NEXT: s_endpgm381;382; GFX10-LABEL: buffer_store_voffset_large_16bit:383; GFX10: ; %bb.0: ; %main_body384; GFX10-NEXT: s_mov_b32 s4, 0385; GFX10-NEXT: v_mov_b32_e32 v5, 0xf000386; GFX10-NEXT: v_mov_b32_e32 v4, s4387; GFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_FMT_32_32_SINT] idxen offen offset:4092388; GFX10-NEXT: s_endpgm389;390; GFX11-LABEL: buffer_store_voffset_large_16bit:391; GFX11: ; %bb.0: ; %main_body392; GFX11-NEXT: s_mov_b32 s4, 0393; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)394; GFX11-NEXT: v_dual_mov_b32 v5, 0xf000 :: v_dual_mov_b32 v4, s4395; GFX11-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen offen offset:4092396; GFX11-NEXT: s_endpgm397main_body:398 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4f32(<4 x float> %data, ptr addrspace(8) %rsrc, i32 0, i32 65532, i32 0, i32 63, i32 0)399 ret void400}401 402define amdgpu_ps void @buffer_store_voffset_large_23bit(ptr addrspace(8) inreg %rsrc, <4 x float> %data) {403; VERDE-LABEL: buffer_store_voffset_large_23bit:404; VERDE: ; %bb.0: ; %main_body405; VERDE-NEXT: s_mov_b32 s4, 0406; VERDE-NEXT: v_mov_b32_e32 v5, 0x7ff000407; VERDE-NEXT: v_mov_b32_e32 v4, s4408; VERDE-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offen offset:4092409; VERDE-NEXT: s_endpgm410;411; PREGFX10-LABEL: buffer_store_voffset_large_23bit:412; PREGFX10: ; %bb.0: ; %main_body413; PREGFX10-NEXT: s_mov_b32 s4, 0414; PREGFX10-NEXT: v_mov_b32_e32 v5, 0x7ff000415; PREGFX10-NEXT: v_mov_b32_e32 v4, s4416; PREGFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offen offset:4092417; PREGFX10-NEXT: s_endpgm418;419; GFX10-LABEL: buffer_store_voffset_large_23bit:420; GFX10: ; %bb.0: ; %main_body421; GFX10-NEXT: s_mov_b32 s4, 0422; GFX10-NEXT: v_mov_b32_e32 v5, 0x7ff000423; GFX10-NEXT: v_mov_b32_e32 v4, s4424; GFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_FMT_32_32_SINT] idxen offen offset:4092425; GFX10-NEXT: s_endpgm426;427; GFX11-LABEL: buffer_store_voffset_large_23bit:428; GFX11: ; %bb.0: ; %main_body429; GFX11-NEXT: s_mov_b32 s4, 0430; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)431; GFX11-NEXT: v_dual_mov_b32 v5, 0x7ff000 :: v_dual_mov_b32 v4, s4432; GFX11-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen offen offset:4092433; GFX11-NEXT: s_endpgm434main_body:435 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4f32(<4 x float> %data, ptr addrspace(8) %rsrc, i32 0, i32 8388604, i32 0, i32 63, i32 0)436 ret void437}438 439define amdgpu_ps void @buffer_store_voffset_large_24bit(ptr addrspace(8) inreg %rsrc, <4 x float> %data) {440; VERDE-LABEL: buffer_store_voffset_large_24bit:441; VERDE: ; %bb.0: ; %main_body442; VERDE-NEXT: s_mov_b32 s4, 0443; VERDE-NEXT: v_mov_b32_e32 v5, 0xfff000444; VERDE-NEXT: v_mov_b32_e32 v4, s4445; VERDE-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offen offset:4092446; VERDE-NEXT: s_endpgm447;448; PREGFX10-LABEL: buffer_store_voffset_large_24bit:449; PREGFX10: ; %bb.0: ; %main_body450; PREGFX10-NEXT: s_mov_b32 s4, 0451; PREGFX10-NEXT: v_mov_b32_e32 v5, 0xfff000452; PREGFX10-NEXT: v_mov_b32_e32 v4, s4453; PREGFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_DATA_FORMAT_RESERVED_15,BUF_NUM_FORMAT_SSCALED] idxen offen offset:4092454; PREGFX10-NEXT: s_endpgm455;456; GFX10-LABEL: buffer_store_voffset_large_24bit:457; GFX10: ; %bb.0: ; %main_body458; GFX10-NEXT: s_mov_b32 s4, 0459; GFX10-NEXT: v_mov_b32_e32 v5, 0xfff000460; GFX10-NEXT: v_mov_b32_e32 v4, s4461; GFX10-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_FMT_32_32_SINT] idxen offen offset:4092462; GFX10-NEXT: s_endpgm463;464; GFX11-LABEL: buffer_store_voffset_large_24bit:465; GFX11: ; %bb.0: ; %main_body466; GFX11-NEXT: s_mov_b32 s4, 0467; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)468; GFX11-NEXT: v_dual_mov_b32 v5, 0xfff000 :: v_dual_mov_b32 v4, s4469; GFX11-NEXT: tbuffer_store_format_xyzw v[0:3], v[4:5], s[0:3], 0 format:[BUF_FMT_32_32_32_32_FLOAT] idxen offen offset:4092470; GFX11-NEXT: s_endpgm471main_body:472 call void @llvm.amdgcn.struct.ptr.tbuffer.store.v4f32(<4 x float> %data, ptr addrspace(8) %rsrc, i32 0, i32 16777212, i32 0, i32 63, i32 0)473 ret void474}475 476declare void @llvm.amdgcn.struct.ptr.tbuffer.store.i32(i32, ptr addrspace(8), i32, i32, i32, i32, i32) #0477declare void @llvm.amdgcn.struct.ptr.tbuffer.store.v2i32(<2 x i32>, ptr addrspace(8), i32, i32, i32, i32, i32) #0478declare void @llvm.amdgcn.struct.ptr.tbuffer.store.v4i32(<4 x i32>, ptr addrspace(8), i32, i32, i32, i32, i32) #0479declare void @llvm.amdgcn.struct.ptr.tbuffer.store.v4f32(<4 x float>, ptr addrspace(8), i32, i32, i32, i32, i32) #0480declare <4 x float> @llvm.amdgcn.struct.ptr.buffer.load.format.v4f32(ptr addrspace(8), i32, i32, i32, i32) #1481 482attributes #0 = { nounwind }483attributes #1 = { nounwind readonly }484 485 486