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 -check-prefix=UNPACKED %s 3faa2c678SKrzysztof Drewniak; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx810 -stop-after=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=PACKED %s 4faa2c678SKrzysztof Drewniak 5faa2c678SKrzysztof Drewniakdefine amdgpu_ps half @struct_ptr_buffer_load_format_f16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset(ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 %voffset, i32 inreg %soffset) { 6faa2c678SKrzysztof Drewniak ; UNPACKED-LABEL: name: struct_ptr_buffer_load_format_f16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset 7faa2c678SKrzysztof Drewniak ; UNPACKED: bb.1 (%ir-block.0): 8faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 9faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: {{ $}} 10faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 11faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 12faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 13faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 14faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 15faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 16faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 17faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 18faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1 19ab379378SKrzysztof Drewniak ; UNPACKED-NEXT: [[BUFFER_LOAD_FORMAT_D16_X_gfx80_BOTHEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_FORMAT_D16_X_gfx80_BOTHEN [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable load (s16) from %ir.rsrc, align 1, addrspace 8) 20faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_FORMAT_D16_X_gfx80_BOTHEN]] 21faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0 22*c3cfbbc4Spvanhout ; 23faa2c678SKrzysztof Drewniak ; PACKED-LABEL: name: struct_ptr_buffer_load_format_f16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset 24faa2c678SKrzysztof Drewniak ; PACKED: bb.1 (%ir-block.0): 25faa2c678SKrzysztof Drewniak ; PACKED-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 26faa2c678SKrzysztof Drewniak ; PACKED-NEXT: {{ $}} 27faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 28faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 29faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 30faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 31faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 32faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 33faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 34faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 35faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1 36ab379378SKrzysztof Drewniak ; PACKED-NEXT: [[BUFFER_LOAD_FORMAT_D16_X_BOTHEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_FORMAT_D16_X_BOTHEN [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable load (s16) from %ir.rsrc, align 1, addrspace 8) 37faa2c678SKrzysztof Drewniak ; PACKED-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_FORMAT_D16_X_BOTHEN]] 38faa2c678SKrzysztof Drewniak ; PACKED-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0 39faa2c678SKrzysztof Drewniak %val = call half @llvm.amdgcn.struct.ptr.buffer.load.format.f16(ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 0) 40faa2c678SKrzysztof Drewniak ret half %val 41faa2c678SKrzysztof Drewniak} 42faa2c678SKrzysztof Drewniak 43faa2c678SKrzysztof Drewniakdefine amdgpu_ps <2 x half> @struct_ptr_buffer_load_format_v2f16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset(ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 %voffset, i32 inreg %soffset) { 44faa2c678SKrzysztof Drewniak ; UNPACKED-LABEL: name: struct_ptr_buffer_load_format_v2f16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset 45faa2c678SKrzysztof Drewniak ; UNPACKED: bb.1 (%ir-block.0): 46faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 47faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: {{ $}} 48faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 49faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 50faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 51faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 52faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 53faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 54faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 55faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 56faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1 57ab379378SKrzysztof Drewniak ; UNPACKED-NEXT: [[BUFFER_LOAD_FORMAT_D16_XY_gfx80_BOTHEN:%[0-9]+]]:vreg_64 = BUFFER_LOAD_FORMAT_D16_XY_gfx80_BOTHEN [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable load (<2 x s16>) from %ir.rsrc, align 1, addrspace 8) 58faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_D16_XY_gfx80_BOTHEN]].sub0 59faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_D16_XY_gfx80_BOTHEN]].sub1 60faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 65535 61faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 62faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY7]], [[COPY9]], implicit $exec 63faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY10:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 64faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_AND_B32_e64_1:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY8]], [[COPY10]], implicit $exec 65faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 16 66faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY11:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_1]] 67faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_LSHLREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B32_e64 [[COPY11]], [[V_AND_B32_e64_1]], implicit $exec 68faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[V_AND_B32_e64_]], [[V_LSHLREV_B32_e64_]], implicit $exec 69faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: $vgpr0 = COPY [[V_OR_B32_e64_]] 70faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0 71*c3cfbbc4Spvanhout ; 72faa2c678SKrzysztof Drewniak ; PACKED-LABEL: name: struct_ptr_buffer_load_format_v2f16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset 73faa2c678SKrzysztof Drewniak ; PACKED: bb.1 (%ir-block.0): 74faa2c678SKrzysztof Drewniak ; PACKED-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 75faa2c678SKrzysztof Drewniak ; PACKED-NEXT: {{ $}} 76faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 77faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 78faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 79faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 80faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 81faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 82faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 83faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 84faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1 85ab379378SKrzysztof Drewniak ; PACKED-NEXT: [[BUFFER_LOAD_FORMAT_D16_XY_BOTHEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_FORMAT_D16_XY_BOTHEN [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable load (<2 x s16>) from %ir.rsrc, align 1, addrspace 8) 86faa2c678SKrzysztof Drewniak ; PACKED-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_FORMAT_D16_XY_BOTHEN]] 87faa2c678SKrzysztof Drewniak ; PACKED-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0 88faa2c678SKrzysztof Drewniak %val = call <2 x half> @llvm.amdgcn.struct.ptr.buffer.load.format.v2f16(ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 0) 89faa2c678SKrzysztof Drewniak ret <2 x half> %val 90faa2c678SKrzysztof Drewniak} 91faa2c678SKrzysztof Drewniak 92faa2c678SKrzysztof Drewniak; FIXME: Crashes 93faa2c678SKrzysztof Drewniak; define amdgpu_ps <3 x half> @struct_ptr_buffer_load_format_v3f16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset(ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 %voffset, i32 inreg %soffset) { 94faa2c678SKrzysztof Drewniak; %val = call <3 x half> @llvm.amdgcn.struct.ptr.buffer.load.format.v3f16(ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 0) 95faa2c678SKrzysztof Drewniak; ret <3 x half> %val 96faa2c678SKrzysztof Drewniak; } 97faa2c678SKrzysztof Drewniak 98faa2c678SKrzysztof Drewniakdefine amdgpu_ps <4 x half> @struct_ptr_buffer_load_format_v4f16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset(ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 %voffset, i32 inreg %soffset) { 99faa2c678SKrzysztof Drewniak ; UNPACKED-LABEL: name: struct_ptr_buffer_load_format_v4f16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset 100faa2c678SKrzysztof Drewniak ; UNPACKED: bb.1 (%ir-block.0): 101faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 102faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: {{ $}} 103faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 104faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 105faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 106faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 107faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 108faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 109faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 110faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 111faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1 112ab379378SKrzysztof Drewniak ; UNPACKED-NEXT: [[BUFFER_LOAD_FORMAT_D16_XYZW_gfx80_BOTHEN:%[0-9]+]]:vreg_128 = BUFFER_LOAD_FORMAT_D16_XYZW_gfx80_BOTHEN [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s16>) from %ir.rsrc, align 1, addrspace 8) 113faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_D16_XYZW_gfx80_BOTHEN]].sub0 114faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_D16_XYZW_gfx80_BOTHEN]].sub1 115faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_D16_XYZW_gfx80_BOTHEN]].sub2 116faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY10:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_D16_XYZW_gfx80_BOTHEN]].sub3 117faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 65535 118faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY11:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 119faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY7]], [[COPY11]], implicit $exec 120faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY12:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 121faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_AND_B32_e64_1:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY8]], [[COPY12]], implicit $exec 122faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 16 123faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY13:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_1]] 124faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_LSHLREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B32_e64 [[COPY13]], [[V_AND_B32_e64_1]], implicit $exec 125faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[V_AND_B32_e64_]], [[V_LSHLREV_B32_e64_]], implicit $exec 126faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY14:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 127faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_AND_B32_e64_2:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY9]], [[COPY14]], implicit $exec 128faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY15:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 129faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_AND_B32_e64_3:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY10]], [[COPY15]], implicit $exec 130faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY16:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_1]] 131faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_LSHLREV_B32_e64_1:%[0-9]+]]:vgpr_32 = V_LSHLREV_B32_e64 [[COPY16]], [[V_AND_B32_e64_3]], implicit $exec 132faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_OR_B32_e64_1:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[V_AND_B32_e64_2]], [[V_LSHLREV_B32_e64_1]], implicit $exec 133faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: $vgpr0 = COPY [[V_OR_B32_e64_]] 134faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: $vgpr1 = COPY [[V_OR_B32_e64_1]] 135faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1 136*c3cfbbc4Spvanhout ; 137faa2c678SKrzysztof Drewniak ; PACKED-LABEL: name: struct_ptr_buffer_load_format_v4f16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset 138faa2c678SKrzysztof Drewniak ; PACKED: bb.1 (%ir-block.0): 139faa2c678SKrzysztof Drewniak ; PACKED-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 140faa2c678SKrzysztof Drewniak ; PACKED-NEXT: {{ $}} 141faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 142faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 143faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 144faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 145faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 146faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 147faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 148faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 149faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1 150ab379378SKrzysztof Drewniak ; PACKED-NEXT: [[BUFFER_LOAD_FORMAT_D16_XYZW_BOTHEN:%[0-9]+]]:vreg_64 = BUFFER_LOAD_FORMAT_D16_XYZW_BOTHEN [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s16>) from %ir.rsrc, align 1, addrspace 8) 151faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_D16_XYZW_BOTHEN]].sub0 152faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_D16_XYZW_BOTHEN]].sub1 153faa2c678SKrzysztof Drewniak ; PACKED-NEXT: $vgpr0 = COPY [[COPY7]] 154faa2c678SKrzysztof Drewniak ; PACKED-NEXT: $vgpr1 = COPY [[COPY8]] 155faa2c678SKrzysztof Drewniak ; PACKED-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1 156faa2c678SKrzysztof Drewniak %val = call <4 x half> @llvm.amdgcn.struct.ptr.buffer.load.format.v4f16(ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 0) 157faa2c678SKrzysztof Drewniak ret <4 x half> %val 158faa2c678SKrzysztof Drewniak} 159faa2c678SKrzysztof Drewniak 160faa2c678SKrzysztof Drewniak; Waterfall for rsrc and soffset, copy for voffset 161faa2c678SKrzysztof Drewniakdefine amdgpu_ps <4 x half> @struct_ptr_buffer_load_format_v4f16__vpr_rsrc__sgpr_vindex__sgpr_voffset__vgpr_soffset(ptr addrspace(8) %rsrc, i32 inreg %vindex, i32 inreg %voffset, i32 %soffset) { 162faa2c678SKrzysztof Drewniak ; UNPACKED-LABEL: name: struct_ptr_buffer_load_format_v4f16__vpr_rsrc__sgpr_vindex__sgpr_voffset__vgpr_soffset 163faa2c678SKrzysztof Drewniak ; UNPACKED: bb.1 (%ir-block.0): 164faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: successors: %bb.2(0x80000000) 165faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: liveins: $sgpr2, $sgpr3, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 166faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: {{ $}} 167faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 168faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 169faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 170faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 171faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr2 172faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr3 173faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr4 174faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 175faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[COPY4]] 176faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[COPY5]] 177faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec 178faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: {{ $}} 179faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: bb.2: 180faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: successors: %bb.3(0x80000000) 181faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: {{ $}} 182faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY]], implicit $exec 183faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 184faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 185faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 186faa2c678SKrzysztof Drewniak ; UNPACKED-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 187faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY9:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1 188faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY10:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3 189faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY11:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 190faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY12:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 191faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY11]], [[COPY9]], implicit $exec 192faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY12]], [[COPY10]], implicit $exec 193*c3cfbbc4Spvanhout ; UNPACKED-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 194faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_READFIRSTLANE_B32_4:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY6]], implicit $exec 195faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[V_READFIRSTLANE_B32_4]], [[COPY6]], implicit $exec 196*c3cfbbc4Spvanhout ; UNPACKED-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 197faa2c678SKrzysztof Drewniak ; UNPACKED-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 198faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: {{ $}} 199faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: bb.3: 200faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 201faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: {{ $}} 202faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY7]], %subreg.sub0, [[COPY8]], %subreg.sub1 203ab379378SKrzysztof Drewniak ; UNPACKED-NEXT: [[BUFFER_LOAD_FORMAT_D16_XYZW_gfx80_BOTHEN:%[0-9]+]]:vreg_128 = BUFFER_LOAD_FORMAT_D16_XYZW_gfx80_BOTHEN [[REG_SEQUENCE2]], [[REG_SEQUENCE1]], [[V_READFIRSTLANE_B32_4]], 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s16>) from %ir.rsrc, align 1, addrspace 8) 204faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc 205faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 206faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: {{ $}} 207faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: bb.4: 208faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: successors: %bb.5(0x80000000) 209faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: {{ $}} 210faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: $exec = S_MOV_B64_term [[S_MOV_B64_]] 211faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: {{ $}} 212faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: bb.5: 213faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY13:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_D16_XYZW_gfx80_BOTHEN]].sub0 214faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY14:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_D16_XYZW_gfx80_BOTHEN]].sub1 215faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY15:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_D16_XYZW_gfx80_BOTHEN]].sub2 216faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY16:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_D16_XYZW_gfx80_BOTHEN]].sub3 217faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 65535 218faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY17:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 219faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY13]], [[COPY17]], implicit $exec 220faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY18:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 221faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_AND_B32_e64_1:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY14]], [[COPY18]], implicit $exec 222faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 16 223faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY19:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_1]] 224faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_LSHLREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHLREV_B32_e64 [[COPY19]], [[V_AND_B32_e64_1]], implicit $exec 225faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[V_AND_B32_e64_]], [[V_LSHLREV_B32_e64_]], implicit $exec 226faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY20:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 227faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_AND_B32_e64_2:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY15]], [[COPY20]], implicit $exec 228faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY21:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]] 229faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_AND_B32_e64_3:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY16]], [[COPY21]], implicit $exec 230faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY22:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_1]] 231faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_LSHLREV_B32_e64_1:%[0-9]+]]:vgpr_32 = V_LSHLREV_B32_e64 [[COPY22]], [[V_AND_B32_e64_3]], implicit $exec 232faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[V_OR_B32_e64_1:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[V_AND_B32_e64_2]], [[V_LSHLREV_B32_e64_1]], implicit $exec 233faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: $vgpr0 = COPY [[V_OR_B32_e64_]] 234faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: $vgpr1 = COPY [[V_OR_B32_e64_1]] 235faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1 236*c3cfbbc4Spvanhout ; 237faa2c678SKrzysztof Drewniak ; PACKED-LABEL: name: struct_ptr_buffer_load_format_v4f16__vpr_rsrc__sgpr_vindex__sgpr_voffset__vgpr_soffset 238faa2c678SKrzysztof Drewniak ; PACKED: bb.1 (%ir-block.0): 239faa2c678SKrzysztof Drewniak ; PACKED-NEXT: successors: %bb.2(0x80000000) 240faa2c678SKrzysztof Drewniak ; PACKED-NEXT: liveins: $sgpr2, $sgpr3, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 241faa2c678SKrzysztof Drewniak ; PACKED-NEXT: {{ $}} 242faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 243faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 244faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 245faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3 246faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr2 247faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr3 248faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr4 249faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 250faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[COPY4]] 251faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[COPY5]] 252faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec 253faa2c678SKrzysztof Drewniak ; PACKED-NEXT: {{ $}} 254faa2c678SKrzysztof Drewniak ; PACKED-NEXT: bb.2: 255faa2c678SKrzysztof Drewniak ; PACKED-NEXT: successors: %bb.3(0x80000000) 256faa2c678SKrzysztof Drewniak ; PACKED-NEXT: {{ $}} 257faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY]], implicit $exec 258faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec 259faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec 260faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec 261faa2c678SKrzysztof Drewniak ; PACKED-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 262faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY9:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1 263faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY10:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3 264faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY11:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1 265faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY12:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3 266faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY11]], [[COPY9]], implicit $exec 267faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[COPY12]], [[COPY10]], implicit $exec 268*c3cfbbc4Spvanhout ; PACKED-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 269faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[V_READFIRSTLANE_B32_4:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY6]], implicit $exec 270faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[V_READFIRSTLANE_B32_4]], [[COPY6]], implicit $exec 271*c3cfbbc4Spvanhout ; PACKED-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 272faa2c678SKrzysztof Drewniak ; PACKED-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 273faa2c678SKrzysztof Drewniak ; PACKED-NEXT: {{ $}} 274faa2c678SKrzysztof Drewniak ; PACKED-NEXT: bb.3: 275faa2c678SKrzysztof Drewniak ; PACKED-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 276faa2c678SKrzysztof Drewniak ; PACKED-NEXT: {{ $}} 277faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY7]], %subreg.sub0, [[COPY8]], %subreg.sub1 278ab379378SKrzysztof Drewniak ; PACKED-NEXT: [[BUFFER_LOAD_FORMAT_D16_XYZW_BOTHEN:%[0-9]+]]:vreg_64 = BUFFER_LOAD_FORMAT_D16_XYZW_BOTHEN [[REG_SEQUENCE2]], [[REG_SEQUENCE1]], [[V_READFIRSTLANE_B32_4]], 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s16>) from %ir.rsrc, align 1, addrspace 8) 279faa2c678SKrzysztof Drewniak ; PACKED-NEXT: $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc 280faa2c678SKrzysztof Drewniak ; PACKED-NEXT: SI_WATERFALL_LOOP %bb.2, implicit $exec 281faa2c678SKrzysztof Drewniak ; PACKED-NEXT: {{ $}} 282faa2c678SKrzysztof Drewniak ; PACKED-NEXT: bb.4: 283faa2c678SKrzysztof Drewniak ; PACKED-NEXT: successors: %bb.5(0x80000000) 284faa2c678SKrzysztof Drewniak ; PACKED-NEXT: {{ $}} 285faa2c678SKrzysztof Drewniak ; PACKED-NEXT: $exec = S_MOV_B64_term [[S_MOV_B64_]] 286faa2c678SKrzysztof Drewniak ; PACKED-NEXT: {{ $}} 287faa2c678SKrzysztof Drewniak ; PACKED-NEXT: bb.5: 288faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY13:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_D16_XYZW_BOTHEN]].sub0 289faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY14:%[0-9]+]]:vgpr_32 = COPY [[BUFFER_LOAD_FORMAT_D16_XYZW_BOTHEN]].sub1 290faa2c678SKrzysztof Drewniak ; PACKED-NEXT: $vgpr0 = COPY [[COPY13]] 291faa2c678SKrzysztof Drewniak ; PACKED-NEXT: $vgpr1 = COPY [[COPY14]] 292faa2c678SKrzysztof Drewniak ; PACKED-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0, implicit $vgpr1 293faa2c678SKrzysztof Drewniak %val = call <4 x half> @llvm.amdgcn.struct.ptr.buffer.load.format.v4f16(ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 0) 294faa2c678SKrzysztof Drewniak ret <4 x half> %val 295faa2c678SKrzysztof Drewniak} 296faa2c678SKrzysztof Drewniak 297faa2c678SKrzysztof Drewniakdefine amdgpu_ps half @struct_ptr_buffer_load_format_f16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset_voffsset_add_4095(ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 %voffset.base, i32 inreg %soffset) { 298faa2c678SKrzysztof Drewniak ; UNPACKED-LABEL: name: struct_ptr_buffer_load_format_f16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset_voffsset_add_4095 299faa2c678SKrzysztof Drewniak ; UNPACKED: bb.1 (%ir-block.0): 300faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 301faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: {{ $}} 302faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 303faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 304faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 305faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 306faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 307faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 308faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 309faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 310faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1 311ab379378SKrzysztof Drewniak ; UNPACKED-NEXT: [[BUFFER_LOAD_FORMAT_D16_X_gfx80_BOTHEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_FORMAT_D16_X_gfx80_BOTHEN [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY6]], 4095, 0, 0, implicit $exec :: (dereferenceable load (s16) from %ir.rsrc, align 1, addrspace 8) 312faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_FORMAT_D16_X_gfx80_BOTHEN]] 313faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0 314*c3cfbbc4Spvanhout ; 315faa2c678SKrzysztof Drewniak ; PACKED-LABEL: name: struct_ptr_buffer_load_format_f16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset_voffsset_add_4095 316faa2c678SKrzysztof Drewniak ; PACKED: bb.1 (%ir-block.0): 317faa2c678SKrzysztof Drewniak ; PACKED-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 318faa2c678SKrzysztof Drewniak ; PACKED-NEXT: {{ $}} 319faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 320faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 321faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 322faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 323faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 324faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 325faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 326faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 327faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1 328ab379378SKrzysztof Drewniak ; PACKED-NEXT: [[BUFFER_LOAD_FORMAT_D16_X_BOTHEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_FORMAT_D16_X_BOTHEN [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY6]], 4095, 0, 0, implicit $exec :: (dereferenceable load (s16) from %ir.rsrc, align 1, addrspace 8) 329faa2c678SKrzysztof Drewniak ; PACKED-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_FORMAT_D16_X_BOTHEN]] 330faa2c678SKrzysztof Drewniak ; PACKED-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0 331faa2c678SKrzysztof Drewniak %voffset = add i32 %voffset.base, 4095 332faa2c678SKrzysztof Drewniak %val = call half @llvm.amdgcn.struct.ptr.buffer.load.format.f16(ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 0) 333faa2c678SKrzysztof Drewniak ret half %val 334faa2c678SKrzysztof Drewniak} 335faa2c678SKrzysztof Drewniak 336faa2c678SKrzysztof Drewniakdefine amdgpu_ps half @struct_ptr_buffer_load_format_i16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset(ptr addrspace(8) inreg %rsrc, i32 %vindex, i32 %voffset, i32 inreg %soffset) { 337faa2c678SKrzysztof Drewniak ; UNPACKED-LABEL: name: struct_ptr_buffer_load_format_i16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset 338faa2c678SKrzysztof Drewniak ; UNPACKED: bb.1 (%ir-block.0): 339faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 340faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: {{ $}} 341faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 342faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 343faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 344faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 345faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 346faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 347faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 348faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 349faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1 350ab379378SKrzysztof Drewniak ; UNPACKED-NEXT: [[BUFFER_LOAD_FORMAT_D16_X_gfx80_BOTHEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_FORMAT_D16_X_gfx80_BOTHEN [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable load (s16) from %ir.rsrc, align 1, addrspace 8) 351faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_FORMAT_D16_X_gfx80_BOTHEN]] 352faa2c678SKrzysztof Drewniak ; UNPACKED-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0 353*c3cfbbc4Spvanhout ; 354faa2c678SKrzysztof Drewniak ; PACKED-LABEL: name: struct_ptr_buffer_load_format_i16__sgpr_rsrc__vgpr_vindex__vgpr_voffset__sgpr_soffset 355faa2c678SKrzysztof Drewniak ; PACKED: bb.1 (%ir-block.0): 356faa2c678SKrzysztof Drewniak ; PACKED-NEXT: liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1 357faa2c678SKrzysztof Drewniak ; PACKED-NEXT: {{ $}} 358faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr2 359faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr3 360faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr4 361faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr5 362faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0 363faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1 364faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6 365faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3 366faa2c678SKrzysztof Drewniak ; PACKED-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1 367ab379378SKrzysztof Drewniak ; PACKED-NEXT: [[BUFFER_LOAD_FORMAT_D16_X_BOTHEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_FORMAT_D16_X_BOTHEN [[REG_SEQUENCE1]], [[REG_SEQUENCE]], [[COPY6]], 0, 0, 0, implicit $exec :: (dereferenceable load (s16) from %ir.rsrc, align 1, addrspace 8) 368faa2c678SKrzysztof Drewniak ; PACKED-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_FORMAT_D16_X_BOTHEN]] 369faa2c678SKrzysztof Drewniak ; PACKED-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0 370faa2c678SKrzysztof Drewniak %val = call i16 @llvm.amdgcn.struct.ptr.buffer.load.format.i16(ptr addrspace(8) %rsrc, i32 %vindex, i32 %voffset, i32 %soffset, i32 0) 371faa2c678SKrzysztof Drewniak %fval = bitcast i16 %val to half 372faa2c678SKrzysztof Drewniak ret half %fval 373faa2c678SKrzysztof Drewniak} 374faa2c678SKrzysztof Drewniak 375faa2c678SKrzysztof Drewniakdeclare half @llvm.amdgcn.struct.ptr.buffer.load.format.f16(ptr addrspace(8), i32, i32, i32, i32 immarg) #0 376faa2c678SKrzysztof Drewniakdeclare <2 x half> @llvm.amdgcn.struct.ptr.buffer.load.format.v2f16(ptr addrspace(8), i32, i32, i32, i32 immarg) #0 377faa2c678SKrzysztof Drewniakdeclare <3 x half> @llvm.amdgcn.struct.ptr.buffer.load.format.v3f16(ptr addrspace(8), i32, i32, i32, i32 immarg) #0 378faa2c678SKrzysztof Drewniakdeclare <4 x half> @llvm.amdgcn.struct.ptr.buffer.load.format.v4f16(ptr addrspace(8), i32, i32, i32, i32 immarg) #0 379faa2c678SKrzysztof Drewniakdeclare i16 @llvm.amdgcn.struct.ptr.buffer.load.format.i16(ptr addrspace(8), i32, i32, i32, i32 immarg) #0 380faa2c678SKrzysztof Drewniak 381faa2c678SKrzysztof Drewniakattributes #0 = { nounwind readonly } 382