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=gfx908 -stop-after=instruction-select -verify-machineinstrs -o - %s | FileCheck %s -check-prefix=GFX908 3faa2c678SKrzysztof Drewniak; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx90a -stop-after=instruction-select -verify-machineinstrs -o - %s | FileCheck %s -check-prefix=GFX90A 4faa2c678SKrzysztof Drewniak 5faa2c678SKrzysztof Drewniak; Natural mapping 6faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset(float %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 %voffset, i32 inreg %soffset) { 7faa2c678SKrzysztof Drewniak ; GFX908-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset 8faa2c678SKrzysztof Drewniak ; GFX908: bb.1 (%ir-block.0): 9faa2c678SKrzysztof Drewniak ; GFX908-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2 10faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 11faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 12faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 13faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 14faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 15faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 16faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 17faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2 18faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr6 19faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 20faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY6]], %subreg.sub1 21ab379378SKrzysztof Drewniak ; GFX908-NEXT: BUFFER_ATOMIC_ADD_F32_BOTHEN [[COPY]], [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY7]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 22faa2c678SKrzysztof Drewniak ; GFX908-NEXT: S_ENDPGM 0 23*c3cfbbc4Spvanhout ; 24faa2c678SKrzysztof Drewniak ; GFX90A-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset 25faa2c678SKrzysztof Drewniak ; GFX90A: bb.1 (%ir-block.0): 26faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2 27faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 28faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 29faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 30faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 31faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 32faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 33faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 34faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2 35faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr6 36faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 37faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY6]], %subreg.sub1 38ab379378SKrzysztof Drewniak ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F32_BOTHEN [[COPY]], [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY7]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 39faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: S_ENDPGM 0 40faa2c678SKrzysztof Drewniak %ret = call float @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 0) 41faa2c678SKrzysztof Drewniak ret void 42faa2c678SKrzysztof Drewniak} 43faa2c678SKrzysztof Drewniak 44faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset_plus4095__sgpr_soffset(float %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 %voffset, i32 inreg %soffset) { 45faa2c678SKrzysztof Drewniak ; GFX908-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset_plus4095__sgpr_soffset 46faa2c678SKrzysztof Drewniak ; GFX908: bb.1 (%ir-block.0): 47faa2c678SKrzysztof Drewniak ; GFX908-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2 48faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 49faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 50faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 51faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 52faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 53faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 54faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 55faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2 56faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr6 57faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 58faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY6]], %subreg.sub1 59ab379378SKrzysztof Drewniak ; GFX908-NEXT: BUFFER_ATOMIC_ADD_F32_BOTHEN [[COPY]], [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY7]], 4095, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 60faa2c678SKrzysztof Drewniak ; GFX908-NEXT: S_ENDPGM 0 61*c3cfbbc4Spvanhout ; 62faa2c678SKrzysztof Drewniak ; GFX90A-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset_plus4095__sgpr_soffset 63faa2c678SKrzysztof Drewniak ; GFX90A: bb.1 (%ir-block.0): 64faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2 65faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 66faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 67faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 68faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 69faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 70faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 71faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 72faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2 73faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr6 74faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 75faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY6]], %subreg.sub1 76ab379378SKrzysztof Drewniak ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F32_BOTHEN [[COPY]], [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY7]], 4095, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 77faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: S_ENDPGM 0 78faa2c678SKrzysztof Drewniak %voffset.add = add i32 %voffset, 4095 79faa2c678SKrzysztof Drewniak %ret = call float @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset.add, i32 %soffset, i32 0) 80faa2c678SKrzysztof Drewniak ret void 81faa2c678SKrzysztof Drewniak} 82faa2c678SKrzysztof Drewniak 83faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__4095_voffset__sgpr_soffset(float %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 inreg %soffset) { 84faa2c678SKrzysztof Drewniak ; GFX908-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__4095_voffset__sgpr_soffset 85faa2c678SKrzysztof Drewniak ; GFX908: bb.1 (%ir-block.0): 86faa2c678SKrzysztof Drewniak ; GFX908-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 87faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 88faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 89faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 90faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 91faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 92faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 93faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 94faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 95faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 96ab379378SKrzysztof Drewniak ; GFX908-NEXT: BUFFER_ATOMIC_ADD_F32_IDXEN [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 4095, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 97faa2c678SKrzysztof Drewniak ; GFX908-NEXT: S_ENDPGM 0 98*c3cfbbc4Spvanhout ; 99faa2c678SKrzysztof Drewniak ; GFX90A-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__4095_voffset__sgpr_soffset 100faa2c678SKrzysztof Drewniak ; GFX90A: bb.1 (%ir-block.0): 101faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 102faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 103faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 104faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 105faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 106faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 107faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 108faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 109faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 110faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 111ab379378SKrzysztof Drewniak ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F32_IDXEN [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 4095, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 112faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: S_ENDPGM 0 113faa2c678SKrzysztof Drewniak %ret = call float @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 4095, i32 %soffset, i32 0) 114faa2c678SKrzysztof Drewniak ret void 115faa2c678SKrzysztof Drewniak} 116faa2c678SKrzysztof Drewniak 117faa2c678SKrzysztof Drewniak; Natural mapping, no voffset 118faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset(float %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 inreg %soffset) { 119faa2c678SKrzysztof Drewniak ; GFX908-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset 120faa2c678SKrzysztof Drewniak ; GFX908: bb.1 (%ir-block.0): 121faa2c678SKrzysztof Drewniak ; GFX908-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 122faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 123faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 124faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 125faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 126faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 127faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 128faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 129faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 130faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 131ab379378SKrzysztof Drewniak ; GFX908-NEXT: BUFFER_ATOMIC_ADD_F32_IDXEN [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 132faa2c678SKrzysztof Drewniak ; GFX908-NEXT: S_ENDPGM 0 133*c3cfbbc4Spvanhout ; 134faa2c678SKrzysztof Drewniak ; GFX90A-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset 135faa2c678SKrzysztof Drewniak ; GFX90A: bb.1 (%ir-block.0): 136faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 137faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 138faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 139faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 140faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 141faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 142faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 143faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 144faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 145faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 146ab379378SKrzysztof Drewniak ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F32_IDXEN [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 147faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: S_ENDPGM 0 148faa2c678SKrzysztof Drewniak %ret = call float @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 %soffset, i32 0) 149faa2c678SKrzysztof Drewniak ret void 150faa2c678SKrzysztof Drewniak} 151faa2c678SKrzysztof Drewniak 152faa2c678SKrzysztof Drewniak; All register operands need legalization 153faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @struct_ptr_buffer_atomic_add_f32_noret__sgpr_val__vgpr_rsrc__sgpr_voffset__vgpr_soffset(float inreg %val, ptr addrspace(8) %rsrc, i32 inreg %vindex, i32 inreg %voffset, i32 %soffset) { 154faa2c678SKrzysztof Drewniak ; GFX908-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__sgpr_val__vgpr_rsrc__sgpr_voffset__vgpr_soffset 155faa2c678SKrzysztof Drewniak ; GFX908: bb.1 (%ir-block.0): 156faa2c678SKrzysztof Drewniak ; GFX908-NEXT: successors: %bb.2(0x80000000) 157faa2c678SKrzysztof Drewniak ; GFX908-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 158faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 159faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 160faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 161faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1 162faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr2 163faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr3 164faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr3 165faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr4 166faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr4 167faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 168faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[COPY]] 169faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[COPY5]] 170faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY10:%[0-9]+]]:vgpr_32 = COPY [[COPY6]] 171faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec 172faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 173faa2c678SKrzysztof Drewniak ; GFX908-NEXT: bb.2: 174faa2c678SKrzysztof Drewniak ; GFX908-NEXT: successors: %bb.3(0x80000000) 175faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 176faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 177faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 178faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 179faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY4]], implicit $exec 180faa2c678SKrzysztof Drewniak ; GFX908-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 181faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY11:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1 182faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY12:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3 183faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY13:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 184faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY14:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 185faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY13]], [[COPY11]], implicit $exec 186faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY14]], [[COPY12]], implicit $exec 187*c3cfbbc4Spvanhout ; GFX908-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 188faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_READFIRSTLANE_B32_4:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY7]], implicit $exec 189faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[V_READFIRSTLANE_B32_4]], [[COPY7]], implicit $exec 190*c3cfbbc4Spvanhout ; GFX908-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 191faa2c678SKrzysztof Drewniak ; GFX908-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 192faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 193faa2c678SKrzysztof Drewniak ; GFX908-NEXT: bb.3: 194faa2c678SKrzysztof Drewniak ; GFX908-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 195faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 196faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY9]], %subreg.sub0, [[COPY10]], %subreg.sub1 197ab379378SKrzysztof Drewniak ; GFX908-NEXT: BUFFER_ATOMIC_ADD_F32_BOTHEN [[COPY8]], [[REG_SEQUENCE2]], [[REG_SEQUENCE1]], [[V_READFIRSTLANE_B32_4]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 198faa2c678SKrzysztof Drewniak ; GFX908-NEXT: $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc 199faa2c678SKrzysztof Drewniak ; GFX908-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 200faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 201faa2c678SKrzysztof Drewniak ; GFX908-NEXT: bb.4: 202faa2c678SKrzysztof Drewniak ; GFX908-NEXT: successors: %bb.5(0x80000000) 203faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 204faa2c678SKrzysztof Drewniak ; GFX908-NEXT: $exec = S_MOV_B64_term [[S_MOV_B64_]] 205faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 206faa2c678SKrzysztof Drewniak ; GFX908-NEXT: bb.5: 207faa2c678SKrzysztof Drewniak ; GFX908-NEXT: S_ENDPGM 0 208*c3cfbbc4Spvanhout ; 209faa2c678SKrzysztof Drewniak ; GFX90A-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__sgpr_val__vgpr_rsrc__sgpr_voffset__vgpr_soffset 210faa2c678SKrzysztof Drewniak ; GFX90A: bb.1 (%ir-block.0): 211faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: successors: %bb.2(0x80000000) 212faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 213faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 214faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 215faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 216faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1 217faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr2 218faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr3 219faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr3 220faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr4 221faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr4 222faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 223faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[COPY]] 224faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[COPY5]] 225faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:vgpr_32 = COPY [[COPY6]] 226faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec 227faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 228faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: bb.2: 229faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: successors: %bb.3(0x80000000) 230faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 231faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 232faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 233faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 234faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY4]], implicit $exec 235faa2c678SKrzysztof Drewniak ; GFX90A-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 236faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:vreg_64_align2 = COPY [[REG_SEQUENCE]].sub0_sub1 237faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY12:%[0-9]+]]:vreg_64_align2 = COPY [[REG_SEQUENCE]].sub2_sub3 238faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY13:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 239faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY14:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 240faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY13]], [[COPY11]], implicit $exec 241faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY14]], [[COPY12]], implicit $exec 242*c3cfbbc4Spvanhout ; GFX90A-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 243faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_4:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY7]], implicit $exec 244faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[V_READFIRSTLANE_B32_4]], [[COPY7]], implicit $exec 245*c3cfbbc4Spvanhout ; GFX90A-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 246faa2c678SKrzysztof Drewniak ; GFX90A-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 247faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 248faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: bb.3: 249faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 250faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 251faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY9]], %subreg.sub0, [[COPY10]], %subreg.sub1 252ab379378SKrzysztof Drewniak ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F32_BOTHEN [[COPY8]], [[REG_SEQUENCE2]], [[REG_SEQUENCE1]], [[V_READFIRSTLANE_B32_4]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 253faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc 254faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 255faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 256faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: bb.4: 257faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: successors: %bb.5(0x80000000) 258faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 259faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: $exec = S_MOV_B64_term [[S_MOV_B64_]] 260faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 261faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: bb.5: 262faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: S_ENDPGM 0 263faa2c678SKrzysztof Drewniak %ret = call float @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 0) 264faa2c678SKrzysztof Drewniak ret void 265faa2c678SKrzysztof Drewniak} 266faa2c678SKrzysztof Drewniak 267faa2c678SKrzysztof Drewniak; All register operands need legalization, no voffset 268faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @struct_ptr_buffer_atomic_add_f32_noret__sgpr_val__vgpr_rsrc__0_voffset__vgpr_soffset(float inreg %val, ptr addrspace(8) %rsrc, i32 inreg %vindex, i32 %soffset) { 269faa2c678SKrzysztof Drewniak ; GFX908-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__sgpr_val__vgpr_rsrc__0_voffset__vgpr_soffset 270faa2c678SKrzysztof Drewniak ; GFX908: bb.1 (%ir-block.0): 271faa2c678SKrzysztof Drewniak ; GFX908-NEXT: successors: %bb.2(0x80000000) 272faa2c678SKrzysztof Drewniak ; GFX908-NEXT: liveins: $sgpr2, $sgpr3, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 273faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 274faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 275faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 276faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1 277faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr2 278faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr3 279faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr3 280faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr4 281faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 282faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[COPY]] 283faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[COPY5]] 284faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec 285faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 286faa2c678SKrzysztof Drewniak ; GFX908-NEXT: bb.2: 287faa2c678SKrzysztof Drewniak ; GFX908-NEXT: successors: %bb.3(0x80000000) 288faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 289faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 290faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 291faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 292faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY4]], implicit $exec 293faa2c678SKrzysztof Drewniak ; GFX908-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 294faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY9:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1 295faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY10:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3 296faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY11:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 297faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY12:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 298faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY11]], [[COPY9]], implicit $exec 299faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY12]], [[COPY10]], implicit $exec 300*c3cfbbc4Spvanhout ; GFX908-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 301faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_READFIRSTLANE_B32_4:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY6]], implicit $exec 302faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[V_READFIRSTLANE_B32_4]], [[COPY6]], implicit $exec 303*c3cfbbc4Spvanhout ; GFX908-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 304faa2c678SKrzysztof Drewniak ; GFX908-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 305faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 306faa2c678SKrzysztof Drewniak ; GFX908-NEXT: bb.3: 307faa2c678SKrzysztof Drewniak ; GFX908-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 308faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 309ab379378SKrzysztof Drewniak ; GFX908-NEXT: BUFFER_ATOMIC_ADD_F32_IDXEN [[COPY7]], [[COPY8]], [[REG_SEQUENCE1]], [[V_READFIRSTLANE_B32_4]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 310faa2c678SKrzysztof Drewniak ; GFX908-NEXT: $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc 311faa2c678SKrzysztof Drewniak ; GFX908-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 312faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 313faa2c678SKrzysztof Drewniak ; GFX908-NEXT: bb.4: 314faa2c678SKrzysztof Drewniak ; GFX908-NEXT: successors: %bb.5(0x80000000) 315faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 316faa2c678SKrzysztof Drewniak ; GFX908-NEXT: $exec = S_MOV_B64_term [[S_MOV_B64_]] 317faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 318faa2c678SKrzysztof Drewniak ; GFX908-NEXT: bb.5: 319faa2c678SKrzysztof Drewniak ; GFX908-NEXT: S_ENDPGM 0 320*c3cfbbc4Spvanhout ; 321faa2c678SKrzysztof Drewniak ; GFX90A-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__sgpr_val__vgpr_rsrc__0_voffset__vgpr_soffset 322faa2c678SKrzysztof Drewniak ; GFX90A: bb.1 (%ir-block.0): 323faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: successors: %bb.2(0x80000000) 324faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: liveins: $sgpr2, $sgpr3, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 325faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 326faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 327faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 328faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1 329faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr2 330faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr3 331faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr3 332faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr4 333faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128_align2 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 334faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[COPY]] 335faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[COPY5]] 336faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec 337faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 338faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: bb.2: 339faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: successors: %bb.3(0x80000000) 340faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 341faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 342faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 343faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 344faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY4]], implicit $exec 345faa2c678SKrzysztof Drewniak ; GFX90A-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 346faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:vreg_64_align2 = COPY [[REG_SEQUENCE]].sub0_sub1 347faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:vreg_64_align2 = COPY [[REG_SEQUENCE]].sub2_sub3 348faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 349faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY12:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 350faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY11]], [[COPY9]], implicit $exec 351faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY12]], [[COPY10]], implicit $exec 352*c3cfbbc4Spvanhout ; GFX90A-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 353faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_READFIRSTLANE_B32_4:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY6]], implicit $exec 354faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[V_READFIRSTLANE_B32_4]], [[COPY6]], implicit $exec 355*c3cfbbc4Spvanhout ; GFX90A-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 356faa2c678SKrzysztof Drewniak ; GFX90A-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 357faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 358faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: bb.3: 359faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 360faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 361ab379378SKrzysztof Drewniak ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F32_IDXEN [[COPY7]], [[COPY8]], [[REG_SEQUENCE1]], [[V_READFIRSTLANE_B32_4]], 0, 0, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 362faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc 363faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 364faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 365faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: bb.4: 366faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: successors: %bb.5(0x80000000) 367faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 368faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: $exec = S_MOV_B64_term [[S_MOV_B64_]] 369faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 370faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: bb.5: 371faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: S_ENDPGM 0 372faa2c678SKrzysztof Drewniak %ret = call float @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 %soffset, i32 0) 373faa2c678SKrzysztof Drewniak ret void 374faa2c678SKrzysztof Drewniak} 375faa2c678SKrzysztof Drewniak 376faa2c678SKrzysztof Drewniak; Natural mapping + slc 377faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc(float %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 %voffset, i32 inreg %soffset) { 378faa2c678SKrzysztof Drewniak ; GFX908-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc 379faa2c678SKrzysztof Drewniak ; GFX908: bb.1 (%ir-block.0): 380faa2c678SKrzysztof Drewniak ; GFX908-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2 381faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 382faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 383faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 384faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 385faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 386faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 387faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 388faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2 389faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr6 390faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 391faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY6]], %subreg.sub1 392ab379378SKrzysztof Drewniak ; GFX908-NEXT: BUFFER_ATOMIC_ADD_F32_BOTHEN [[COPY]], [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY7]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 393faa2c678SKrzysztof Drewniak ; GFX908-NEXT: S_ENDPGM 0 394*c3cfbbc4Spvanhout ; 395faa2c678SKrzysztof Drewniak ; GFX90A-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc 396faa2c678SKrzysztof Drewniak ; GFX90A: bb.1 (%ir-block.0): 397faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2 398faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 399faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 400faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 401faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 402faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 403faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 404faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 405faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2 406faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr6 407faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 408faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY6]], %subreg.sub1 409ab379378SKrzysztof Drewniak ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F32_BOTHEN [[COPY]], [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY7]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 410faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: S_ENDPGM 0 411faa2c678SKrzysztof Drewniak %ret = call float @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 2) 412faa2c678SKrzysztof Drewniak ret void 413faa2c678SKrzysztof Drewniak} 414faa2c678SKrzysztof Drewniak 415faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset_slc(float %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 inreg %soffset) { 416faa2c678SKrzysztof Drewniak ; GFX908-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset_slc 417faa2c678SKrzysztof Drewniak ; GFX908: bb.1 (%ir-block.0): 418faa2c678SKrzysztof Drewniak ; GFX908-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 419faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 420faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 421faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 422faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 423faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 424faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 425faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 426faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 427faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 428ab379378SKrzysztof Drewniak ; GFX908-NEXT: BUFFER_ATOMIC_ADD_F32_IDXEN [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 429faa2c678SKrzysztof Drewniak ; GFX908-NEXT: S_ENDPGM 0 430*c3cfbbc4Spvanhout ; 431faa2c678SKrzysztof Drewniak ; GFX90A-LABEL: name: struct_ptr_buffer_atomic_add_f32_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset_slc 432faa2c678SKrzysztof Drewniak ; GFX90A: bb.1 (%ir-block.0): 433faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 434faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 435faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 436faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 437faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 438faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 439faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 440faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 441faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 442faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 443ab379378SKrzysztof Drewniak ; GFX90A-NEXT: BUFFER_ATOMIC_ADD_F32_IDXEN [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 2, implicit $exec :: (volatile dereferenceable load store (s32) on %ir.rsrc, align 1, addrspace 8) 444faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: S_ENDPGM 0 445faa2c678SKrzysztof Drewniak %ret = call float @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f32(float %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 %soffset, i32 2) 446faa2c678SKrzysztof Drewniak ret void 447faa2c678SKrzysztof Drewniak} 448faa2c678SKrzysztof Drewniak 449faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @struct_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset(<2 x half> %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 %voffset, i32 inreg %soffset) { 450faa2c678SKrzysztof Drewniak ; GFX908-LABEL: name: struct_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset 451faa2c678SKrzysztof Drewniak ; GFX908: bb.1 (%ir-block.0): 452faa2c678SKrzysztof Drewniak ; GFX908-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2 453faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 454faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 455faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 456faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 457faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 458faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 459faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 460faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2 461faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr6 462faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 463faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY6]], %subreg.sub1 464ab379378SKrzysztof Drewniak ; GFX908-NEXT: BUFFER_ATOMIC_PK_ADD_F16_BOTHEN [[COPY]], [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY7]], 0, 0, implicit $exec :: (volatile dereferenceable load store (<2 x s16>) on %ir.rsrc, align 1, addrspace 8) 465faa2c678SKrzysztof Drewniak ; GFX908-NEXT: S_ENDPGM 0 466*c3cfbbc4Spvanhout ; 467faa2c678SKrzysztof Drewniak ; GFX90A-LABEL: name: struct_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__vgpr_voffset__sgpr_soffset 468faa2c678SKrzysztof Drewniak ; GFX90A: bb.1 (%ir-block.0): 469faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2 470faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 471faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 472faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 473faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 474faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 475faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 476faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 477faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2 478faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr6 479faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 480faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY6]], %subreg.sub1 481ab379378SKrzysztof Drewniak ; GFX90A-NEXT: BUFFER_ATOMIC_PK_ADD_F16_BOTHEN [[COPY]], [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY7]], 0, 0, implicit $exec :: (volatile dereferenceable load store (<2 x s16>) on %ir.rsrc, align 1, addrspace 8) 482faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: S_ENDPGM 0 483faa2c678SKrzysztof Drewniak %ret = call <2 x half> @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 0) 484faa2c678SKrzysztof Drewniak ret void 485faa2c678SKrzysztof Drewniak} 486faa2c678SKrzysztof Drewniak 487faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @struct_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset(<2 x half> %val, ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 inreg %soffset) { 488faa2c678SKrzysztof Drewniak ; GFX908-LABEL: name: struct_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset 489faa2c678SKrzysztof Drewniak ; GFX908: bb.1 (%ir-block.0): 490faa2c678SKrzysztof Drewniak ; GFX908-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 491faa2c678SKrzysztof Drewniak ; GFX908-NEXT: {{ $}} 492faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 493faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 494faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 495faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 496faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 497faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 498faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 499faa2c678SKrzysztof Drewniak ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 500ab379378SKrzysztof Drewniak ; GFX908-NEXT: BUFFER_ATOMIC_PK_ADD_F16_IDXEN [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, implicit $exec :: (volatile dereferenceable load store (<2 x s16>) on %ir.rsrc, align 1, addrspace 8) 501faa2c678SKrzysztof Drewniak ; GFX908-NEXT: S_ENDPGM 0 502*c3cfbbc4Spvanhout ; 503faa2c678SKrzysztof Drewniak ; GFX90A-LABEL: name: struct_ptr_buffer_atomic_add_v2f16_noret__vgpr_val__sgpr_rsrc__0_voffset__sgpr_soffset 504faa2c678SKrzysztof Drewniak ; GFX90A: bb.1 (%ir-block.0): 505faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 506faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: {{ $}} 507faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 508faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2 509faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3 510faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4 511faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5 512faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 513faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 514faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3 515ab379378SKrzysztof Drewniak ; GFX90A-NEXT: BUFFER_ATOMIC_PK_ADD_F16_IDXEN [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, implicit $exec :: (volatile dereferenceable load store (<2 x s16>) on %ir.rsrc, align 1, addrspace 8) 516faa2c678SKrzysztof Drewniak ; GFX90A-NEXT: S_ENDPGM 0 517faa2c678SKrzysztof Drewniak %ret = call <2 x half> @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.v2f16(<2 x half> %val, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 %soffset, i32 0) 518faa2c678SKrzysztof Drewniak ret void 519faa2c678SKrzysztof Drewniak} 520faa2c678SKrzysztof Drewniak 521faa2c678SKrzysztof Drewniakdeclare float @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.f32(float, ptr addrspace(8), i32, i32, i32, i32 immarg) #0 522faa2c678SKrzysztof Drewniakdeclare <2 x half> @llvm.amdgcn.struct.ptr.buffer.atomic.fadd.v2f16(<2 x half>, ptr addrspace(8), i32, i32, i32, i32 immarg) #0 523faa2c678SKrzysztof Drewniak 524faa2c678SKrzysztof Drewniakattributes #0 = { nounwind } 525