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=fiji -stop-after=instruction-select -verify-machineinstrs -o - %s | FileCheck %s 3faa2c678SKrzysztof Drewniak; FIXME: Test with SI when argument lowering not broken for f16 4faa2c678SKrzysztof Drewniak 5faa2c678SKrzysztof Drewniak; Natural mapping 6faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset(ptr addrspace(8) inreg %rsrc, float %val, i32 %voffset, i32 inreg %soffset) { 7faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__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]+]]:sreg_32 = COPY $sgpr2 12faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 13faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 14faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 15faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 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 [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 19ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 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.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 22faa2c678SKrzysztof Drewniak ret void 23faa2c678SKrzysztof Drewniak} 24faa2c678SKrzysztof Drewniak 25faa2c678SKrzysztof Drewniak; Copies for VGPR arguments 26faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__sgpr_val__sgpr_voffset__sgpr_soffset(ptr addrspace(8) inreg %rsrc, float inreg %val, i32 inreg %voffset, i32 inreg %soffset) { 27faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__sgpr_val__sgpr_voffset__sgpr_soffset 28faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 29faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $sgpr7, $sgpr8 30faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 31faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 32faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 33faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 34faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 35faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr6 36faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr7 37faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr8 38faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 39faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[COPY4]] 40faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[COPY5]] 41ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY7]], [[COPY8]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 42faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 43faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 44faa2c678SKrzysztof Drewniak ret void 45faa2c678SKrzysztof Drewniak} 46faa2c678SKrzysztof Drewniak 47faa2c678SKrzysztof Drewniak; Waterfall for rsrc 48faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__vgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset(ptr addrspace(8) %rsrc, float %val, i32 %voffset, i32 inreg %soffset) { 49faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__vgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset 50faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 51faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.2(0x80000000) 52faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5 53faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 54faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 55faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 56faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 57faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 58faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4 59faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr5 60faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr2 61faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 62faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec 63faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 64faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.2: 65faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.3(0x80000000) 66faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 67faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY]], implicit $exec 68faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 69faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 70faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 71faa2c678SKrzysztof 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 72faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1 73faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3 74faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 75faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 76faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY9]], [[COPY7]], implicit $exec 77faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec 78c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_AND_B64_:%[0-9]+]]:sreg_64_xexec = S_AND_B64 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc 79faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_AND_SAVEEXEC_B64_:%[0-9]+]]:sreg_64_xexec = S_AND_SAVEEXEC_B64 killed [[S_AND_B64_]], implicit-def $exec, implicit-def $scc, implicit $exec 80faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 81faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.3: 82faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 83faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 84ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE1]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 85faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc 86faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 87faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 88faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.4: 89faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.5(0x80000000) 90faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 91faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec = S_MOV_B64_term [[S_MOV_B64_]] 92faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 93faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.5: 94faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 95faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 96faa2c678SKrzysztof Drewniak ret void 97faa2c678SKrzysztof Drewniak} 98faa2c678SKrzysztof Drewniak 99faa2c678SKrzysztof Drewniak; Waterfall for soffset 100faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__vgpr_soffset(ptr addrspace(8) inreg %rsrc, float %val, i32 %voffset, i32 %soffset) { 101faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__vgpr_soffset 102faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 103faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.2(0x80000000) 104faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $vgpr0, $vgpr1, $vgpr2 105faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 106faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 107faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 108faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 109faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 110faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 111faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 112faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2 113faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 114faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec 115faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 116faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.2: 117faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.3(0x80000000) 118faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 119faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY6]], implicit $exec 120faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64 = V_CMP_EQ_U32_e64 [[V_READFIRSTLANE_B32_]], [[COPY6]], implicit $exec 121faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:sreg_64_xexec = COPY [[V_CMP_EQ_U32_e64_]] 122faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_AND_SAVEEXEC_B64_:%[0-9]+]]:sreg_64_xexec = S_AND_SAVEEXEC_B64 killed [[COPY7]], implicit-def $exec, implicit-def $scc, implicit $exec 123faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 124faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.3: 125faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 126faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 127ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[V_READFIRSTLANE_B32_]], 0, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 128faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc 129faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 130faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 131faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.4: 132faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.5(0x80000000) 133faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 134faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec = S_MOV_B64_term [[S_MOV_B64_]] 135faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 136faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.5: 137faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 138faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 139faa2c678SKrzysztof Drewniak ret void 140faa2c678SKrzysztof Drewniak} 141faa2c678SKrzysztof Drewniak 142faa2c678SKrzysztof Drewniak; Waterfall for rsrc and soffset 143faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__vgpr_rsrc__vgpr_val__vgpr_voffset__vgpr_soffset(ptr addrspace(8) %rsrc, float %val, i32 %voffset, i32 %soffset) { 144faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__vgpr_rsrc__vgpr_val__vgpr_voffset__vgpr_soffset 145faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 146faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.2(0x80000000) 147faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6 148faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 149faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 150faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 151faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 152faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 153faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4 154faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr5 155faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr6 156faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 157faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec 158faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 159faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.2: 160faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.3(0x80000000) 161faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 162faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY]], implicit $exec 163faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 164faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 165faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 166faa2c678SKrzysztof 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 167faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1 168faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3 169faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 170faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 171faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY9]], [[COPY7]], implicit $exec 172faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec 173c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_AND_B64_:%[0-9]+]]:sreg_64_xexec = S_AND_B64 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc 174faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_4:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY6]], implicit $exec 175faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[V_READFIRSTLANE_B32_4]], [[COPY6]], implicit $exec 176c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_AND_B64_1:%[0-9]+]]:sreg_64_xexec = S_AND_B64 [[S_AND_B64_]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc 177faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_AND_SAVEEXEC_B64_:%[0-9]+]]:sreg_64_xexec = S_AND_SAVEEXEC_B64 killed [[S_AND_B64_1]], implicit-def $exec, implicit-def $scc, implicit $exec 178faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 179faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.3: 180faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 181faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 182ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE1]], [[V_READFIRSTLANE_B32_4]], 0, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 183faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc 184faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 185faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 186faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.4: 187faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.5(0x80000000) 188faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 189faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec = S_MOV_B64_term [[S_MOV_B64_]] 190faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 191faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.5: 192faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 193faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 194faa2c678SKrzysztof Drewniak ret void 195faa2c678SKrzysztof Drewniak} 196faa2c678SKrzysztof Drewniak 197faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_glc(ptr addrspace(8) inreg %rsrc, float %val, i32 %voffset, i32 inreg %soffset) { 198faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_glc 199faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 200faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 201faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 202faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 203faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 204faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 205faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 206faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 207faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 208faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 209faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 210ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 1, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 211faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 212faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 1) 213faa2c678SKrzysztof Drewniak ret void 214faa2c678SKrzysztof Drewniak} 215faa2c678SKrzysztof Drewniak 216faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_slc(ptr addrspace(8) inreg %rsrc, float %val, i32 %voffset, i32 inreg %soffset) { 217faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_slc 218faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 219faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 220faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 221faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 222faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 223faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 224faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 225faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 226faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 227faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 228faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 229ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 2, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 230faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 231faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 2) 232faa2c678SKrzysztof Drewniak ret void 233faa2c678SKrzysztof Drewniak} 234faa2c678SKrzysztof Drewniak 235faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_glc_slc(ptr addrspace(8) inreg %rsrc, float %val, i32 %voffset, i32 inreg %soffset) { 236faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_glc_slc 237faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 238faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 239faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 240faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 241faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 242faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 243faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 244faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 245faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 246faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 247faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 248ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 3, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 249faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 250faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 3) 251faa2c678SKrzysztof Drewniak ret void 252faa2c678SKrzysztof Drewniak} 253faa2c678SKrzysztof Drewniak 254faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_dlc(ptr addrspace(8) inreg %rsrc, float %val, i32 %voffset, i32 inreg %soffset) { 255faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_dlc 256faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 257faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 258faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 259faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 260faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 261faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 262faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 263faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 264faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 265faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 266faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 267ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 4, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 268faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 269faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 4) 270faa2c678SKrzysztof Drewniak ret void 271faa2c678SKrzysztof Drewniak} 272faa2c678SKrzysztof Drewniak 273faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_slc_dlc(ptr addrspace(8) inreg %rsrc, float %val, i32 %voffset, i32 inreg %soffset) { 274faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_slc_dlc 275faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 276faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 277faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 278faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 279faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 280faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 281faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 282faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 283faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 284faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 285faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 286ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 6, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 287faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 288faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 6) 289faa2c678SKrzysztof Drewniak ret void 290faa2c678SKrzysztof Drewniak} 291faa2c678SKrzysztof Drewniak 292faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_glc_dlc(ptr addrspace(8) inreg %rsrc, float %val, i32 %voffset, i32 inreg %soffset) { 293faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_glc_dlc 294faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 295faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 296faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 297faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 298faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 299faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 300faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 301faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 302faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 303faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 304faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 305ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 5, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 306faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 307faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 5) 308faa2c678SKrzysztof Drewniak ret void 309faa2c678SKrzysztof Drewniak} 310faa2c678SKrzysztof Drewniak 311faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_glc_slc_dlc(ptr addrspace(8) inreg %rsrc, float %val, i32 %voffset, i32 inreg %soffset) { 312faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_glc_slc_dlc 313faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 314faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 315faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 316faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 317faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 318faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 319faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 320faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 321faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 322faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 323faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 324ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 7, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 325faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 326faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 7) 327faa2c678SKrzysztof Drewniak ret void 328faa2c678SKrzysztof Drewniak} 329faa2c678SKrzysztof Drewniak 330*88871784SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_volatile(ptr addrspace(8) inreg %rsrc, float %val, i32 %voffset, i32 inreg %soffset) { 331*88871784SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_volatile 332*88871784SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 333*88871784SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 334*88871784SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 335*88871784SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 336*88871784SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 337*88871784SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 338*88871784SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 339*88871784SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 340*88871784SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 341*88871784SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 342*88871784SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 343*88871784SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (volatile dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 344*88871784SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 345*88871784SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 -2147483648) 346*88871784SKrzysztof Drewniak ret void 347*88871784SKrzysztof Drewniak} 348*88871784SKrzysztof Drewniak 349faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v2f32(ptr addrspace(8) inreg %rsrc, <2 x float> %val, i32 %voffset, i32 inreg %soffset) { 350faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v2f32 351faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 352faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2 353faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 354faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 355faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 356faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 357faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 358faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 359faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 360faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1 361faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2 362faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr6 363faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 364ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORDX2_OFFEN_exact [[REG_SEQUENCE]], [[COPY6]], [[REG_SEQUENCE1]], [[COPY7]], 0, 0, 0, implicit $exec :: (dereferenceable store (<2 x s32>) into %ir.rsrc, align 1, addrspace 8) 365faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 366faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.v2f32(<2 x float> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 367faa2c678SKrzysztof Drewniak ret void 368faa2c678SKrzysztof Drewniak} 369faa2c678SKrzysztof Drewniak 370faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v3f32(ptr addrspace(8) inreg %rsrc, <3 x float> %val, i32 %voffset, i32 inreg %soffset) { 371faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v3f32 372faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 373faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2, $vgpr3 374faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 375faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 376faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 377faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 378faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 379faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 380faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 381faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2 382faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_96 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1, [[COPY6]], %subreg.sub2 383faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr3 384faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:sreg_32 = COPY $sgpr6 385faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 386ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORDX3_OFFEN_exact [[REG_SEQUENCE]], [[COPY7]], [[REG_SEQUENCE1]], [[COPY8]], 0, 0, 0, implicit $exec :: (dereferenceable store (<3 x s32>) into %ir.rsrc, align 1, addrspace 8) 387faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 388faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.v3f32(<3 x float> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 389faa2c678SKrzysztof Drewniak ret void 390faa2c678SKrzysztof Drewniak} 391faa2c678SKrzysztof Drewniak 392faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v4f32(ptr addrspace(8) inreg %rsrc, <4 x float> %val, i32 %voffset, i32 inreg %soffset) { 393faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v4f32 394faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 395faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 396faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 397faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 398faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 399faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 400faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 401faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 402faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 403faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2 404faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr3 405faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1, [[COPY6]], %subreg.sub2, [[COPY7]], %subreg.sub3 406faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY $vgpr4 407faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:sreg_32 = COPY $sgpr6 408faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 409ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORDX4_OFFEN_exact [[REG_SEQUENCE]], [[COPY8]], [[REG_SEQUENCE1]], [[COPY9]], 0, 0, 0, implicit $exec :: (dereferenceable store (<4 x s32>) into %ir.rsrc, align 1, addrspace 8) 410faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 411faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.v4f32(<4 x float> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 412faa2c678SKrzysztof Drewniak ret void 413faa2c678SKrzysztof Drewniak} 414faa2c678SKrzysztof Drewniak 415faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_i8(ptr addrspace(8) inreg %rsrc, i32 %val, i32 %voffset, i32 inreg %soffset) { 416faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_i8 417faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 418faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 419faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 420faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 421faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 422faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 423faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 424faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 425faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 426faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 427faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 428ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_BYTE_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable store (s8) into %ir.rsrc, addrspace 8) 429faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 430faa2c678SKrzysztof Drewniak %val.trunc = trunc i32 %val to i8 431faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.i8(i8 %val.trunc, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 432faa2c678SKrzysztof Drewniak ret void 433faa2c678SKrzysztof Drewniak} 434faa2c678SKrzysztof Drewniak 435faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_i16(ptr addrspace(8) inreg %rsrc, i32 %val, i32 %voffset, i32 inreg %soffset) { 436faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_i16 437faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 438faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 439faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 440faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 441faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 442faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 443faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 444faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 445faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 446faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 447faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 448ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_SHORT_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable store (s16) into %ir.rsrc, align 1, addrspace 8) 449faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 450faa2c678SKrzysztof Drewniak %val.trunc = trunc i32 %val to i16 451faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.i16(i16 %val.trunc, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 452faa2c678SKrzysztof Drewniak ret void 453faa2c678SKrzysztof Drewniak} 454faa2c678SKrzysztof Drewniak 455faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_f16(ptr addrspace(8) inreg %rsrc, half %val, i32 %voffset, i32 inreg %soffset) { 456faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_f16 457faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 458faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 459faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 460faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 461faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 462faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 463faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 464faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 465faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 466faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 467faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 468ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_SHORT_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable store (s16) into %ir.rsrc, align 1, addrspace 8) 469faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 470faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f16(half %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 471faa2c678SKrzysztof Drewniak ret void 472faa2c678SKrzysztof Drewniak} 473faa2c678SKrzysztof Drewniak 474faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v2f16(ptr addrspace(8) inreg %rsrc, <2 x half> %val, i32 %voffset, i32 inreg %soffset) { 475faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v2f16 476faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 477faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 478faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 479faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 480faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 481faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 482faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 483faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 484faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 485faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 486faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 487ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable store (<2 x s16>) into %ir.rsrc, align 1, addrspace 8) 488faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 489faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 490faa2c678SKrzysztof Drewniak ret void 491faa2c678SKrzysztof Drewniak} 492faa2c678SKrzysztof Drewniak 493faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v4f16(ptr addrspace(8) inreg %rsrc, <4 x half> %val, i32 %voffset, i32 inreg %soffset) { 494faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v4f16 495faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 496faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2 497faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 498faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 499faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 500faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 501faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 502faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 503faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 504faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1 505faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2 506faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr6 507faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 508ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORDX2_OFFEN_exact [[REG_SEQUENCE]], [[COPY6]], [[REG_SEQUENCE1]], [[COPY7]], 0, 0, 0, implicit $exec :: (dereferenceable store (<4 x s16>) into %ir.rsrc, align 1, addrspace 8) 509faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 510faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.v4f16(<4 x half> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 511faa2c678SKrzysztof Drewniak ret void 512faa2c678SKrzysztof Drewniak} 513faa2c678SKrzysztof Drewniak 514faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__vgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v4f16(ptr addrspace(8) %rsrc, <4 x half> %val, i32 %voffset, i32 inreg %soffset) { 515faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__vgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v4f16 516faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 517faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.2(0x80000000) 518faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6 519faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 520faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 521faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 522faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 523faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 524faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4 525faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr5 526faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1 527faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr6 528faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr2 529faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 530faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec 531faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 532faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.2: 533faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.3(0x80000000) 534faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 535faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY]], implicit $exec 536faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 537faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 538faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 539faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE2:%[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 540faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 541faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 542faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE2]].sub0_sub1 543faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY11:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE2]].sub2_sub3 544faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec 545faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY11]], [[COPY9]], implicit $exec 546c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_AND_B64_:%[0-9]+]]:sreg_64_xexec = S_AND_B64 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc 547faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_AND_SAVEEXEC_B64_:%[0-9]+]]:sreg_64_xexec = S_AND_SAVEEXEC_B64 killed [[S_AND_B64_]], implicit-def $exec, implicit-def $scc, implicit $exec 548faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 549faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.3: 550faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 551faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 552ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORDX2_OFFEN_exact [[REG_SEQUENCE]], [[COPY6]], [[REG_SEQUENCE2]], [[COPY7]], 0, 0, 0, implicit $exec :: (dereferenceable store (<4 x s16>) into %ir.rsrc, align 1, addrspace 8) 553faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc 554faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 555faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 556faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.4: 557faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.5(0x80000000) 558faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 559faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec = S_MOV_B64_term [[S_MOV_B64_]] 560faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 561faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.5: 562faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 563faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.v4f16(<4 x half> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 564faa2c678SKrzysztof Drewniak ret void 565faa2c678SKrzysztof Drewniak} 566faa2c678SKrzysztof Drewniak 567faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__sgpr_soffset_f32_voffset4095(ptr addrspace(8) inreg %rsrc, float %val, i32 inreg %soffset) { 568faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__sgpr_soffset_f32_voffset4095 569faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 570faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0 571faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 572faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 573faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 574faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 575faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 576faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 577faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6 578faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 579ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET_exact [[COPY4]], [[REG_SEQUENCE]], [[COPY5]], 4095, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 580faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 581faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 4095, i32 %soffset, i32 0) 582faa2c678SKrzysztof Drewniak ret void 583faa2c678SKrzysztof Drewniak} 584faa2c678SKrzysztof Drewniak 585faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__sgpr_soffset_f32_voffset4096(ptr addrspace(8) inreg %rsrc, float %val, i32 inreg %soffset) { 586faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__sgpr_soffset_f32_voffset4096 587faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 588faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0 589faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 590faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 591faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 592faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 593faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 594faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 595faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6 596faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096 597faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 598faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 599ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY6]], [[REG_SEQUENCE]], [[COPY5]], 0, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 600faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 601faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 4096, i32 %soffset, i32 0) 602faa2c678SKrzysztof Drewniak ret void 603faa2c678SKrzysztof Drewniak} 604faa2c678SKrzysztof Drewniak 605faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_f32_voffset_add_16(ptr addrspace(8) inreg %rsrc, float %val, i32 %voffset, i32 inreg %soffset) { 606faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_f32_voffset_add_16 607faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 608faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 609faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 610faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 611faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 612faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 613faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 614faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 615faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 616faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 617faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 618ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 16, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 619faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 620faa2c678SKrzysztof Drewniak %voffset.add = add i32 %voffset, 16 621faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset.add, i32 %soffset, i32 0) 622faa2c678SKrzysztof Drewniak ret void 623faa2c678SKrzysztof Drewniak} 624faa2c678SKrzysztof Drewniak 625faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_f32_voffset_add_4095(ptr addrspace(8) inreg %rsrc, float %val, i32 %voffset, i32 inreg %soffset) { 626faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_f32_voffset_add_4095 627faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 628faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 629faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 630faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 631faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 632faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 633faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 634faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 635faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 636faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 637faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 638ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 4095, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 639faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 640faa2c678SKrzysztof Drewniak %voffset.add = add i32 %voffset, 4095 641faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset.add, i32 %soffset, i32 0) 642faa2c678SKrzysztof Drewniak ret void 643faa2c678SKrzysztof Drewniak} 644faa2c678SKrzysztof Drewniak 645faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_f32_voffset_add_4096(ptr addrspace(8) inreg %rsrc, float %val, i32 %voffset, i32 inreg %soffset) { 646faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_f32_voffset_add_4096 647faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 648faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 649faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 650faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 651faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 652faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 653faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 654faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 655faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 656faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 657faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096 658faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 659faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY5]], [[COPY7]], 0, implicit $exec 660faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 661ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[V_ADD_CO_U32_e64_]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 662faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 663faa2c678SKrzysztof Drewniak %voffset.add = add i32 %voffset, 4096 664faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset.add, i32 %soffset, i32 0) 665faa2c678SKrzysztof Drewniak ret void 666faa2c678SKrzysztof Drewniak} 667faa2c678SKrzysztof Drewniak 668faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v2f16_soffset4095(ptr addrspace(8) inreg %rsrc, <2 x half> %val, i32 %voffset, i32 inreg %soffset) { 669faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v2f16_soffset4095 670faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 671faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 672faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 673faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 674faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 675faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 676faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 677faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 678faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 679faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4095 680faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 681ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[S_MOV_B32_]], 0, 0, 0, implicit $exec :: (dereferenceable store (<2 x s16>) into %ir.rsrc, align 1, addrspace 8) 682faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 683faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 4095, i32 0) 684faa2c678SKrzysztof Drewniak ret void 685faa2c678SKrzysztof Drewniak} 686faa2c678SKrzysztof Drewniak 687faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v2f16_soffset4096(ptr addrspace(8) inreg %rsrc, <2 x half> %val, i32 %voffset, i32 inreg %soffset) { 688faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v2f16_soffset4096 689faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 690faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 691faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 692faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 693faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 694faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 695faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 696faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 697faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 698faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096 699faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 700ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[S_MOV_B32_]], 0, 0, 0, implicit $exec :: (dereferenceable store (<2 x s16>) into %ir.rsrc, align 1, addrspace 8) 701faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 702faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 4096, i32 0) 703faa2c678SKrzysztof Drewniak ret void 704faa2c678SKrzysztof Drewniak} 705faa2c678SKrzysztof Drewniak 706faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v2f16_soffset_add_16(ptr addrspace(8) inreg %rsrc, <2 x half> %val, i32 %voffset, i32 inreg %soffset) { 707faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v2f16_soffset_add_16 708faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 709faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 710faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 711faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 712faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 713faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 714faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 715faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 716faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 717faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 718faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 719ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 16, 0, 0, implicit $exec :: (dereferenceable store (<2 x s16>) into %ir.rsrc, align 1, addrspace 8) 720faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 721faa2c678SKrzysztof Drewniak %voffset.add = add i32 %voffset, 16 722faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %voffset.add, i32 %soffset, i32 0) 723faa2c678SKrzysztof Drewniak ret void 724faa2c678SKrzysztof Drewniak} 725faa2c678SKrzysztof Drewniak 726faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v2f16_soffset_add_4095(ptr addrspace(8) inreg %rsrc, <2 x half> %val, i32 %voffset, i32 inreg %soffset) { 727faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v2f16_soffset_add_4095 728faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 729faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 730faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 731faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 732faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 733faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 734faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 735faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 736faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 737faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 738faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 739ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 4095, 0, 0, implicit $exec :: (dereferenceable store (<2 x s16>) into %ir.rsrc, align 1, addrspace 8) 740faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 741faa2c678SKrzysztof Drewniak %voffset.add = add i32 %voffset, 4095 742faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %voffset.add, i32 %soffset, i32 0) 743faa2c678SKrzysztof Drewniak ret void 744faa2c678SKrzysztof Drewniak} 745faa2c678SKrzysztof Drewniak 746faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v2f16_soffset_add_4096(ptr addrspace(8) inreg %rsrc, <2 x half> %val, i32 %voffset, i32 inreg %soffset) { 747faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__sgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_v2f16_soffset_add_4096 748faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 749faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 750faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 751faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 752faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 753faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 754faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 755faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 756faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 757faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 758faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096 759faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 760faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY5]], [[COPY7]], 0, implicit $exec 761faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 762ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[V_ADD_CO_U32_e64_]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable store (<2 x s16>) into %ir.rsrc, align 1, addrspace 8) 763faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 764faa2c678SKrzysztof Drewniak %voffset.add = add i32 %voffset, 4096 765faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %voffset.add, i32 %soffset, i32 0) 766faa2c678SKrzysztof Drewniak ret void 767faa2c678SKrzysztof Drewniak} 768faa2c678SKrzysztof Drewniak 769faa2c678SKrzysztof Drewniak; An add of the offset is necessary, with a waterfall loop. Make sure the add is done outside of the waterfall loop. 770faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__vgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_offset_add_5000(ptr addrspace(8) %rsrc, float %val, i32 %voffset, i32 inreg %soffset) { 771faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__vgpr_rsrc__vgpr_val__vgpr_voffset__sgpr_soffset_offset_add_5000 772faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 773faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.2(0x80000000) 774faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5 775faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 776faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 777faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 778faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 779faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 780faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4 781faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr5 782faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr2 783faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 784faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096 785faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 786faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY5]], [[COPY7]], 0, implicit $exec 787faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec 788faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 789faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.2: 790faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.3(0x80000000) 791faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 792faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY]], implicit $exec 793faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 794faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 795faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 796faa2c678SKrzysztof 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 797faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1 798faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3 799faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 800faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY11:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 801faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec 802faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY11]], [[COPY9]], implicit $exec 803c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_AND_B64_:%[0-9]+]]:sreg_64_xexec = S_AND_B64 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc 804faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_AND_SAVEEXEC_B64_:%[0-9]+]]:sreg_64_xexec = S_AND_SAVEEXEC_B64 killed [[S_AND_B64_]], implicit-def $exec, implicit-def $scc, implicit $exec 805faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 806faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.3: 807faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 808faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 809ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[V_ADD_CO_U32_e64_]], [[REG_SEQUENCE1]], [[COPY6]], 904, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 810faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc 811faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 812faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 813faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.4: 814faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.5(0x80000000) 815faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 816faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec = S_MOV_B64_term [[S_MOV_B64_]] 817faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 818faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.5: 819faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 820faa2c678SKrzysztof Drewniak %voffset.add = add i32 %voffset, 5000 821faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset.add, i32 %soffset, i32 0) 822faa2c678SKrzysztof Drewniak ret void 823faa2c678SKrzysztof Drewniak} 824faa2c678SKrzysztof Drewniak 825faa2c678SKrzysztof Drewniak; An add of the offset is necessary, with a waterfall loop. Make sure the add is done outside of the waterfall loop. 826faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_ptr_buffer_store__vgpr_rsrc__vgpr_val__5000_voffset__sgpr_soffset_offset(ptr addrspace(8) %rsrc, float %val, i32 inreg %soffset) { 827faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_store__vgpr_rsrc__vgpr_val__5000_voffset__sgpr_soffset_offset 828faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 829faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.2(0x80000000) 830faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 831faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 832faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 833faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 834faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 835faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 836faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4 837faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr2 838faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 839faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096 840faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 841faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec 842faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 843faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.2: 844faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.3(0x80000000) 845faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 846faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY]], implicit $exec 847faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 848faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 849faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 850faa2c678SKrzysztof 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 851faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1 852faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3 853faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 854faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 855faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY9]], [[COPY7]], implicit $exec 856faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec 857c3cfbbc4Spvanhout ; CHECK-NEXT: [[S_AND_B64_:%[0-9]+]]:sreg_64_xexec = S_AND_B64 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc 858faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_AND_SAVEEXEC_B64_:%[0-9]+]]:sreg_64_xexec = S_AND_SAVEEXEC_B64 killed [[S_AND_B64_]], implicit-def $exec, implicit-def $scc, implicit $exec 859faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 860faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.3: 861faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 862faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 863ab379378SKrzysztof Drewniak ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFEN_exact [[COPY4]], [[COPY6]], [[REG_SEQUENCE1]], [[COPY5]], 904, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8) 864faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc 865faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 866faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 867faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.4: 868faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.5(0x80000000) 869faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 870faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec = S_MOV_B64_term [[S_MOV_B64_]] 871faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 872faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.5: 873faa2c678SKrzysztof Drewniak ; CHECK-NEXT: S_ENDPGM 0 874faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.raw.ptr.buffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 5000, i32 %soffset, i32 0) 875faa2c678SKrzysztof Drewniak ret void 876faa2c678SKrzysztof Drewniak} 877faa2c678SKrzysztof Drewniak 878faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.buffer.store.i8(i8, ptr addrspace(8), i32, i32, i32 immarg) 879faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.buffer.store.i16(i16, ptr addrspace(8), i32, i32, i32 immarg) 880faa2c678SKrzysztof Drewniak 881faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.buffer.store.f16(half, ptr addrspace(8), i32, i32, i32 immarg) 882faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.buffer.store.v2f16(<2 x half>, ptr addrspace(8), i32, i32, i32 immarg) 883faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.buffer.store.v4f16(<4 x half>, ptr addrspace(8), i32, i32, i32 immarg) 884faa2c678SKrzysztof Drewniak 885faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.buffer.store.f32(float, ptr addrspace(8), i32, i32, i32 immarg) 886faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.buffer.store.v2f32(<2 x float>, ptr addrspace(8), i32, i32, i32 immarg) 887faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.buffer.store.v3f32(<3 x float>, ptr addrspace(8), i32, i32, i32 immarg) 888faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.buffer.store.v4f32(<4 x float>, ptr addrspace(8), i32, i32, i32 immarg) 889