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 4faa2c678SKrzysztof Drewniak; Natural mapping 5faa2c678SKrzysztof Drewniakdefine amdgpu_ps float @raw_ptr_buffer_load_format_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset(ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) { 6faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_load_format_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset 7faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 8faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0 9faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 10faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 11faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 12faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 13faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 14faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 15faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6 16faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 17ab379378SKrzysztof Drewniak ; CHECK-NEXT: [[BUFFER_LOAD_FORMAT_X_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_FORMAT_X_OFFEN [[COPY4]], [[REG_SEQUENCE]], [[COPY5]], 0, 0, 0, implicit $exec :: (dereferenceable load (s32) from %ir.rsrc, align 1, addrspace 8) 18faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_FORMAT_X_OFFEN]] 19faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0 20faa2c678SKrzysztof Drewniak %val = call float @llvm.amdgcn.raw.ptr.buffer.load.format.f32(ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 21faa2c678SKrzysztof Drewniak ret float %val 22faa2c678SKrzysztof Drewniak} 23faa2c678SKrzysztof Drewniak 24faa2c678SKrzysztof Drewniakdefine amdgpu_ps <2 x float> @raw_ptr_buffer_load_format_v2f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset(ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) { 25faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_load_format_v2f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset 26faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 27faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0 28faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 29faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 30faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 31faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 32faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 33faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 34faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6 35faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 36ab379378SKrzysztof Drewniak ; CHECK-NEXT: [[BUFFER_LOAD_FORMAT_XY_OFFEN:%[0-9]+]]:vreg_64 = BUFFER_LOAD_FORMAT_XY_OFFEN [[COPY4]], [[REG_SEQUENCE]], [[COPY5]], 0, 0, 0, implicit $exec :: (dereferenceable load (<2 x s32>) from %ir.rsrc, align 1, addrspace 8) 37faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_XY_OFFEN]].sub0 38faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_XY_OFFEN]].sub1 39faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr0 = COPY [[COPY6]] 40faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr1 = COPY [[COPY7]] 41faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1 42faa2c678SKrzysztof Drewniak %val = call <2 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v2f32(ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 43faa2c678SKrzysztof Drewniak ret <2 x float> %val 44faa2c678SKrzysztof Drewniak} 45faa2c678SKrzysztof Drewniak 46faa2c678SKrzysztof Drewniakdefine amdgpu_ps <3 x float> @raw_ptr_buffer_load_format_v3f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset(ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) { 47faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_load_format_v3f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset 48faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 49faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0 50faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 51faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 52faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 53faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 54faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 55faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 56faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6 57faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 58ab379378SKrzysztof Drewniak ; CHECK-NEXT: [[BUFFER_LOAD_FORMAT_XYZ_OFFEN:%[0-9]+]]:vreg_96 = BUFFER_LOAD_FORMAT_XYZ_OFFEN [[COPY4]], [[REG_SEQUENCE]], [[COPY5]], 0, 0, 0, implicit $exec :: (dereferenceable load (<3 x s32>) from %ir.rsrc, align 1, addrspace 8) 59faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_XYZ_OFFEN]].sub0 60faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_XYZ_OFFEN]].sub1 61faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_XYZ_OFFEN]].sub2 62faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr0 = COPY [[COPY6]] 63faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr1 = COPY [[COPY7]] 64faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr2 = COPY [[COPY8]] 65faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1, implicit $vgpr2 66faa2c678SKrzysztof Drewniak %val = call <3 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v3f32(ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 67faa2c678SKrzysztof Drewniak ret <3 x float> %val 68faa2c678SKrzysztof Drewniak} 69faa2c678SKrzysztof Drewniak 70faa2c678SKrzysztof Drewniakdefine amdgpu_ps <4 x float> @raw_ptr_buffer_load_format_v4f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset(ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) { 71faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_load_format_v4f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset 72faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 73faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0 74faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 75faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 76faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 77faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 78faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 79faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 80faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6 81faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 82ab379378SKrzysztof Drewniak ; CHECK-NEXT: [[BUFFER_LOAD_FORMAT_XYZW_OFFEN:%[0-9]+]]:vreg_128 = BUFFER_LOAD_FORMAT_XYZW_OFFEN [[COPY4]], [[REG_SEQUENCE]], [[COPY5]], 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s32>) from %ir.rsrc, align 1, addrspace 8) 83faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_XYZW_OFFEN]].sub0 84faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_XYZW_OFFEN]].sub1 85faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_XYZW_OFFEN]].sub2 86faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_XYZW_OFFEN]].sub3 87faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr0 = COPY [[COPY6]] 88faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr1 = COPY [[COPY7]] 89faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr2 = COPY [[COPY8]] 90faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr3 = COPY [[COPY9]] 91faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3 92faa2c678SKrzysztof Drewniak %val = call <4 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v4f32(ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 93faa2c678SKrzysztof Drewniak ret <4 x float> %val 94faa2c678SKrzysztof Drewniak} 95faa2c678SKrzysztof Drewniak 96faa2c678SKrzysztof Drewniak; Waterfall for rsrc and soffset, copy for voffset 97faa2c678SKrzysztof Drewniakdefine amdgpu_ps float @raw_ptr_buffer_load_format_f32__vgpr_rsrc__sgpr_voffset__vgpr_soffset(ptr addrspace(8) %rsrc, i32 inreg %voffset, i32 %soffset) { 98faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_load_format_f32__vgpr_rsrc__sgpr_voffset__vgpr_soffset 99faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 100faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.2(0x80000000) 101faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 102faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 103faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 104faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 105faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 106faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 107faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr2 108faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr4 109faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 110faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[COPY4]] 111faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec 112faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 113faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.2: 114faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.3(0x80000000) 115faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 116faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY]], implicit $exec 117faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 118faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 119faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 120faa2c678SKrzysztof 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 121faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1 122faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3 123faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 124faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 125faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY9]], [[COPY7]], implicit $exec 126faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec 127*c3cfbbc4Spvanhout ; 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 128faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_READFIRSTLANE_B32_4:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY5]], implicit $exec 129faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[V_READFIRSTLANE_B32_4]], [[COPY5]], implicit $exec 130*c3cfbbc4Spvanhout ; 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 131faa2c678SKrzysztof 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 132faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 133faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.3: 134faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 135faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 136ab379378SKrzysztof Drewniak ; CHECK-NEXT: [[BUFFER_LOAD_FORMAT_X_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_FORMAT_X_OFFEN [[COPY6]], [[REG_SEQUENCE1]], [[V_READFIRSTLANE_B32_4]], 0, 0, 0, implicit $exec :: (dereferenceable load (s32) from %ir.rsrc, align 1, addrspace 8) 137faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc 138faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 139faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 140faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.4: 141faa2c678SKrzysztof Drewniak ; CHECK-NEXT: successors: %bb.5(0x80000000) 142faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 143faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $exec = S_MOV_B64_term [[S_MOV_B64_]] 144faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 145faa2c678SKrzysztof Drewniak ; CHECK-NEXT: bb.5: 146faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_FORMAT_X_OFFEN]] 147faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0 148faa2c678SKrzysztof Drewniak %val = call float @llvm.amdgcn.raw.ptr.buffer.load.format.f32(ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 149faa2c678SKrzysztof Drewniak ret float %val 150faa2c678SKrzysztof Drewniak} 151faa2c678SKrzysztof Drewniak 152faa2c678SKrzysztof Drewniakdefine amdgpu_ps <4 x float> @raw_ptr_buffer_load_format_v4f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_voffset_add_4095(ptr addrspace(8) inreg %rsrc, i32 %voffset.base, i32 inreg %soffset) { 153faa2c678SKrzysztof Drewniak ; CHECK-LABEL: name: raw_ptr_buffer_load_format_v4f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_voffset_add_4095 154faa2c678SKrzysztof Drewniak ; CHECK: bb.1 (%ir-block.0): 155faa2c678SKrzysztof Drewniak ; CHECK-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0 156faa2c678SKrzysztof Drewniak ; CHECK-NEXT: {{ $}} 157faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 158faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 159faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 160faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 161faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 162faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6 163faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 164ab379378SKrzysztof Drewniak ; CHECK-NEXT: [[BUFFER_LOAD_FORMAT_XYZW_OFFEN:%[0-9]+]]:vreg_128 = BUFFER_LOAD_FORMAT_XYZW_OFFEN [[COPY4]], [[REG_SEQUENCE]], [[COPY5]], 4095, 0, 0, implicit $exec :: (dereferenceable load (<4 x s32>) from %ir.rsrc, align 1, addrspace 8) 165faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_XYZW_OFFEN]].sub0 166faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_XYZW_OFFEN]].sub1 167faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_XYZW_OFFEN]].sub2 168faa2c678SKrzysztof Drewniak ; CHECK-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_XYZW_OFFEN]].sub3 169faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr0 = COPY [[COPY6]] 170faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr1 = COPY [[COPY7]] 171faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr2 = COPY [[COPY8]] 172faa2c678SKrzysztof Drewniak ; CHECK-NEXT: $vgpr3 = COPY [[COPY9]] 173faa2c678SKrzysztof Drewniak ; CHECK-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3 174faa2c678SKrzysztof Drewniak %voffset = add i32 %voffset.base, 4095 175faa2c678SKrzysztof Drewniak %val = call <4 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v4f32(ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 0) 176faa2c678SKrzysztof Drewniak ret <4 x float> %val 177faa2c678SKrzysztof Drewniak} 178faa2c678SKrzysztof Drewniak 179faa2c678SKrzysztof Drewniakdeclare float @llvm.amdgcn.raw.ptr.buffer.load.format.f32(ptr addrspace(8), i32, i32, i32 immarg) #0 180faa2c678SKrzysztof Drewniakdeclare <2 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v2f32(ptr addrspace(8), i32, i32, i32 immarg) #0 181faa2c678SKrzysztof Drewniakdeclare <3 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v3f32(ptr addrspace(8), i32, i32, i32 immarg) #0 182faa2c678SKrzysztof Drewniakdeclare <4 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v4f32(ptr addrspace(8), i32, i32, i32 immarg) #0 183faa2c678SKrzysztof Drewniak 184faa2c678SKrzysztof Drewniakattributes #0 = { nounwind readonly } 185