506 lines · plain
1# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -verify-machineinstrs -run-pass si-load-store-opt -o - %s | FileCheck -check-prefix=GFX12 %s2 3---4# GFX12-LABEL: name: image_load_merged_v1v35# GFX12: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_V4_V2_gfx12 %6, %7, %3, 15, 1, 0, 0, 0, 0, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), align 4, addrspace 4)6# GFX12: %{{[0-9]+}}:vgpr_32 = COPY %10.sub07# GFX12: %{{[0-9]+}}:vreg_96 = COPY killed %10.sub1_sub2_sub38 9name: image_load_merged_v1v310body: |11 bb.0.entry:12 %0:sgpr_64 = COPY $sgpr0_sgpr113 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 014 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr9915 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 016 %4:vgpr_32 = COPY %2.sub317 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)18 %6:vgpr_32 = COPY %5.sub019 %7:vgpr_32 = COPY %5.sub120 %8:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 1, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)21 %9:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 14, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)22...23---24# GFX12-LABEL: name: image_load_merged_v1v3_reversed25# GFX12: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_V4_V2_gfx12 %6, %7, %3, 15, 1, 0, 0, 0, 0, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), addrspace 4)26# GFX12: %{{[0-9]+}}:vgpr_32 = COPY %10.sub327# GFX12: %{{[0-9]+}}:vreg_96 = COPY killed %10.sub0_sub1_sub228 29name: image_load_merged_v1v3_reversed30body: |31 bb.0.entry:32 %0:sgpr_64 = COPY $sgpr0_sgpr133 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 034 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr9935 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 036 %4:vgpr_32 = COPY %2.sub337 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)38 %6:vgpr_32 = COPY %5.sub039 %7:vgpr_32 = COPY %5.sub140 %8:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)41 %9:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)42...43---44 45# GFX12-LABEL: name: image_load_merged_v2v246# GFX12: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_V4_V2_gfx12 %6, %7, %3, 15, 1, 0, 0, 0, 0, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), addrspace 4)47# GFX12: %{{[0-9]+}}:vreg_64 = COPY %10.sub0_sub148# GFX12: %{{[0-9]+}}:vreg_64 = COPY killed %10.sub2_sub349 50name: image_load_merged_v2v251body: |52 bb.0.entry:53 %0:sgpr_64 = COPY $sgpr0_sgpr154 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 055 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr9956 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 057 %4:vgpr_32 = COPY %2.sub358 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)59 %6:vgpr_32 = COPY %5.sub060 %7:vgpr_32 = COPY %5.sub161 %8:vreg_64 = IMAGE_LOAD_V2_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 3, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 8, align 16, addrspace 4)62 %9:vreg_64 = IMAGE_LOAD_V2_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 12, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 8, align 16, addrspace 4)63...64---65 66# GFX12-LABEL: name: image_load_merged_v2v2_reversed67# GFX12: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_V4_V2_gfx12 %6, %7, %3, 15, 1, 0, 0, 0, 0, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), addrspace 4)68# GFX12: %{{[0-9]+}}:vreg_64 = COPY %10.sub2_sub369# GFX12: %{{[0-9]+}}:vreg_64 = COPY killed %10.sub0_sub170 71name: image_load_merged_v2v2_reversed72body: |73 bb.0.entry:74 %0:sgpr_64 = COPY $sgpr0_sgpr175 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 076 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr9977 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 078 %4:vgpr_32 = COPY %2.sub379 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)80 %6:vgpr_32 = COPY %5.sub081 %7:vgpr_32 = COPY %5.sub182 %8:vreg_64 = IMAGE_LOAD_V2_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 12, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 8, align 16, addrspace 4)83 %9:vreg_64 = IMAGE_LOAD_V2_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 3, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 8, align 16, addrspace 4)84...85---86 87# GFX12-LABEL: name: image_load_merged_v3v188# GFX12: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_V4_V2_gfx12 %6, %7, %3, 15, 1, 0, 0, 0, 0, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), addrspace 4)89# GFX12: %{{[0-9]+}}:vreg_96 = COPY %10.sub0_sub1_sub290# GFX12: %{{[0-9]+}}:vgpr_32 = COPY killed %10.sub391 92name: image_load_merged_v3v193body: |94 bb.0.entry:95 %0:sgpr_64 = COPY $sgpr0_sgpr196 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 097 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr9998 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 099 %4:vgpr_32 = COPY %2.sub3100 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)101 %6:vgpr_32 = COPY %5.sub0102 %7:vgpr_32 = COPY %5.sub1103 %8:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)104 %9:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)105...106---107 108# GFX12-LABEL: name: image_load_merged_v3v1_reversed109# GFX12: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_V4_V2_gfx12 %6, %7, %3, 15, 1, 0, 0, 0, 0, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), align 4, addrspace 4)110# GFX12: %{{[0-9]+}}:vreg_96 = COPY %10.sub1_sub2_sub3111# GFX12: %{{[0-9]+}}:vgpr_32 = COPY killed %10.sub0112 113name: image_load_merged_v3v1_reversed114body: |115 bb.0.entry:116 %0:sgpr_64 = COPY $sgpr0_sgpr1117 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0118 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99119 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0120 %4:vgpr_32 = COPY %2.sub3121 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)122 %6:vgpr_32 = COPY %5.sub0123 %7:vgpr_32 = COPY %5.sub1124 %8:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 14, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)125 %9:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 1, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)126...127---128 129# GFX12-LABEL: name: image_load_divided_merged130# GFX12: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_V4_V2_gfx12 %6, %7, %3, 15, 1, 0, 0, 0, 0, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), addrspace 4)131 132name: image_load_divided_merged133body: |134 bb.0.entry:135 %0:sgpr_64 = COPY $sgpr0_sgpr1136 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0137 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99138 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0139 %4:vgpr_32 = COPY %2.sub3140 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)141 %6:vgpr_32 = COPY %5.sub0142 %7:vgpr_32 = COPY %5.sub1143 %8:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)144 %9:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)145 %10:vgpr_32 = COPY %9.sub0146 %11:vgpr_32 = COPY %9.sub1147 %12:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)148 %13:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %10:vgpr_32, %11:vgpr_32, %3:sgpr_256, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)149 %14:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)150 %15:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)151...152---153 154# GFX12-LABEL: name: image_load_divided_not_merged155# GFX12: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)156# GFX12: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)157 158name: image_load_divided_not_merged159body: |160 bb.0.entry:161 %0:sgpr_64 = COPY $sgpr0_sgpr1162 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0163 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99164 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0165 %4:vreg_128 = COPY %2166 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)167 %6:vgpr_32 = COPY %5.sub0168 %7:vgpr_32 = COPY %5.sub1169 %8:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)170 IMAGE_STORE_V4_V2_gfx12 %4:vreg_128, %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 15, 1, 0, 0, 0, 0, 0, implicit $exec :: (store 16)171 %9:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)172...173---174 175# GFX12-LABEL: name: image_load_dmask_overlapped_not_merged176# GFX12: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 4, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)177# GFX12: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)178 179name: image_load_dmask_overlapped_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_64 = BUFFER_LOAD_DWORDX2_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)188 %6:vgpr_32 = COPY %5.sub0189 %7:vgpr_32 = COPY %5.sub1190 %8:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 4, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)191 %9:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)192...193---194 195# GFX12-LABEL: name: image_load_dmask_not_disjoint_not_merged196# GFX12: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 4, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)197# GFX12: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 11, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)198 199name: image_load_dmask_not_disjoint_not_merged200body: |201 bb.0.entry:202 %0:sgpr_64 = COPY $sgpr0_sgpr1203 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0204 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99205 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0206 %4:vgpr_32 = COPY %2.sub3207 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)208 %6:vgpr_32 = COPY %5.sub0209 %7:vgpr_32 = COPY %5.sub1210 %8:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 4, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)211 %9:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 11, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)212...213---214 215# GFX12-LABEL: name: image_load_not_merged_0216# GFX12: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)217# GFX12: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %9, %10, %3, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)218 219name: image_load_not_merged_0220body: |221 bb.0.entry:222 %0:sgpr_64 = COPY $sgpr0_sgpr1223 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0224 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99225 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0226 %4:vgpr_32 = COPY %2.sub3227 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)228 %6:vgpr_32 = COPY %5.sub0229 %7:vgpr_32 = COPY %5.sub1230 %8:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2, 1, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)231 %9:vgpr_32 = COPY %8.sub0232 %10:vgpr_32 = COPY %8.sub1233 %11:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)234 %12:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %9, %10, %3, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)235...236---237 238# GFX12-LABEL: name: image_load_not_merged_1239# GFX12: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %7, %8, %3, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)240# GFX12: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %7, %8, %4, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)241 242name: image_load_not_merged_1243body: |244 bb.0.entry:245 %0:sgpr_64 = COPY $sgpr0_sgpr1246 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0247 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99248 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0249 %4:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0250 %5:vgpr_32 = COPY %2.sub3251 %6:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)252 %7:vgpr_32 = COPY %6.sub0253 %8:vgpr_32 = COPY %6.sub1254 %9:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %7, %8, %3, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)255 %10:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %7, %8, %4, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)256...257---258 259# GFX12-LABEL: name: image_load_not_merged_4260# GFX12: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)261# GFX12: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 1, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)262 263name: image_load_not_merged_4264body: |265 bb.0.entry:266 %0:sgpr_64 = COPY $sgpr0_sgpr1267 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0268 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99269 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0270 %4:vgpr_32 = COPY %2.sub3271 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)272 %6:vgpr_32 = COPY %5.sub0273 %7:vgpr_32 = COPY %5.sub1274 %8:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)275 %9:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 1, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)276...277---278 279# GFX12-LABEL: name: image_load_not_merged_5280# GFX12: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)281# GFX12: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 0, 1, 0, 0, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)282 283name: image_load_not_merged_5284body: |285 bb.0.entry:286 %0:sgpr_64 = COPY $sgpr0_sgpr1287 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0288 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99289 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0290 %4:vgpr_32 = COPY %2.sub3291 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)292 %6:vgpr_32 = COPY %5.sub0293 %7:vgpr_32 = COPY %5.sub1294 %8:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)295 %9:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 0, 1, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)296...297---298 299# GFX12-LABEL: name: image_load_not_merged_6300# GFX12: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)301# GFX12: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 1, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)302 303name: image_load_not_merged_6304body: |305 bb.0.entry:306 %0:sgpr_64 = COPY $sgpr0_sgpr1307 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0308 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99309 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0310 %4:vgpr_32 = COPY %2.sub3311 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)312 %6:vgpr_32 = COPY %5.sub0313 %7:vgpr_32 = COPY %5.sub1314 %8:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)315 %9:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 1, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)316...317---318 319# GFX12-LABEL: name: image_load_not_merged_7320# GFX12: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)321# GFX12: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 0, 1, 0, 0, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)322 323name: image_load_not_merged_7324body: |325 bb.0.entry:326 %0:sgpr_64 = COPY $sgpr0_sgpr1327 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0328 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99329 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0330 %4:vgpr_32 = COPY %2.sub3331 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)332 %6:vgpr_32 = COPY %5.sub0333 %7:vgpr_32 = COPY %5.sub1334 %8:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)335 %9:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 0, 1, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)336...337---338 339# GFX12-LABEL: name: image_load_not_merged_8340# GFX12: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V1_gfx12 %6, %3, 8, 1, 0, 0, 1, 0, 0, implicit $exec :: (dereferenceable load (s64), align 16, addrspace 4)341# GFX12: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)342 343name: image_load_not_merged_8344body: |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_64 = BUFFER_LOAD_DWORDX2_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)352 %6:vgpr_32 = COPY %5.sub0353 %7:vgpr_32 = COPY %5.sub1354 %8:vgpr_32 = IMAGE_LOAD_V1_V1_gfx12 %6, %3, 8, 1, 0, 0, 1, 0, 0, implicit $exec :: (dereferenceable load 8, align 16, addrspace 4)355 %9:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)356...357---358 359# GFX12-LABEL: name: image_load_not_merged_9360# GFX12: %{{[0-9]+}}:vreg_64 = IMAGE_LOAD_V2_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 1, 0, implicit $exec :: (dereferenceable load (s32), addrspace 4)361# GFX12: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)362 363name: image_load_not_merged_9364body: |365 bb.0.entry:366 %0:sgpr_64 = COPY $sgpr0_sgpr1367 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0368 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99369 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0370 %4:vgpr_32 = COPY %2.sub3371 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)372 %6:vgpr_32 = COPY %5.sub0373 %7:vgpr_32 = COPY %5.sub1374 %8:vreg_64 = IMAGE_LOAD_V2_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)375 %9:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)376...377---378 379# GFX12-LABEL: name: image_load_not_merged_11380# GFX12: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 0, 1, implicit $exec :: (dereferenceable load (s32), addrspace 4)381# GFX12: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (s96), align 16, addrspace 4)382 383name: image_load_not_merged_11384body: |385 bb.0.entry:386 %0:sgpr_64 = COPY $sgpr0_sgpr1387 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0388 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99389 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0390 %4:vgpr_32 = COPY %2.sub3391 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)392 %6:vgpr_32 = COPY %5.sub0393 %7:vgpr_32 = COPY %5.sub1394 %8:vgpr_32 = IMAGE_LOAD_V1_V2_gfx12 %6, %7, %3, 8, 1, 0, 0, 0, 0, 1, implicit $exec :: (dereferenceable load 4, addrspace 4)395 %9:vreg_96 = IMAGE_LOAD_V3_V2_gfx12 %6, %7, %3, 7, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)396...397---398 399# GFX12-LABEL: name: image_load_mip_merged_v1v3400# GFX12: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_MIP_V4_V3_gfx12 %6, %7, %8, %3, 15, 1, 0, 0, 0, 0, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), align 4, addrspace 4)401# GFX12: %{{[0-9]+}}:vgpr_32 = COPY %11.sub0402# GFX12: %{{[0-9]+}}:vreg_96 = COPY killed %11.sub1_sub2_sub3403 404name: image_load_mip_merged_v1v3405body: |406 bb.0.entry:407 %0:sgpr_64 = COPY $sgpr0_sgpr1408 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0409 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99410 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0411 %4:vgpr_32 = COPY %2.sub3412 %5:vreg_96 = BUFFER_LOAD_DWORDX3_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)413 %6:vgpr_32 = COPY %5.sub0414 %7:vgpr_32 = COPY %5.sub1415 %8:vgpr_32 = COPY %5.sub2416 %9:vgpr_32 = IMAGE_LOAD_MIP_V1_V3_gfx12 %6:vgpr_32, %7:vgpr_32, %8:vgpr_32, %3:sgpr_256, 1, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)417 %10:vreg_96 = IMAGE_LOAD_MIP_V3_V3_gfx12 %6:vgpr_32, %7:vgpr_32, %8:vgpr_32, %3:sgpr_256, 14, 1, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)418...419---420 421# GFX12-LABEL: name: image_load_mip_pck_merged_v1v3422# GFX12: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_MIP_PCK_V4_V3_gfx12 %6, %7, %8, %3, 15, 1, 0, 0, 0, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), align 4, addrspace 4)423# GFX12: %{{[0-9]+}}:vgpr_32 = COPY %11.sub0424# GFX12: %{{[0-9]+}}:vreg_96 = COPY killed %11.sub1_sub2_sub3425 426name: image_load_mip_pck_merged_v1v3427body: |428 bb.0.entry:429 %0:sgpr_64 = COPY $sgpr0_sgpr1430 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0431 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99432 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0433 %4:vgpr_32 = COPY %2.sub3434 %5:vreg_96 = BUFFER_LOAD_DWORDX3_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)435 %6:vgpr_32 = COPY %5.sub0436 %7:vgpr_32 = COPY %5.sub1437 %8:vgpr_32 = COPY %5.sub2438 %9:vgpr_32 = IMAGE_LOAD_MIP_PCK_V1_V3_gfx12 %6:vgpr_32, %7:vgpr_32, %8:vgpr_32, %3:sgpr_256, 1, 1, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)439 %10:vreg_96 = IMAGE_LOAD_MIP_PCK_V3_V3_gfx12 %6:vgpr_32, %7:vgpr_32, %8:vgpr_32, %3:sgpr_256, 14, 1, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)440...441---442 443# GFX12-LABEL: name: image_load_mip_pck_sgn_merged_v1v3444# GFX12: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_MIP_PCK_SGN_V4_V3_gfx12 %6, %7, %8, %3, 15, 1, 0, 0, 0, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), align 4, addrspace 4)445# GFX12: %{{[0-9]+}}:vgpr_32 = COPY %11.sub0446# GFX12: %{{[0-9]+}}:vreg_96 = COPY killed %11.sub1_sub2_sub3447 448name: image_load_mip_pck_sgn_merged_v1v3449body: |450 bb.0.entry:451 %0:sgpr_64 = COPY $sgpr0_sgpr1452 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0453 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99454 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0455 %4:vgpr_32 = COPY %2.sub3456 %5:vreg_96 = BUFFER_LOAD_DWORDX3_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)457 %6:vgpr_32 = COPY %5.sub0458 %7:vgpr_32 = COPY %5.sub1459 %8:vgpr_32 = COPY %5.sub2460 %9:vgpr_32 = IMAGE_LOAD_MIP_PCK_SGN_V1_V3_gfx12 %6:vgpr_32, %7:vgpr_32, %8:vgpr_32, %3:sgpr_256, 1, 1, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)461 %10:vreg_96 = IMAGE_LOAD_MIP_PCK_SGN_V3_V3_gfx12 %6:vgpr_32, %7:vgpr_32, %8:vgpr_32, %3:sgpr_256, 14, 1, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)462...463---464 465# GFX12-LABEL: name: image_load_pck_merged_v1v3466# GFX12: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_PCK_V4_V2_gfx12 %6, %7, %3, 15, 1, 0, 0, 0, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), align 4, addrspace 4)467# GFX12: %{{[0-9]+}}:vgpr_32 = COPY %10.sub0468# GFX12: %{{[0-9]+}}:vreg_96 = COPY killed %10.sub1_sub2_sub3469 470name: image_load_pck_merged_v1v3471body: |472 bb.0.entry:473 %0:sgpr_64 = COPY $sgpr0_sgpr1474 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0475 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99476 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0477 %4:vgpr_32 = COPY %2.sub3478 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)479 %6:vgpr_32 = COPY %5.sub0480 %7:vgpr_32 = COPY %5.sub1481 %8:vgpr_32 = IMAGE_LOAD_PCK_V1_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 1, 1, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)482 %9:vreg_96 = IMAGE_LOAD_PCK_V3_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 14, 1, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)483...484---485 486# GFX12-LABEL: name: image_load_pck_sgn_merged_v1v3487# GFX12: %{{[0-9]+}}:vreg_128 = IMAGE_LOAD_PCK_SGN_V4_V2_gfx12 %6, %7, %3, 15, 1, 0, 0, 0, 0, implicit $exec, implicit $exec :: (dereferenceable load (s128), align 4, addrspace 4)488# GFX12: %{{[0-9]+}}:vgpr_32 = COPY %10.sub0489# GFX12: %{{[0-9]+}}:vreg_96 = COPY killed %10.sub1_sub2_sub3490 491name: image_load_pck_sgn_merged_v1v3492body: |493 bb.0.entry:494 %0:sgpr_64 = COPY $sgpr0_sgpr1495 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0496 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99497 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0498 %4:vgpr_32 = COPY %2.sub3499 %5:vreg_64 = BUFFER_LOAD_DWORDX2_OFFSET %2:sgpr_128, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16)500 %6:vgpr_32 = COPY %5.sub0501 %7:vgpr_32 = COPY %5.sub1502 %8:vgpr_32 = IMAGE_LOAD_PCK_SGN_V1_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 1, 1, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 4, addrspace 4)503 %9:vreg_96 = IMAGE_LOAD_PCK_SGN_V3_V2_gfx12 %6:vgpr_32, %7:vgpr_32, %3:sgpr_256, 14, 1, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4)504...505---506