1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -amdgpu-global-isel-new-legality -mtriple=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s 3# RUN: llc -amdgpu-global-isel-new-legality -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s 4# RUN: llc -amdgpu-global-isel-new-legality -mtriple=amdgcn -mcpu=gfx1010 -mattr=+cumode -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s 5# RUN: llc -amdgpu-global-isel-new-legality -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX11 %s 6 7--- 8 9name: load_local_v4s32_align16 10legalized: true 11regBankSelected: true 12tracksRegLiveness: true 13 14body: | 15 bb.0: 16 liveins: $vgpr0 17 18 ; GFX7-LABEL: name: load_local_v4s32_align16 19 ; GFX7: liveins: $vgpr0 20 ; GFX7-NEXT: {{ $}} 21 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 22 ; GFX7-NEXT: $m0 = S_MOV_B32 -1 23 ; GFX7-NEXT: [[DS_READ_B128_:%[0-9]+]]:vreg_128 = DS_READ_B128 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<4 x s32>), addrspace 3) 24 ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ_B128_]] 25 ; GFX9-LABEL: name: load_local_v4s32_align16 26 ; GFX9: liveins: $vgpr0 27 ; GFX9-NEXT: {{ $}} 28 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 29 ; GFX9-NEXT: [[DS_READ_B128_gfx9_:%[0-9]+]]:vreg_128 = DS_READ_B128_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<4 x s32>), addrspace 3) 30 ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ_B128_gfx9_]] 31 ; GFX10-LABEL: name: load_local_v4s32_align16 32 ; GFX10: liveins: $vgpr0 33 ; GFX10-NEXT: {{ $}} 34 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 35 ; GFX10-NEXT: [[DS_READ_B128_gfx9_:%[0-9]+]]:vreg_128 = DS_READ_B128_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<4 x s32>), addrspace 3) 36 ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ_B128_gfx9_]] 37 ; GFX11-LABEL: name: load_local_v4s32_align16 38 ; GFX11: liveins: $vgpr0 39 ; GFX11-NEXT: {{ $}} 40 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 41 ; GFX11-NEXT: [[DS_READ_B128_gfx9_:%[0-9]+]]:vreg_128 = DS_READ_B128_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<4 x s32>), addrspace 3) 42 ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ_B128_gfx9_]] 43 %0:vgpr(p3) = COPY $vgpr0 44 %1:vgpr(<4 x s32>) = G_LOAD %0 :: (load (<4 x s32>), align 16, addrspace 3) 45 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 46 47... 48 49--- 50 51name: load_local_v4s32_align_8 52legalized: true 53regBankSelected: true 54tracksRegLiveness: true 55 56body: | 57 bb.0: 58 liveins: $vgpr0 59 60 ; GFX7-LABEL: name: load_local_v4s32_align_8 61 ; GFX7: liveins: $vgpr0 62 ; GFX7-NEXT: {{ $}} 63 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 64 ; GFX7-NEXT: $m0 = S_MOV_B32 -1 65 ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3) 66 ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]] 67 ; GFX9-LABEL: name: load_local_v4s32_align_8 68 ; GFX9: liveins: $vgpr0 69 ; GFX9-NEXT: {{ $}} 70 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 71 ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3) 72 ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 73 ; GFX10-LABEL: name: load_local_v4s32_align_8 74 ; GFX10: liveins: $vgpr0 75 ; GFX10-NEXT: {{ $}} 76 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 77 ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3) 78 ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 79 ; GFX11-LABEL: name: load_local_v4s32_align_8 80 ; GFX11: liveins: $vgpr0 81 ; GFX11-NEXT: {{ $}} 82 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 83 ; GFX11-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3) 84 ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 85 %0:vgpr(p3) = COPY $vgpr0 86 %1:vgpr(<4 x s32>) = G_LOAD %0 :: (load (<4 x s32>), align 8, addrspace 3) 87 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 88 89... 90 91--- 92 93name: load_local_v4s32_align_8_offset_160 94legalized: true 95regBankSelected: true 96tracksRegLiveness: true 97 98body: | 99 bb.0: 100 liveins: $vgpr0 101 102 ; GFX7-LABEL: name: load_local_v4s32_align_8_offset_160 103 ; GFX7: liveins: $vgpr0 104 ; GFX7-NEXT: {{ $}} 105 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 106 ; GFX7-NEXT: $m0 = S_MOV_B32 -1 107 ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 [[COPY]], 50, 51, 0, implicit $m0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3) 108 ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]] 109 ; GFX9-LABEL: name: load_local_v4s32_align_8_offset_160 110 ; GFX9: liveins: $vgpr0 111 ; GFX9-NEXT: {{ $}} 112 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 113 ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 50, 51, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3) 114 ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 115 ; GFX10-LABEL: name: load_local_v4s32_align_8_offset_160 116 ; GFX10: liveins: $vgpr0 117 ; GFX10-NEXT: {{ $}} 118 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 119 ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 50, 51, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3) 120 ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 121 ; GFX11-LABEL: name: load_local_v4s32_align_8_offset_160 122 ; GFX11: liveins: $vgpr0 123 ; GFX11-NEXT: {{ $}} 124 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 125 ; GFX11-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 50, 51, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3) 126 ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 127 %0:vgpr(p3) = COPY $vgpr0 128 %1:vgpr(s32) = G_CONSTANT i32 400 129 %2:vgpr(p3) = G_PTR_ADD %0, %1 130 %3:vgpr(<4 x s32>) = G_LOAD %2 :: (load (<4 x s32>), align 8, addrspace 3) 131 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %3 132 133... 134 135--- 136 137name: load_local_v4s32_align_8_offset_320 138legalized: true 139regBankSelected: true 140tracksRegLiveness: true 141 142body: | 143 bb.0: 144 liveins: $vgpr0 145 146 ; GFX7-LABEL: name: load_local_v4s32_align_8_offset_320 147 ; GFX7: liveins: $vgpr0 148 ; GFX7-NEXT: {{ $}} 149 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 150 ; GFX7-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4000, implicit $exec 151 ; GFX7-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 152 ; GFX7-NEXT: $m0 = S_MOV_B32 -1 153 ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 [[V_ADD_CO_U32_e64_]], 0, 1, 0, implicit $m0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3) 154 ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]] 155 ; GFX9-LABEL: name: load_local_v4s32_align_8_offset_320 156 ; GFX9: liveins: $vgpr0 157 ; GFX9-NEXT: {{ $}} 158 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 159 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4000, implicit $exec 160 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 161 ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[V_ADD_U32_e64_]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3) 162 ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 163 ; GFX10-LABEL: name: load_local_v4s32_align_8_offset_320 164 ; GFX10: liveins: $vgpr0 165 ; GFX10-NEXT: {{ $}} 166 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 167 ; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4000, implicit $exec 168 ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 169 ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[V_ADD_U32_e64_]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3) 170 ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 171 ; GFX11-LABEL: name: load_local_v4s32_align_8_offset_320 172 ; GFX11: liveins: $vgpr0 173 ; GFX11-NEXT: {{ $}} 174 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 175 ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4000, implicit $exec 176 ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec 177 ; GFX11-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[V_ADD_U32_e64_]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3) 178 ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 179 %0:vgpr(p3) = COPY $vgpr0 180 %1:vgpr(s32) = G_CONSTANT i32 4000 181 %2:vgpr(p3) = G_PTR_ADD %0, %1 182 %3:vgpr(<4 x s32>) = G_LOAD %2 :: (load (<4 x s32>), align 8, addrspace 3) 183 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %3 184 185... 186 187--- 188 189name: load_local_v2s64 190legalized: true 191regBankSelected: true 192tracksRegLiveness: true 193 194body: | 195 bb.0: 196 liveins: $vgpr0 197 198 ; GFX7-LABEL: name: load_local_v2s64 199 ; GFX7: liveins: $vgpr0 200 ; GFX7-NEXT: {{ $}} 201 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 202 ; GFX7-NEXT: $m0 = S_MOV_B32 -1 203 ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load (<2 x s64>), align 8, addrspace 3) 204 ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]] 205 ; GFX9-LABEL: name: load_local_v2s64 206 ; GFX9: liveins: $vgpr0 207 ; GFX9-NEXT: {{ $}} 208 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 209 ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<2 x s64>), align 8, addrspace 3) 210 ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 211 ; GFX10-LABEL: name: load_local_v2s64 212 ; GFX10: liveins: $vgpr0 213 ; GFX10-NEXT: {{ $}} 214 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 215 ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<2 x s64>), align 8, addrspace 3) 216 ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 217 ; GFX11-LABEL: name: load_local_v2s64 218 ; GFX11: liveins: $vgpr0 219 ; GFX11-NEXT: {{ $}} 220 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 221 ; GFX11-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<2 x s64>), align 8, addrspace 3) 222 ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 223 %0:vgpr(p3) = COPY $vgpr0 224 %1:vgpr(<2 x s64>) = G_LOAD %0 :: (load (<2 x s64>), align 8, addrspace 3) 225 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 226 227... 228 229--- 230 231name: load_local_v2p1 232legalized: true 233regBankSelected: true 234tracksRegLiveness: true 235 236body: | 237 bb.0: 238 liveins: $vgpr0 239 240 ; GFX7-LABEL: name: load_local_v2p1 241 ; GFX7: liveins: $vgpr0 242 ; GFX7-NEXT: {{ $}} 243 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0 244 ; GFX7-NEXT: $m0 = S_MOV_B32 -1 245 ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vreg_128(<2 x p1>) = G_LOAD [[COPY]](p3) :: (load (<2 x p1>), align 8, addrspace 3) 246 ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](<2 x p1>) 247 ; GFX9-LABEL: name: load_local_v2p1 248 ; GFX9: liveins: $vgpr0 249 ; GFX9-NEXT: {{ $}} 250 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0 251 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vreg_128(<2 x p1>) = G_LOAD [[COPY]](p3) :: (load (<2 x p1>), align 8, addrspace 3) 252 ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](<2 x p1>) 253 ; GFX10-LABEL: name: load_local_v2p1 254 ; GFX10: liveins: $vgpr0 255 ; GFX10-NEXT: {{ $}} 256 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0 257 ; GFX10-NEXT: [[LOAD:%[0-9]+]]:vreg_128(<2 x p1>) = G_LOAD [[COPY]](p3) :: (load (<2 x p1>), align 8, addrspace 3) 258 ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](<2 x p1>) 259 ; GFX11-LABEL: name: load_local_v2p1 260 ; GFX11: liveins: $vgpr0 261 ; GFX11-NEXT: {{ $}} 262 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0 263 ; GFX11-NEXT: [[LOAD:%[0-9]+]]:vreg_128(<2 x p1>) = G_LOAD [[COPY]](p3) :: (load (<2 x p1>), align 8, addrspace 3) 264 ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](<2 x p1>) 265 %0:vgpr(p3) = COPY $vgpr0 266 %1:vgpr(<2 x p1>) = G_LOAD %0 :: (load (<2 x p1>), align 8, addrspace 3) 267 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 268 269... 270 271--- 272 273name: load_local_s128 274legalized: true 275regBankSelected: true 276tracksRegLiveness: true 277 278body: | 279 bb.0: 280 liveins: $vgpr0 281 282 ; GFX7-LABEL: name: load_local_s128 283 ; GFX7: liveins: $vgpr0 284 ; GFX7-NEXT: {{ $}} 285 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0 286 ; GFX7-NEXT: $m0 = S_MOV_B32 -1 287 ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vreg_128(s128) = G_LOAD [[COPY]](p3) :: (load (s128), align 8, addrspace 3) 288 ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](s128) 289 ; GFX9-LABEL: name: load_local_s128 290 ; GFX9: liveins: $vgpr0 291 ; GFX9-NEXT: {{ $}} 292 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0 293 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vreg_128(s128) = G_LOAD [[COPY]](p3) :: (load (s128), align 8, addrspace 3) 294 ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](s128) 295 ; GFX10-LABEL: name: load_local_s128 296 ; GFX10: liveins: $vgpr0 297 ; GFX10-NEXT: {{ $}} 298 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0 299 ; GFX10-NEXT: [[LOAD:%[0-9]+]]:vreg_128(s128) = G_LOAD [[COPY]](p3) :: (load (s128), align 8, addrspace 3) 300 ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](s128) 301 ; GFX11-LABEL: name: load_local_s128 302 ; GFX11: liveins: $vgpr0 303 ; GFX11-NEXT: {{ $}} 304 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0 305 ; GFX11-NEXT: [[LOAD:%[0-9]+]]:vreg_128(s128) = G_LOAD [[COPY]](p3) :: (load (s128), align 8, addrspace 3) 306 ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](s128) 307 %0:vgpr(p3) = COPY $vgpr0 308 %1:vgpr(s128) = G_LOAD %0 :: (load (s128), align 8, addrspace 3) 309 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 310 311... 312 313--- 314 315name: load_local_v8s16 316legalized: true 317regBankSelected: true 318tracksRegLiveness: true 319 320body: | 321 bb.0: 322 liveins: $vgpr0 323 324 ; GFX7-LABEL: name: load_local_v8s16 325 ; GFX7: liveins: $vgpr0 326 ; GFX7-NEXT: {{ $}} 327 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 328 ; GFX7-NEXT: $m0 = S_MOV_B32 -1 329 ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load (<8 x s16>), align 8, addrspace 3) 330 ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]] 331 ; GFX9-LABEL: name: load_local_v8s16 332 ; GFX9: liveins: $vgpr0 333 ; GFX9-NEXT: {{ $}} 334 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 335 ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<8 x s16>), align 8, addrspace 3) 336 ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 337 ; GFX10-LABEL: name: load_local_v8s16 338 ; GFX10: liveins: $vgpr0 339 ; GFX10-NEXT: {{ $}} 340 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 341 ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<8 x s16>), align 8, addrspace 3) 342 ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 343 ; GFX11-LABEL: name: load_local_v8s16 344 ; GFX11: liveins: $vgpr0 345 ; GFX11-NEXT: {{ $}} 346 ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 347 ; GFX11-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<8 x s16>), align 8, addrspace 3) 348 ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]] 349 %0:vgpr(p3) = COPY $vgpr0 350 %1:vgpr(<8 x s16>) = G_LOAD %0 :: (load (<8 x s16>), align 8, addrspace 3) 351 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 352 353... 354