1# RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass si-load-store-opt -o - %s | FileCheck -check-prefix=GFX9 %s 2 3# GFX9-LABEL: name: image_load_merged_v1v3 4# 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 16, align 4, addrspace 4) 5# GFX9: %{{[0-9]+}}:vgpr_32 = COPY %8.sub0 6# GFX9: %{{[0-9]+}}:vreg_96 = COPY killed %8.sub1_sub2_sub3 7 8name: image_load_merged_v1v3 9body: | 10 bb.0.entry: 11 %0:sgpr_64 = COPY $sgpr0_sgpr1 12 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 13 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 14 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 15 %4:vgpr_32 = COPY %2.sub3 16 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 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 4, 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 12, align 16, addrspace 4) 19... 20--- 21 22# GFX9-LABEL: name: image_load_merged_v1v3_reversed 23# 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 16, align 4, addrspace 4) 24# GFX9: %{{[0-9]+}}:vgpr_32 = COPY %8.sub3 25# GFX9: %{{[0-9]+}}:vreg_96 = COPY killed %8.sub0_sub1_sub2 26 27name: image_load_merged_v1v3_reversed 28body: | 29 bb.0.entry: 30 %0:sgpr_64 = COPY $sgpr0_sgpr1 31 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 32 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 33 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 34 %4:vgpr_32 = COPY %2.sub3 35 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 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 4, 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 12, align 16, addrspace 4) 38... 39--- 40 41# GFX9-LABEL: name: image_load_merged_v2v2 42# 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 16, addrspace 4) 43# GFX9: %{{[0-9]+}}:vreg_64 = COPY %8.sub0_sub1 44# GFX9: %{{[0-9]+}}:vreg_64 = COPY killed %8.sub2_sub3 45 46name: image_load_merged_v2v2 47body: | 48 bb.0.entry: 49 %0:sgpr_64 = COPY $sgpr0_sgpr1 50 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 51 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 52 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 53 %4:vgpr_32 = COPY %2.sub3 54 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 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 8, 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 8, align 16, addrspace 4) 57... 58--- 59 60# GFX9-LABEL: name: image_load_merged_v2v2_reversed 61# 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 16, addrspace 4) 62# GFX9: %{{[0-9]+}}:vreg_64 = COPY %8.sub2_sub3 63# GFX9: %{{[0-9]+}}:vreg_64 = COPY killed %8.sub0_sub1 64 65name: image_load_merged_v2v2_reversed 66body: | 67 bb.0.entry: 68 %0:sgpr_64 = COPY $sgpr0_sgpr1 69 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 70 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 71 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 72 %4:vgpr_32 = COPY %2.sub3 73 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 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 8, 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 8, align 16, addrspace 4) 76... 77--- 78 79# GFX9-LABEL: name: image_load_merged_v3v1 80# 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 16, addrspace 4) 81# GFX9: %{{[0-9]+}}:vreg_96 = COPY %8.sub0_sub1_sub2 82# GFX9: %{{[0-9]+}}:vgpr_32 = COPY killed %8.sub3 83 84name: image_load_merged_v3v1 85body: | 86 bb.0.entry: 87 %0:sgpr_64 = COPY $sgpr0_sgpr1 88 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 89 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 90 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 91 %4:vgpr_32 = COPY %2.sub3 92 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 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 12, 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 4, addrspace 4) 95... 96--- 97 98# GFX9-LABEL: name: image_load_merged_v3v1_reversed 99# 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 16, addrspace 4) 100# GFX9: %{{[0-9]+}}:vreg_96 = COPY %8.sub1_sub2_sub3 101# GFX9: %{{[0-9]+}}:vgpr_32 = COPY killed %8.sub0 102 103name: image_load_merged_v3v1_reversed 104body: | 105 bb.0.entry: 106 %0:sgpr_64 = COPY $sgpr0_sgpr1 107 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 108 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 109 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 110 %4:vgpr_32 = COPY %2.sub3 111 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 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 12, 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 4, addrspace 4) 114... 115--- 116 117# GFX9-LABEL: name: image_load_divided_merged 118# 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 16, align 4, addrspace 4) 119 120name: image_load_divided_merged 121body: | 122 bb.0.entry: 123 %0:sgpr_64 = COPY $sgpr0_sgpr1 124 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 125 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 126 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 127 %4:vgpr_32 = COPY %2.sub3 128 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 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 4, addrspace 4) 130 %7:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 131 %8:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 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 12, align 16, addrspace 4) 133 %10:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 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 12, align 16, addrspace 4) 135... 136--- 137 138# GFX9-LABEL: name: image_load_divided_not_merged 139# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, 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 12, align 16, addrspace 4) 141 142name: image_load_divided_not_merged 143body: | 144 bb.0.entry: 145 %0:sgpr_64 = COPY $sgpr0_sgpr1 146 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 147 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 148 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 149 %4:vreg_128 = COPY %2 150 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 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 4, 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 16) 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 12, align 16, addrspace 4) 154... 155--- 156 157# GFX9-LABEL: name: image_load_dmask_overlapped_not_merged 158# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 4, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, 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 12, align 16, addrspace 4) 160 161name: image_load_dmask_overlapped_not_merged 162body: | 163 bb.0.entry: 164 %0:sgpr_64 = COPY $sgpr0_sgpr1 165 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 166 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 167 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 168 %4:vgpr_32 = COPY %2.sub3 169 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 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 4, 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 12, align 16, addrspace 4) 172... 173--- 174 175# GFX9-LABEL: name: image_load_dmask_not_disjoint_not_merged 176# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 4, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 177# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 11, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 178 179name: image_load_dmask_not_disjoint_not_merged 180body: | 181 bb.0.entry: 182 %0:sgpr_64 = COPY $sgpr0_sgpr1 183 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 184 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 185 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 186 %4:vgpr_32 = COPY %2.sub3 187 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 188 %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 4, addrspace 4) 189 %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 12, align 16, addrspace 4) 190... 191--- 192 193# GFX9-LABEL: name: image_load_not_merged_0 194# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 195# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %6, %3, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 196 197name: image_load_not_merged_0 198body: | 199 bb.0.entry: 200 %0:sgpr_64 = COPY $sgpr0_sgpr1 201 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 202 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 203 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 204 %4:vgpr_32 = COPY %2.sub3 205 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 206 %6:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 1, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 207 %7:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 208 %8:vreg_96 = IMAGE_LOAD_V3_V4 %6, %3, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 209... 210--- 211 212# GFX9-LABEL: name: image_load_not_merged_1 213# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %6, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 214# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %6, %4, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 215 216name: image_load_not_merged_1 217body: | 218 bb.0.entry: 219 %0:sgpr_64 = COPY $sgpr0_sgpr1 220 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 221 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 222 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 223 %4:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 224 %5:vgpr_32 = COPY %2.sub3 225 %6:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 226 %7:vgpr_32 = IMAGE_LOAD_V1_V4 %6, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 227 %8:vreg_96 = IMAGE_LOAD_V3_V4 %6, %4, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 228... 229--- 230 231# GFX9-LABEL: name: image_load_not_merged_10 232# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 233# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, -1, 1, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 234 235name: image_load_not_merged_10 236body: | 237 bb.0.entry: 238 %0:sgpr_64 = COPY $sgpr0_sgpr1 239 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 240 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 241 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 242 %4:vgpr_32 = COPY %2.sub3 243 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 244 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 245 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, -1, 1, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 246... 247--- 248 249# GFX9-LABEL: name: image_load_not_merged_3 250# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 251# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 1, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 252 253name: image_load_not_merged_3 254body: | 255 bb.0.entry: 256 %0:sgpr_64 = COPY $sgpr0_sgpr1 257 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 258 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 259 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 260 %4:vgpr_32 = COPY %2.sub3 261 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 262 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 263 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 1, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 264... 265--- 266 267# GFX9-LABEL: name: image_load_not_merged_4 268# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, 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 12, align 16, addrspace 4) 270 271name: image_load_not_merged_4 272body: | 273 bb.0.entry: 274 %0:sgpr_64 = COPY $sgpr0_sgpr1 275 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 276 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 277 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 278 %4:vgpr_32 = COPY %2.sub3 279 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 280 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 281 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 1, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 282... 283--- 284 285# GFX9-LABEL: name: image_load_not_merged_5 286# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 287# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 1, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 288 289name: image_load_not_merged_5 290body: | 291 bb.0.entry: 292 %0:sgpr_64 = COPY $sgpr0_sgpr1 293 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 294 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 295 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 296 %4:vgpr_32 = COPY %2.sub3 297 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 298 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 299 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 1, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 300... 301--- 302 303# GFX9-LABEL: name: image_load_not_merged_6 304# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 305# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 1, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 306 307name: image_load_not_merged_6 308body: | 309 bb.0.entry: 310 %0:sgpr_64 = COPY $sgpr0_sgpr1 311 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 312 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 313 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 314 %4:vgpr_32 = COPY %2.sub3 315 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 316 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 317 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 1, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 318... 319--- 320 321# GFX9-LABEL: name: image_load_not_merged_7 322# GFX9: %{{[0-9]+}}:vreg_64 = IMAGE_LOAD_V2_V4 %5, %3, 8, 0, 0, 0, 1, 0, -1, 0, implicit $exec :: (dereferenceable load 8, align 16, addrspace 4) 323# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 324 325name: image_load_not_merged_7 326body: | 327 bb.0.entry: 328 %0:sgpr_64 = COPY $sgpr0_sgpr1 329 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 330 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 331 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 332 %4:vgpr_32 = COPY %2.sub3 333 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 334 %6:vreg_64 = IMAGE_LOAD_V2_V4 %5, %3, 8, 0, 0, 0, 1, 0, -1, 0, implicit $exec :: (dereferenceable load 8, align 16, addrspace 4) 335 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 336... 337--- 338 339# GFX9-LABEL: name: image_load_not_merged_8 340# GFX9: %{{[0-9]+}}:vreg_64 = IMAGE_LOAD_V2_V4 %5, %3, 8, 0, 0, 0, 0, 1, -1, 0, implicit $exec :: (dereferenceable load 8, 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 12, align 16, addrspace 4) 342 343name: image_load_not_merged_8 344body: | 345 bb.0.entry: 346 %0:sgpr_64 = COPY $sgpr0_sgpr1 347 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 348 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 349 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 350 %4:vgpr_32 = COPY %2.sub3 351 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 352 %6:vreg_64 = IMAGE_LOAD_V2_V4 %5, %3, 8, 0, 0, 0, 0, 1, -1, 0, implicit $exec :: (dereferenceable load 8, 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 12, align 16, addrspace 4) 354... 355--- 356 357# GFX9-LABEL: name: image_load_not_merged_9 358# GFX9: %{{[0-9]+}}:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 359# GFX9: %{{[0-9]+}}:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 360 361name: image_load_not_merged_9 362body: | 363 bb.0.entry: 364 %0:sgpr_64 = COPY $sgpr0_sgpr1 365 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 366 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 367 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 368 %4:vgpr_32 = COPY %2.sub3 369 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 370 %6:vgpr_32 = IMAGE_LOAD_V1_V4 %5, %3, 8, 0, 0, 0, 0, 0, -1, 0, implicit $exec :: (dereferenceable load 4, addrspace 4) 371 %7:vreg_96 = IMAGE_LOAD_V3_V4 %5, %3, 7, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable load 12, align 16, addrspace 4) 372... 373--- 374 375# GFX9-LABEL: name: image_load_mip_merged_v1v3 376# 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 16, align 4, addrspace 4) 377# GFX9: %{{[0-9]+}}:vgpr_32 = COPY %8.sub0 378# GFX9: %{{[0-9]+}}:vreg_96 = COPY killed %8.sub1_sub2_sub3 379 380name: image_load_mip_merged_v1v3 381body: | 382 bb.0.entry: 383 %0:sgpr_64 = COPY $sgpr0_sgpr1 384 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 385 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 386 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 387 %4:vgpr_32 = COPY %2.sub3 388 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 389 %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 4, addrspace 4) 390 %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 12, align 16, addrspace 4) 391... 392--- 393 394# GFX9-LABEL: name: image_load_mip_pck_merged_v1v3 395# 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 16, align 4, addrspace 4) 396# GFX9: %{{[0-9]+}}:vgpr_32 = COPY %8.sub0 397# GFX9: %{{[0-9]+}}:vreg_96 = COPY killed %8.sub1_sub2_sub3 398 399name: image_load_mip_pck_merged_v1v3 400body: | 401 bb.0.entry: 402 %0:sgpr_64 = COPY $sgpr0_sgpr1 403 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 404 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 405 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 406 %4:vgpr_32 = COPY %2.sub3 407 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 408 %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 4, addrspace 4) 409 %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 12, align 16, addrspace 4) 410... 411--- 412 413# GFX9-LABEL: name: image_load_mip_pck_sgn_merged_v1v3 414# 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 16, align 4, addrspace 4) 415# GFX9: %{{[0-9]+}}:vgpr_32 = COPY %8.sub0 416# GFX9: %{{[0-9]+}}:vreg_96 = COPY killed %8.sub1_sub2_sub3 417 418name: image_load_mip_pck_sgn_merged_v1v3 419body: | 420 bb.0.entry: 421 %0:sgpr_64 = COPY $sgpr0_sgpr1 422 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 423 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 424 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 425 %4:vgpr_32 = COPY %2.sub3 426 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 427 %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 4, addrspace 4) 428 %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 12, align 16, addrspace 4) 429... 430--- 431 432# GFX9-LABEL: name: image_load_pck_merged_v1v3 433# 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 16, align 4, addrspace 4) 434# GFX9: %{{[0-9]+}}:vgpr_32 = COPY %8.sub0 435# GFX9: %{{[0-9]+}}:vreg_96 = COPY killed %8.sub1_sub2_sub3 436 437name: image_load_pck_merged_v1v3 438body: | 439 bb.0.entry: 440 %0:sgpr_64 = COPY $sgpr0_sgpr1 441 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 442 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 443 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 444 %4:vgpr_32 = COPY %2.sub3 445 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 446 %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 4, addrspace 4) 447 %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 12, align 16, addrspace 4) 448... 449--- 450 451# GFX9-LABEL: name: image_load_pck_sgn_merged_v1v3 452# 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 16, align 4, addrspace 4) 453# GFX9: %{{[0-9]+}}:vgpr_32 = COPY %8.sub0 454# GFX9: %{{[0-9]+}}:vreg_96 = COPY killed %8.sub1_sub2_sub3 455 456name: image_load_pck_sgn_merged_v1v3 457body: | 458 bb.0.entry: 459 %0:sgpr_64 = COPY $sgpr0_sgpr1 460 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 461 %2:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99 462 %3:sgpr_256 = S_LOAD_DWORDX8_IMM %1, 208, 0 463 %4:vgpr_32 = COPY %2.sub3 464 %5:vreg_128 = BUFFER_LOAD_DWORDX4_OFFSET %2:sgpr_128, 0, 0, 0, 0, 0, implicit $exec :: (dereferenceable invariant load 16) 465 %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 4, addrspace 4) 466 %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 12, align 16, addrspace 4) 467... 468--- 469 470