1faa2c678SKrzysztof Drewniak; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2faa2c678SKrzysztof Drewniak; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -stop-after=instruction-select -verify-machineinstrs -o - %s | FileCheck %s 3faa2c678SKrzysztof Drewniak; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -stop-after=instruction-select -verify-machineinstrs -o - %s | FileCheck %s 4faa2c678SKrzysztof Drewniak 5faa2c678SKrzysztof Drewniak; Natural mapping 6faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) { 7faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset 8faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 9faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 10faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 11faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 12faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 13faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 14faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 15faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 16faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 17faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 18faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 19ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 78, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 20faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 21faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 0) 22faa2c678SKrzysztof Drewniak ret void 23faa2c678SKrzysztof Drewniak} 24faa2c678SKrzysztof Drewniak 25faa2c678SKrzysztof Drewniak; Natural mapping 26faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_v2f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset(<2 x float> %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) { 27faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_v2f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset 28faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 29faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2 30faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 31faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 32faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 33faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1 34faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2 35faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3 36faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr4 37faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr5 38faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2 39faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr6 40faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY3]], %subreg.sub1, [[COPY4]], %subreg.sub2, [[COPY5]], %subreg.sub3 41ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_XY_OFFEN_exact [[REG_SEQUENCE]], [[COPY6]], [[REG_SEQUENCE1]], [[COPY7]], 0, 78, 0, 0, implicit $exec :: (dereferenceable store (<2 x s32>) into %ir.rsrc, align 1, addrspace 8) 42faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 43faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.v2f32(<2 x float> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 0) 44faa2c678SKrzysztof Drewniak ret void 45faa2c678SKrzysztof Drewniak} 46faa2c678SKrzysztof Drewniak 47faa2c678SKrzysztof Drewniak; Natural mapping 48faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_v3f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset(<3 x float> %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) { 49faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_v3f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset 50faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 51faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2, $vgpr3 52faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 53faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 54faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 55faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 56faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_96 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2 57faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr2 58faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr3 59faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr4 60faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr5 61faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr3 62faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY $sgpr6 63faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY4]], %subreg.sub1, [[COPY5]], %subreg.sub2, [[COPY6]], %subreg.sub3 64ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_XYZ_OFFEN_exact [[REG_SEQUENCE]], [[COPY7]], [[REG_SEQUENCE1]], [[COPY8]], 0, 78, 0, 0, implicit $exec :: (dereferenceable store (<3 x s32>) into %ir.rsrc, align 1, addrspace 8) 65faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 66faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.v3f32(<3 x float> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 0) 67faa2c678SKrzysztof Drewniak ret void 68faa2c678SKrzysztof Drewniak} 69faa2c678SKrzysztof Drewniak 70faa2c678SKrzysztof Drewniak; Natural mapping 71faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_v4f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset(<4 x float> %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) { 72faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_v4f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset 73faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 74faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 75faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 76faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 77faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 78faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 79faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 80faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 81faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr2 82faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr3 83faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr4 84faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr5 85faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY $vgpr4 86faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY $sgpr6 87faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1, [[COPY6]], %subreg.sub2, [[COPY7]], %subreg.sub3 88ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact [[REG_SEQUENCE]], [[COPY8]], [[REG_SEQUENCE1]], [[COPY9]], 0, 78, 0, 0, implicit $exec :: (dereferenceable store (<4 x s32>) into %ir.rsrc, align 1, addrspace 8) 89faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 90faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.v4f32(<4 x float> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 0) 91faa2c678SKrzysztof Drewniak ret void 92faa2c678SKrzysztof Drewniak} 93faa2c678SKrzysztof Drewniak 94faa2c678SKrzysztof Drewniak; Copies for VGPR arguments 95faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__sgpr_voffset__sgpr_soffset(float %val, ptr addrspace(8) inreg %rsrc, i32 inreg %voffset, i32 inreg %soffset) { 96faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__sgpr_voffset__sgpr_soffset 97faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 98faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $sgpr7, $vgpr0 99faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 100faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 101faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 102faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 103faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 104faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 105faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6 106faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr7 107faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 108faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[COPY5]] 109ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY7]], [[REG_SEQUENCE]], [[COPY6]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 110faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 111faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0) 112faa2c678SKrzysztof Drewniak ret void 113faa2c678SKrzysztof Drewniak} 114faa2c678SKrzysztof Drewniak 115faa2c678SKrzysztof Drewniak; Waterfall for rsrc 116faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__vgpr_rsrc__vgpr_voffset__sgpr_soffset(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 inreg %soffset) { 117faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__vgpr_rsrc__vgpr_voffset__sgpr_soffset 118faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 119faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.2(0x80000000) 120faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5 121faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 122faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 123faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 124faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 125faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 126faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4 127faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr5 128faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr2 129faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 130faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo 131faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 132faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.2: 133faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.3(0x80000000) 134faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 135faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 136faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 137faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 138faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY4]], implicit $exec 139faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1, [[V_READFIRSTLANE_B32_2]], %subreg.sub2, [[V_READFIRSTLANE_B32_3]], %subreg.sub3 140faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1 141faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3 142faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 143faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 144faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY9]], [[COPY7]], implicit $exec 145faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec 146*c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_B32 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc 147faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_AND_SAVEEXEC_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_SAVEEXEC_B32 killed [[S_AND_B32_]], implicit-def $exec, implicit-def $scc, implicit $exec 148faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 149faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.3: 150faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 151faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 152ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE1]], [[COPY6]], 0, 94, 1, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 153faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec_lo = S_XOR_B32_term $exec_lo, [[S_AND_SAVEEXEC_B32_]], implicit-def $scc 154faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 155faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 156faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.4: 157faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.5(0x80000000) 158faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 159faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec_lo = S_MOV_B32_term [[S_MOV_B32_]] 160faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 161faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.5: 162faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 163faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 1) 164faa2c678SKrzysztof Drewniak ret void 165faa2c678SKrzysztof Drewniak} 166faa2c678SKrzysztof Drewniak 167faa2c678SKrzysztof Drewniak; Waterfall for rsrc and soffset 168faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__vgpr_rsrc__vgpr_voffset__vgpr_soffset(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset) { 169faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__vgpr_rsrc__vgpr_voffset__vgpr_soffset 170faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 171faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.2(0x80000000) 172faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6 173faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 174faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 175faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 176faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 177faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 178faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4 179faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr5 180faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr6 181faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 182faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo 183faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 184faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.2: 185faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.3(0x80000000) 186faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 187faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 188faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 189faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 190faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY4]], implicit $exec 191faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1, [[V_READFIRSTLANE_B32_2]], %subreg.sub2, [[V_READFIRSTLANE_B32_3]], %subreg.sub3 192faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1 193faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3 194faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 195faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 196faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY9]], [[COPY7]], implicit $exec 197faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec 198*c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_B32 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc 199faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_4:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY6]], implicit $exec 200faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U32_e64 [[V_READFIRSTLANE_B32_4]], [[COPY6]], implicit $exec 201*c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_AND_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_B32 [[S_AND_B32_]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc 202faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_AND_SAVEEXEC_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_SAVEEXEC_B32 killed [[S_AND_B32_1]], implicit-def $exec, implicit-def $scc, implicit $exec 203faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 204faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.3: 205faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 206faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 207ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE1]], [[V_READFIRSTLANE_B32_4]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 208faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec_lo = S_XOR_B32_term $exec_lo, [[S_AND_SAVEEXEC_B32_]], implicit-def $scc 209faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 210faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 211faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.4: 212faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.5(0x80000000) 213faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 214faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec_lo = S_MOV_B32_term [[S_MOV_B32_]] 215faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 216faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.5: 217faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 218faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0) 219faa2c678SKrzysztof Drewniak ret void 220faa2c678SKrzysztof Drewniak} 221faa2c678SKrzysztof Drewniak 222faa2c678SKrzysztof Drewniak; Waterfall for rsrc and soffset, copy for voffset 223faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__vgpr_rsrc__sgpr_voffset__vgpr_soffset(float %val, ptr addrspace(8) %rsrc, i32 inreg %voffset, i32 %soffset) { 224faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__vgpr_rsrc__sgpr_voffset__vgpr_soffset 225faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 226faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.2(0x80000000) 227faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5 228faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 229faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 230faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 231faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 232faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 233faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4 234faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr2 235faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr5 236faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 237faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[COPY5]] 238faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo 239faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 240faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.2: 241faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.3(0x80000000) 242faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 243faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 244faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 245faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 246faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY4]], implicit $exec 247faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1, [[V_READFIRSTLANE_B32_2]], %subreg.sub2, [[V_READFIRSTLANE_B32_3]], %subreg.sub3 248faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1 249faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3 250faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 251faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY11:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 252faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec 253faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY11]], [[COPY9]], implicit $exec 254*c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_B32 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc 255faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_4:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY6]], implicit $exec 256faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U32_e64 [[V_READFIRSTLANE_B32_4]], [[COPY6]], implicit $exec 257*c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_AND_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_B32 [[S_AND_B32_]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc 258faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_AND_SAVEEXEC_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_SAVEEXEC_B32 killed [[S_AND_B32_1]], implicit-def $exec, implicit-def $scc, implicit $exec 259faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 260faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.3: 261faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 262faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 263ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY7]], [[REG_SEQUENCE1]], [[V_READFIRSTLANE_B32_4]], 0, 78, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 264faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec_lo = S_XOR_B32_term $exec_lo, [[S_AND_SAVEEXEC_B32_]], implicit-def $scc 265faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 266faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 267faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.4: 268faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.5(0x80000000) 269faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 270faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec_lo = S_MOV_B32_term [[S_MOV_B32_]] 271faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 272faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.5: 273faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 274faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 0) 275faa2c678SKrzysztof Drewniak ret void 276faa2c678SKrzysztof Drewniak} 277faa2c678SKrzysztof Drewniak 278faa2c678SKrzysztof Drewniak; Natural mapping + glc 279faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_glc(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) { 280faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_glc 281faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 282faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 283faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 284faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 285faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 286faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 287faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 288faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 289faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 290faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 291faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 292ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 78, 1, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 293faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 294faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 1) 295faa2c678SKrzysztof Drewniak ret void 296faa2c678SKrzysztof Drewniak} 297faa2c678SKrzysztof Drewniak 298faa2c678SKrzysztof Drewniak; Natural mapping + slc 299faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) { 300faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc 301faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 302faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 303faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 304faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 305faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 306faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 307faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 308faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 309faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 310faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 311faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 312ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 78, 2, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 313faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 314faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 2) 315faa2c678SKrzysztof Drewniak ret void 316faa2c678SKrzysztof Drewniak} 317faa2c678SKrzysztof Drewniak 318faa2c678SKrzysztof Drewniak; Natural mapping + glc + slc 319faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc_glc(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) { 320faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc_glc 321faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 322faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 323faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 324faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 325faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 326faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 327faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 328faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 329faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 330faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 331faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 332ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 78, 3, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 333faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 334faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 3) 335faa2c678SKrzysztof Drewniak ret void 336faa2c678SKrzysztof Drewniak} 337faa2c678SKrzysztof Drewniak 338faa2c678SKrzysztof Drewniak; Natural mapping + dlc 339faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_dlc(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) { 340faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_dlc 341faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 342faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 343faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 344faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 345faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 346faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 347faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 348faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 349faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 350faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 351faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 352ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 78, 4, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 353faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 354faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 4) 355faa2c678SKrzysztof Drewniak ret void 356faa2c678SKrzysztof Drewniak} 357faa2c678SKrzysztof Drewniak 358faa2c678SKrzysztof Drewniak 359faa2c678SKrzysztof Drewniak 360faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vdpr_voffset__sgpr_soffset__voffset0(float %val, ptr addrspace(8) inreg %rsrc, i32 inreg %soffset) { 361faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vdpr_voffset__sgpr_soffset__voffset0 362faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 363faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0 364faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 365faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 366faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 367faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 368faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 369faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 370faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6 371faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 372ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFSET_exact [[COPY]], [[REG_SEQUENCE]], [[COPY5]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 373faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 374faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 0, i32 %soffset, i32 94, i32 0) 375faa2c678SKrzysztof Drewniak ret void 376faa2c678SKrzysztof Drewniak} 377faa2c678SKrzysztof Drewniak 378faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset4095(float %val, ptr addrspace(8) inreg %rsrc, i32 inreg %soffset) { 379faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset4095 380faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 381faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0 382faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 383faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 384faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 385faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 386faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 387faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 388faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6 389faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 390ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFSET_exact [[COPY]], [[REG_SEQUENCE]], [[COPY5]], 4095, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 391faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 392faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 4095, i32 %soffset, i32 94, i32 0) 393faa2c678SKrzysztof Drewniak ret void 394faa2c678SKrzysztof Drewniak} 395faa2c678SKrzysztof Drewniak 396faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset4096(float %val, ptr addrspace(8) inreg %rsrc, i32 inreg %soffset) { 397faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset4096 398faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 399faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0 400faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 401faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 402faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 403faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 404faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 405faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 406faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6 407faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096 408faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 409faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 410ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY6]], [[REG_SEQUENCE]], [[COPY5]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 411faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 412faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 4096, i32 %soffset, i32 94, i32 0) 413faa2c678SKrzysztof Drewniak ret void 414faa2c678SKrzysztof Drewniak} 415faa2c678SKrzysztof Drewniak 416faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_voffset_add16(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset.base, i32 inreg %soffset) { 417faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_voffset_add16 418faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 419faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 420faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 421faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 422faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 423faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 424faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 425faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 426faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 427faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 428faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 429ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 16, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 430faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 431faa2c678SKrzysztof Drewniak %voffset = add i32 %voffset.base, 16 432faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0) 433faa2c678SKrzysztof Drewniak ret void 434faa2c678SKrzysztof Drewniak} 435faa2c678SKrzysztof Drewniak 436faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset_add4095(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset.base, i32 inreg %soffset) { 437faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset_add4095 438faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 439faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 440faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 441faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 442faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 443faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 444faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 445faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 446faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 447faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 448faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 449ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 4095, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 450faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 451faa2c678SKrzysztof Drewniak %voffset = add i32 %voffset.base, 4095 452faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0) 453faa2c678SKrzysztof Drewniak ret void 454faa2c678SKrzysztof Drewniak} 455faa2c678SKrzysztof Drewniak 456faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset_add4096(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset.base, i32 inreg %soffset) { 457faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset_add4096 458faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 459faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 460faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 461faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 462faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 463faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 464faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 465faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 466faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 467faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 468faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096 469faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 470faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY5]], [[COPY7]], 0, implicit $exec 471faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 472ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[V_ADD_U32_e64_]], [[REG_SEQUENCE]], [[COPY6]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 473faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 474faa2c678SKrzysztof Drewniak %voffset = add i32 %voffset.base, 4096 475faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0) 476faa2c678SKrzysztof Drewniak ret void 477faa2c678SKrzysztof Drewniak} 478faa2c678SKrzysztof Drewniak 479faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset4095(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset) { 480faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset4095 481faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 482faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $vgpr0, $vgpr1 483faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 484faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 485faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 486faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 487faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 488faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 489faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 490faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4095 491faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 492ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[S_MOV_B32_]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 493faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 494faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 4095, i32 94, i32 0) 495faa2c678SKrzysztof Drewniak ret void 496faa2c678SKrzysztof Drewniak} 497faa2c678SKrzysztof Drewniak 498faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset4096(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset) { 499faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset4096 500faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 501faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $vgpr0, $vgpr1 502faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 503faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 504faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 505faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 506faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 507faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 508faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 509faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096 510faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 511ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[S_MOV_B32_]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 512faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 513faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 4096, i32 94, i32 0) 514faa2c678SKrzysztof Drewniak ret void 515faa2c678SKrzysztof Drewniak} 516faa2c678SKrzysztof Drewniak 517faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add16(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset.base) { 518faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add16 519faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 520faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 521faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 522faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 523faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 524faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 525faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 526faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 527faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 528faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 529faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 16 530*c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY6]], [[S_MOV_B32_]], implicit-def dead $scc 531faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 532ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[S_ADD_I32_]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 533faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 534faa2c678SKrzysztof Drewniak %soffset = add i32 %soffset.base, 16 535faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0) 536faa2c678SKrzysztof Drewniak ret void 537faa2c678SKrzysztof Drewniak} 538faa2c678SKrzysztof Drewniak 539faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add4095(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset.base) { 540faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add4095 541faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 542faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 543faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 544faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 545faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 546faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 547faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 548faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 549faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 550faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 551faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4095 552*c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY6]], [[S_MOV_B32_]], implicit-def dead $scc 553faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 554ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[S_ADD_I32_]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 555faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 556faa2c678SKrzysztof Drewniak %soffset = add i32 %soffset.base, 4095 557faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0) 558faa2c678SKrzysztof Drewniak ret void 559faa2c678SKrzysztof Drewniak} 560faa2c678SKrzysztof Drewniak 561faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add4096(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset.base) { 562faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add4096 563faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 564faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 565faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 566faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 567faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 568faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 569faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 570faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 571faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 572faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 573faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096 574*c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY6]], [[S_MOV_B32_]], implicit-def dead $scc 575faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 576ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[S_ADD_I32_]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 577faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 578faa2c678SKrzysztof Drewniak %soffset = add i32 %soffset.base, 4096 579faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0) 580faa2c678SKrzysztof Drewniak ret void 581faa2c678SKrzysztof Drewniak} 582faa2c678SKrzysztof Drewniak 583faa2c678SKrzysztof Drewniak; An add of the offset is necessary, with a waterfall loop. Make sure the add is done outside of the waterfall loop. 584faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add5000(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 inreg %soffset.base) { 585faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add5000 586faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 587faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.2(0x80000000) 588faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5 589faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 590faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 591faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 592faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 593faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 594faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4 595faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr5 596faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr2 597faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 5000 598*c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY6]], [[S_MOV_B32_]], implicit-def dead $scc 599faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 600faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo 601faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 602faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.2: 603faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.3(0x80000000) 604faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 605faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 606faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 607faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 608faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY4]], implicit $exec 609faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1, [[V_READFIRSTLANE_B32_2]], %subreg.sub2, [[V_READFIRSTLANE_B32_3]], %subreg.sub3 610faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1 611faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3 612faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 613faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 614faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY9]], [[COPY7]], implicit $exec 615faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec 616*c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_B32 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc 617faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_AND_SAVEEXEC_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_SAVEEXEC_B32 killed [[S_AND_B32_]], implicit-def $exec, implicit-def $scc, implicit $exec 618faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 619faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.3: 620faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 621faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 622ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE1]], [[S_ADD_I32_]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 623faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec_lo = S_XOR_B32_term $exec_lo, [[S_AND_SAVEEXEC_B32_]], implicit-def $scc 624faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 625faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 626faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.4: 627faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.5(0x80000000) 628faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 629faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec_lo = S_MOV_B32_term [[S_MOV_B32_1]] 630faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 631faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.5: 632faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 633faa2c678SKrzysztof Drewniak %soffset = add i32 %soffset.base, 5000 634faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0) 635faa2c678SKrzysztof Drewniak ret void 636faa2c678SKrzysztof Drewniak} 637faa2c678SKrzysztof Drewniak 638faa2c678SKrzysztof Drewniak; An add of the offset is necessary, with a waterfall loop. Make sure the add is done outside of the waterfall loop. 639faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_voffset_add5000(float %val, ptr addrspace(8) %rsrc, i32 %voffset.base, i32 inreg %soffset) { 640faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_voffset_add5000 641faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 642faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.2(0x80000000) 643faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5 644faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 645faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 646faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 647faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 648faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 649faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4 650faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr5 651faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr2 652faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 653faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096 654faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 655faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY5]], [[COPY7]], 0, implicit $exec 656faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo 657faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 658faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.2: 659faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.3(0x80000000) 660faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 661faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 662faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 663faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 664faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY4]], implicit $exec 665faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1, [[V_READFIRSTLANE_B32_2]], %subreg.sub2, [[V_READFIRSTLANE_B32_3]], %subreg.sub3 666faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1 667faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3 668faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 669faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY11:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 670faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec 671faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY11]], [[COPY9]], implicit $exec 672*c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_B32 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc 673faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_AND_SAVEEXEC_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_SAVEEXEC_B32 killed [[S_AND_B32_]], implicit-def $exec, implicit-def $scc, implicit $exec 674faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 675faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.3: 676faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 677faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 678ab379378SKrzysztof Drewniak ; CHECK-NEXT: TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[V_ADD_U32_e64_]], [[REG_SEQUENCE1]], [[COPY6]], 904, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 679faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec_lo = S_XOR_B32_term $exec_lo, [[S_AND_SAVEEXEC_B32_]], implicit-def $scc 680faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 681faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 682faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.4: 683faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.5(0x80000000) 684faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 685faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec_lo = S_MOV_B32_term [[S_MOV_B32_1]] 686faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 687faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.5: 688faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 689faa2c678SKrzysztof Drewniak %voffset = add i32 %voffset.base, 5000 690faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0) 691faa2c678SKrzysztof Drewniak ret void 692faa2c678SKrzysztof Drewniak} 693faa2c678SKrzysztof Drewniak 694faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float, ptr addrspace(8), i32, i32, i32 immarg, i32 immarg) 695faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.tbuffer.store.v2f32(<2 x float>, ptr addrspace(8), i32, i32, i32 immarg, i32 immarg) 696faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.tbuffer.store.v3f32(<3 x float>, ptr addrspace(8), i32, i32, i32 immarg, i32 immarg) 697faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.tbuffer.store.v4f32(<4 x float>, ptr addrspace(8), i32, i32, i32 immarg, i32 immarg) 698