488 lines · plain
1# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass si-load-store-opt -o - %s | FileCheck -check-prefix=GFX9 %s2 3# GFX9-LABEL: name: image_load_merged_v1v34# GFX9: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_V4_V4 %5, %3, 15, 0, 0, 0, 0, 0, -1, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), align 4, addrspace 4)5# GFX9: %{{[0-9]+}}:vgpr_32 = COPY %8.sub06# GFX9: %{{[0-9]+}}:vreg_96 = COPY killed %8.sub1_sub2_sub37 8name: image_load_merged_v1v39body: |10 bb.0.entry:11 %0:sgpr_64 = COPY $sgpr0_sgpr112 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 013 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr9914 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 015 %4:vgpr_32 = COPY %2.sub316 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))17 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5:vreg_128, %3:sgpr_256, 1, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)18 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5:vreg_128, %3:sgpr_256, 14, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)19...20---21 22# GFX9-LABEL: name: image_load_merged_v1v3_reversed23# GFX9: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_V4_V4 %5, %3, 15, 0, 0, 0, 0, 0, -1, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), addrspace 4)24# GFX9: %{{[0-9]+}}:vgpr_32 = COPY %8.sub325# GFX9: %{{[0-9]+}}:vreg_96 = COPY killed %8.sub0_sub1_sub226 27name: image_load_merged_v1v3_reversed28body: |29 bb.0.entry:30 %0:sgpr_64 = COPY $sgpr0_sgpr131 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 032 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr9933 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 034 %4:vgpr_32 = COPY %2.sub335 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))36 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5:vreg_128, %3:sgpr_256, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)37 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5:vreg_128, %3:sgpr_256, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)38...39---40 41# GFX9-LABEL: name: image_load_merged_v2v242# GFX9: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_V4_V4 %5, %3, 15, 0, 0, 0, 0, 0, -1, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), addrspace 4)43# GFX9: %{{[0-9]+}}:vreg_64 = COPY %8.sub0_sub144# GFX9: %{{[0-9]+}}:vreg_64 = COPY killed %8.sub2_sub345 46name: image_load_merged_v2v247body: |48 bb.0.entry:49 %0:sgpr_64 = COPY $sgpr0_sgpr150 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 051 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr9952 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 053 %4:vgpr_32 = COPY %2.sub354 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))55 %6:vreg_64 = IMAGE_LOAD_V2_V4 %5:vreg_128, %3:sgpr_256, 3, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s64), align 16, addrspace 4)56 %7:vreg_64 = IMAGE_LOAD_V2_V4 %5:vreg_128, %3:sgpr_256, 12, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s64), align 16, addrspace 4)57...58---59 60# GFX9-LABEL: name: image_load_merged_v2v2_reversed61# GFX9: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_V4_V4 %5, %3, 15, 0, 0, 0, 0, 0, -1, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), addrspace 4)62# GFX9: %{{[0-9]+}}:vreg_64 = COPY %8.sub2_sub363# GFX9: %{{[0-9]+}}:vreg_64 = COPY killed %8.sub0_sub164 65name: image_load_merged_v2v2_reversed66body: |67 bb.0.entry:68 %0:sgpr_64 = COPY $sgpr0_sgpr169 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 070 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr9971 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 072 %4:vgpr_32 = COPY %2.sub373 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))74 %6:vreg_64 = IMAGE_LOAD_V2_V4 %5:vreg_128, %3:sgpr_256, 12, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s64), align 16, addrspace 4)75 %7:vreg_64 = IMAGE_LOAD_V2_V4 %5:vreg_128, %3:sgpr_256, 3, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s64), align 16, addrspace 4)76...77---78 79# GFX9-LABEL: name: image_load_merged_v3v180# GFX9: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_V4_V4 %5, %3, 15, 0, 0, 0, 0, 0, -1, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), addrspace 4)81# GFX9: %{{[0-9]+}}:vreg_96 = COPY %8.sub0_sub1_sub282# GFX9: %{{[0-9]+}}:vgpr_32 = COPY killed %8.sub383 84name: image_load_merged_v3v185body: |86 bb.0.entry:87 %0:sgpr_64 = COPY $sgpr0_sgpr188 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 089 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr9990 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 091 %4:vgpr_32 = COPY %2.sub392 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))93 %6:vreg_96 = IMAGE_LOAD_V3_V4 %5:vreg_128, %3:sgpr_256, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)94 %7:vgpr_32 = IMAGE_LOAD_V1_V4 %5:vreg_128, %3:sgpr_256, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)95...96---97 98# GFX9-LABEL: name: image_load_merged_v3v1_reversed99# GFX9: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_V4_V4 %5, %3, 15, 0, 0, 0, 0, 0, -1, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), align 4, addrspace 4)100# GFX9: %{{[0-9]+}}:vreg_96 = COPY %8.sub1_sub2_sub3101# GFX9: %{{[0-9]+}}:vgpr_32 = COPY killed %8.sub0102 103name: image_load_merged_v3v1_reversed104body: |105 bb.0.entry:106 %0:sgpr_64 = COPY $sgpr0_sgpr1107 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0108 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99109 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0110 %4:vgpr_32 = COPY %2.sub3111 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))112 %6:vreg_96 = IMAGE_LOAD_V3_V4 %5:vreg_128, %3:sgpr_256, 14, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)113 %7:vgpr_32 = IMAGE_LOAD_V1_V4 %5:vreg_128, %3:sgpr_256, 1, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)114...115---116 117# GFX9-LABEL: name: image_load_divided_merged118# GFX9: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_V4_V4 %5, %3, 15, 0, 0, 0, 0, 0, -1, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), addrspace 4)119 120name: image_load_divided_merged121body: |122 bb.0.entry:123 %0:sgpr_64 = COPY $sgpr0_sgpr1124 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0125 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99126 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0127 %4:vgpr_32 = COPY %2.sub3128 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))129 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5:vreg_128, %3:sgpr_256, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)130 %7:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))131 %8:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))132 %9:vreg_96 = IMAGE_LOAD_V3_V4 %7:vreg_128, %3:sgpr_256, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)133 %10:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))134 %11:vreg_96 = IMAGE_LOAD_V3_V4 %5:vreg_128, %3:sgpr_256, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)135...136---137 138# GFX9-LABEL: name: image_load_divided_not_merged139# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)140# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)141 142name: image_load_divided_not_merged143body: |144 bb.0.entry:145 %0:sgpr_64 = COPY $sgpr0_sgpr1146 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0147 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99148 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0149 %4:vreg_128 = COPY %2150 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))151 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5:vreg_128, %3:sgpr_256, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)152 IMAGE_STORE_V4_V4 %4:vreg_128, %5:vreg_128, %3:sgpr_256, 15, -1, 0, 0, 0, 0, 0, 0, implicit $exec :: (store (s128))153 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5:vreg_128, %3:sgpr_256, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)154...155---156 157# GFX9-LABEL: name: image_load_dmask_overlapped_not_merged158# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 4, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)159# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)160 161name: image_load_dmask_overlapped_not_merged162body: |163 bb.0.entry:164 %0:sgpr_64 = COPY $sgpr0_sgpr1165 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0166 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99167 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0168 %4:vgpr_32 = COPY %2.sub3169 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))170 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5:vreg_128, %3:sgpr_256, 4, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)171 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5:vreg_128, %3:sgpr_256, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)172...173---174 175# GFX9-LABEL: name: image_load_dmask_zero_not_merged176# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 0, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)177# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 0, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)178 179name: image_load_dmask_zero_not_merged180body: |181 bb.0.entry:182 %0:sgpr_64 = COPY $sgpr0_sgpr1183 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0184 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99185 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0186 %4:vgpr_32 = COPY %2.sub3187 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))188 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5:vreg_128, %3:sgpr_256, 0, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)189 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5:vreg_128, %3:sgpr_256, 0, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)190...191---192 193# GFX9-LABEL: name: image_load_dmask_not_disjoint_not_merged194# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 4, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)195# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 11, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)196 197name: image_load_dmask_not_disjoint_not_merged198body: |199 bb.0.entry:200 %0:sgpr_64 = COPY $sgpr0_sgpr1201 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0202 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99203 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0204 %4:vgpr_32 = COPY %2.sub3205 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))206 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5:vreg_128, %3:sgpr_256, 4, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)207 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5:vreg_128, %3:sgpr_256, 11, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)208...209---210 211# GFX9-LABEL: name: image_load_not_merged_0212# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)213# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %6, %3, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)214 215name: image_load_not_merged_0216body: |217 bb.0.entry:218 %0:sgpr_64 = COPY $sgpr0_sgpr1219 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0220 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99221 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0222 %4:vgpr_32 = COPY %2.sub3223 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))224 %6:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 1, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))225 %7:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)226 %8:vreg_96 = IMAGE_LOAD_V3_V4 %6, %3, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)227...228---229 230# GFX9-LABEL: name: image_load_not_merged_1231# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %6, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)232# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %6, %4, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)233 234name: image_load_not_merged_1235body: |236 bb.0.entry:237 %0:sgpr_64 = COPY $sgpr0_sgpr1238 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0239 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99240 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0241 %4:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0242 %5:vgpr_32 = COPY %2.sub3243 %6:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))244 %7:vgpr_32 = IMAGE_LOAD_V1_V4 %6, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)245 %8:vreg_96 = IMAGE_LOAD_V3_V4 %6, %4, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)246...247---248 249# GFX9-LABEL: name: image_load_not_merged_10250# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)251# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, -1, 1, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)252 253name: image_load_not_merged_10254body: |255 bb.0.entry:256 %0:sgpr_64 = COPY $sgpr0_sgpr1257 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0258 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99259 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0260 %4:vgpr_32 = COPY %2.sub3261 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))262 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)263 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, -1, 1, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)264...265---266 267# GFX9-LABEL: name: image_load_not_merged_3268# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)269# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 1, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)270 271name: image_load_not_merged_3272body: |273 bb.0.entry:274 %0:sgpr_64 = COPY $sgpr0_sgpr1275 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0276 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99277 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0278 %4:vgpr_32 = COPY %2.sub3279 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))280 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)281 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 1, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)282...283---284 285# GFX9-LABEL: name: image_load_not_merged_4286# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)287# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 1, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)288 289name: image_load_not_merged_4290body: |291 bb.0.entry:292 %0:sgpr_64 = COPY $sgpr0_sgpr1293 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0294 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99295 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0296 %4:vgpr_32 = COPY %2.sub3297 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))298 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)299 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 1, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)300...301---302 303# GFX9-LABEL: name: image_load_not_merged_5304# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)305# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 1, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)306 307name: image_load_not_merged_5308body: |309 bb.0.entry:310 %0:sgpr_64 = COPY $sgpr0_sgpr1311 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0312 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99313 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0314 %4:vgpr_32 = COPY %2.sub3315 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))316 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)317 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 1, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)318...319---320 321# GFX9-LABEL: name: image_load_not_merged_6322# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)323# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 1, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)324 325name: image_load_not_merged_6326body: |327 bb.0.entry:328 %0:sgpr_64 = COPY $sgpr0_sgpr1329 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0330 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99331 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0332 %4:vgpr_32 = COPY %2.sub3333 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))334 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)335 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 1, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)336...337---338 339# GFX9-LABEL: name: image_load_not_merged_7340# GFX9: %{{[0-9]+}}:vreg_64 = IMAGE_LOAD_V2_V4 %5, %3, 8, 0, 0, 0, 1, 0, -1, 0, implicit $exec :: (dereferenceable load (s64), align 16, addrspace 4)341# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)342 343name: image_load_not_merged_7344body: |345 bb.0.entry:346 %0:sgpr_64 = COPY $sgpr0_sgpr1347 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0348 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99349 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0350 %4:vgpr_32 = COPY %2.sub3351 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))352 %6:vreg_64 = IMAGE_LOAD_V2_V4 %5, %3, 8, 0, 0, 0, 1, 0, -1, 0, implicit $exec :: (dereferenceable load (s64), align 16, addrspace 4)353 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)354...355---356 357# GFX9-LABEL: name: image_load_not_merged_8358# GFX9: %{{[0-9]+}}:vreg_64 = IMAGE_LOAD_V2_V4 %5, %3, 8, 0, 0, 0, 0, 1, -1, 0, implicit $exec :: (dereferenceable load (s64), align 16, addrspace 4)359# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)360 361name: image_load_not_merged_8362body: |363 bb.0.entry:364 %0:sgpr_64 = COPY $sgpr0_sgpr1365 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0366 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99367 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0368 %4:vgpr_32 = COPY %2.sub3369 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))370 %6:vreg_64 = IMAGE_LOAD_V2_V4 %5, %3, 8, 0, 0, 0, 0, 1, -1, 0, implicit $exec :: (dereferenceable load (s64), align 16, addrspace 4)371 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)372...373---374 375# GFX9-LABEL: name: image_load_not_merged_9376# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)377# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)378 379name: image_load_not_merged_9380body: |381 bb.0.entry:382 %0:sgpr_64 = COPY $sgpr0_sgpr1383 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0384 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99385 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0386 %4:vgpr_32 = COPY %2.sub3387 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))388 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)389 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)390...391---392 393# GFX9-LABEL: name: image_load_mip_merged_v1v3394# GFX9: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_MIP_V4_V4 %5, %3, 15, 0, 0, 0, 0, 0, -1, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), align 4, addrspace 4)395# GFX9: %{{[0-9]+}}:vgpr_32 = COPY %8.sub0396# GFX9: %{{[0-9]+}}:vreg_96 = COPY killed %8.sub1_sub2_sub3397 398name: image_load_mip_merged_v1v3399body: |400 bb.0.entry:401 %0:sgpr_64 = COPY $sgpr0_sgpr1402 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0403 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99404 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0405 %4:vgpr_32 = COPY %2.sub3406 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))407 %6:vgpr_32 = IMAGE_LOAD_MIP_V1_V4 %5:vreg_128, %3:sgpr_256, 1, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)408 %7:vreg_96 = IMAGE_LOAD_MIP_V3_V4 %5:vreg_128, %3:sgpr_256, 14, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)409...410---411 412# GFX9-LABEL: name: image_load_mip_pck_merged_v1v3413# GFX9: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_MIP_PCK_V4_V4 %5, %3, 15, 0, 0, 0, 0, 0, -1, implicit $exec, implicit $exec :: (dereferenceable load (s128), align 4, addrspace 4)414# GFX9: %{{[0-9]+}}:vgpr_32 = COPY %8.sub0415# GFX9: %{{[0-9]+}}:vreg_96 = COPY killed %8.sub1_sub2_sub3416 417name: image_load_mip_pck_merged_v1v3418body: |419 bb.0.entry:420 %0:sgpr_64 = COPY $sgpr0_sgpr1421 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0422 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99423 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0424 %4:vgpr_32 = COPY %2.sub3425 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))426 %6:vgpr_32 = IMAGE_LOAD_MIP_PCK_V1_V4 %5:vreg_128, %3:sgpr_256, 1, 0, 0, 0, 0, 0, -1, implicit $exec :: (dereferenceable load (s32), addrspace 4)427 %7:vreg_96 = IMAGE_LOAD_MIP_PCK_V3_V4 %5:vreg_128, %3:sgpr_256, 14, 0, 0, 0, 0, 0, -1, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)428...429---430 431# GFX9-LABEL: name: image_load_mip_pck_sgn_merged_v1v3432# GFX9: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_MIP_PCK_SGN_V4_V4 %5, %3, 15, 0, 0, 0, 0, 0, -1, implicit $exec, implicit $exec :: (dereferenceable load (s128), align 4, addrspace 4)433# GFX9: %{{[0-9]+}}:vgpr_32 = COPY %8.sub0434# GFX9: %{{[0-9]+}}:vreg_96 = COPY killed %8.sub1_sub2_sub3435 436name: image_load_mip_pck_sgn_merged_v1v3437body: |438 bb.0.entry:439 %0:sgpr_64 = COPY $sgpr0_sgpr1440 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0441 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99442 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0443 %4:vgpr_32 = COPY %2.sub3444 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))445 %6:vgpr_32 = IMAGE_LOAD_MIP_PCK_SGN_V1_V4 %5:vreg_128, %3:sgpr_256, 1, 0, 0, 0, 0, 0, -1, implicit $exec :: (dereferenceable load (s32), addrspace 4)446 %7:vreg_96 = IMAGE_LOAD_MIP_PCK_SGN_V3_V4 %5:vreg_128, %3:sgpr_256, 14, 0, 0, 0, 0, 0, -1, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)447...448---449 450# GFX9-LABEL: name: image_load_pck_merged_v1v3451# GFX9: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_PCK_V4_V4 %5, %3, 15, 0, 0, 0, 0, 0, -1, implicit $exec, implicit $exec :: (dereferenceable load (s128), align 4, addrspace 4)452# GFX9: %{{[0-9]+}}:vgpr_32 = COPY %8.sub0453# GFX9: %{{[0-9]+}}:vreg_96 = COPY killed %8.sub1_sub2_sub3454 455name: image_load_pck_merged_v1v3456body: |457 bb.0.entry:458 %0:sgpr_64 = COPY $sgpr0_sgpr1459 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0460 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99461 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0462 %4:vgpr_32 = COPY %2.sub3463 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))464 %6:vgpr_32 = IMAGE_LOAD_PCK_V1_V4 %5:vreg_128, %3:sgpr_256, 1, 0, 0, 0, 0, 0, -1, implicit $exec :: (dereferenceable load (s32), addrspace 4)465 %7:vreg_96 = IMAGE_LOAD_PCK_V3_V4 %5:vreg_128, %3:sgpr_256, 14, 0, 0, 0, 0, 0, -1, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)466...467---468 469# GFX9-LABEL: name: image_load_pck_sgn_merged_v1v3470# GFX9: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_PCK_SGN_V4_V4 %5, %3, 15, 0, 0, 0, 0, 0, -1, implicit $exec, implicit $exec :: (dereferenceable load (s128), align 4, addrspace 4)471# GFX9: %{{[0-9]+}}:vgpr_32 = COPY %8.sub0472# GFX9: %{{[0-9]+}}:vreg_96 = COPY killed %8.sub1_sub2_sub3473 474name: image_load_pck_sgn_merged_v1v3475body: |476 bb.0.entry:477 %0:sgpr_64 = COPY $sgpr0_sgpr1478 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0479 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99480 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0481 %4:vgpr_32 = COPY %2.sub3482 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load (s128))483 %6:vgpr_32 = IMAGE_LOAD_PCK_SGN_V1_V4 %5:vreg_128, %3:sgpr_256, 1, 0, 0, 0, 0, 0, -1, implicit $exec :: (dereferenceable load (s32), addrspace 4)484 %7:vreg_96 = IMAGE_LOAD_PCK_SGN_V3_V4 %5:vreg_128, %3:sgpr_256, 14, 0, 0, 0, 0, 0, -1, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)485...486---487 488