1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -amdgpu-global-isel-new-legality -march=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 -march=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX8 %s 4# RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s 5# RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s 6 7--- 8 9name: store_flat_s32_to_4 10legalized: true 11tracksRegLiveness: true 12regBankSelected: true 13 14body: | 15 bb.0: 16 liveins: $vgpr0_vgpr1, $vgpr2 17 18 ; GFX7-LABEL: name: store_flat_s32_to_4 19 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2 20 ; GFX7-NEXT: {{ $}} 21 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 22 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 23 ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32)) 24 ; GFX8-LABEL: name: store_flat_s32_to_4 25 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2 26 ; GFX8-NEXT: {{ $}} 27 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 28 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 29 ; GFX8-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32)) 30 ; GFX9-LABEL: name: store_flat_s32_to_4 31 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2 32 ; GFX9-NEXT: {{ $}} 33 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 34 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 35 ; GFX9-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32)) 36 ; GFX10-LABEL: name: store_flat_s32_to_4 37 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2 38 ; GFX10-NEXT: {{ $}} 39 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 40 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 41 ; GFX10-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32)) 42 %0:vgpr(p1) = COPY $vgpr0_vgpr1 43 %1:vgpr(s32) = COPY $vgpr2 44 G_STORE %1, %0 :: (store (s32), align 4, addrspace 0) 45 46... 47 48--- 49name: store_flat_s32_to_2 50legalized: true 51tracksRegLiveness: true 52regBankSelected: true 53 54body: | 55 bb.0: 56 liveins: $vgpr0_vgpr1, $vgpr2 57 58 ; GFX7-LABEL: name: store_flat_s32_to_2 59 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2 60 ; GFX7-NEXT: {{ $}} 61 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 62 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 63 ; GFX7-NEXT: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s16)) 64 ; GFX8-LABEL: name: store_flat_s32_to_2 65 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2 66 ; GFX8-NEXT: {{ $}} 67 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 68 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 69 ; GFX8-NEXT: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s16)) 70 ; GFX9-LABEL: name: store_flat_s32_to_2 71 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2 72 ; GFX9-NEXT: {{ $}} 73 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 74 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 75 ; GFX9-NEXT: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s16)) 76 ; GFX10-LABEL: name: store_flat_s32_to_2 77 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2 78 ; GFX10-NEXT: {{ $}} 79 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 80 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 81 ; GFX10-NEXT: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s16)) 82 %0:vgpr(p1) = COPY $vgpr0_vgpr1 83 %1:vgpr(s32) = COPY $vgpr2 84 G_STORE %1, %0 :: (store (s16), align 2, addrspace 0) 85 86... 87 88--- 89name: store_flat_s32_to_1 90legalized: true 91tracksRegLiveness: true 92regBankSelected: true 93 94body: | 95 bb.0: 96 liveins: $vgpr0_vgpr1, $vgpr2 97 98 ; GFX7-LABEL: name: store_flat_s32_to_1 99 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2 100 ; GFX7-NEXT: {{ $}} 101 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 102 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 103 ; GFX7-NEXT: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8)) 104 ; GFX8-LABEL: name: store_flat_s32_to_1 105 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2 106 ; GFX8-NEXT: {{ $}} 107 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 108 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 109 ; GFX8-NEXT: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8)) 110 ; GFX9-LABEL: name: store_flat_s32_to_1 111 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2 112 ; GFX9-NEXT: {{ $}} 113 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 114 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 115 ; GFX9-NEXT: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8)) 116 ; GFX10-LABEL: name: store_flat_s32_to_1 117 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2 118 ; GFX10-NEXT: {{ $}} 119 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 120 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 121 ; GFX10-NEXT: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8)) 122 %0:vgpr(p1) = COPY $vgpr0_vgpr1 123 %1:vgpr(s32) = COPY $vgpr2 124 G_STORE %1, %0 :: (store (s8), align 1, addrspace 0) 125 126... 127 128--- 129 130name: store_flat_s64 131legalized: true 132tracksRegLiveness: true 133regBankSelected: true 134 135body: | 136 bb.0: 137 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 138 139 ; GFX7-LABEL: name: store_flat_s64 140 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 141 ; GFX7-NEXT: {{ $}} 142 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 143 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 144 ; GFX7-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s64)) 145 ; GFX8-LABEL: name: store_flat_s64 146 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 147 ; GFX8-NEXT: {{ $}} 148 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 149 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 150 ; GFX8-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s64)) 151 ; GFX9-LABEL: name: store_flat_s64 152 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 153 ; GFX9-NEXT: {{ $}} 154 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 155 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 156 ; GFX9-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s64)) 157 ; GFX10-LABEL: name: store_flat_s64 158 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 159 ; GFX10-NEXT: {{ $}} 160 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 161 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 162 ; GFX10-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s64)) 163 %0:vgpr(p1) = COPY $vgpr0_vgpr1 164 %1:vgpr(s64) = COPY $vgpr2_vgpr3 165 G_STORE %1, %0 :: (store (s64), align 8, addrspace 0) 166 167... 168--- 169 170name: store_flat_s96 171legalized: true 172tracksRegLiveness: true 173regBankSelected: true 174 175body: | 176 bb.0: 177 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 178 179 ; GFX7-LABEL: name: store_flat_s96 180 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 181 ; GFX7-NEXT: {{ $}} 182 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 183 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4 184 ; GFX7-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16) 185 ; GFX8-LABEL: name: store_flat_s96 186 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 187 ; GFX8-NEXT: {{ $}} 188 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 189 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4 190 ; GFX8-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16) 191 ; GFX9-LABEL: name: store_flat_s96 192 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 193 ; GFX9-NEXT: {{ $}} 194 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 195 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4 196 ; GFX9-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16) 197 ; GFX10-LABEL: name: store_flat_s96 198 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 199 ; GFX10-NEXT: {{ $}} 200 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 201 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4 202 ; GFX10-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16) 203 %0:vgpr(p1) = COPY $vgpr0_vgpr1 204 %1:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4 205 G_STORE %1, %0 :: (store (s96), align 16, addrspace 0) 206 207... 208--- 209 210name: store_flat_s128 211legalized: true 212tracksRegLiveness: true 213regBankSelected: true 214 215body: | 216 bb.0: 217 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 218 219 ; GFX7-LABEL: name: store_flat_s128 220 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 221 ; GFX7-NEXT: {{ $}} 222 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 223 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 224 ; GFX7-NEXT: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128)) 225 ; GFX8-LABEL: name: store_flat_s128 226 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 227 ; GFX8-NEXT: {{ $}} 228 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 229 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 230 ; GFX8-NEXT: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128)) 231 ; GFX9-LABEL: name: store_flat_s128 232 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 233 ; GFX9-NEXT: {{ $}} 234 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 235 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 236 ; GFX9-NEXT: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128)) 237 ; GFX10-LABEL: name: store_flat_s128 238 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 239 ; GFX10-NEXT: {{ $}} 240 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 241 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 242 ; GFX10-NEXT: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128)) 243 %0:vgpr(p1) = COPY $vgpr0_vgpr1 244 %1:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 245 G_STORE %1, %0 :: (store (s128), align 16, addrspace 0) 246 247... 248 249--- 250 251name: store_flat_v2s32 252legalized: true 253tracksRegLiveness: true 254regBankSelected: true 255 256body: | 257 bb.0: 258 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 259 260 ; GFX7-LABEL: name: store_flat_v2s32 261 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 262 ; GFX7-NEXT: {{ $}} 263 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 264 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 265 ; GFX7-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s32>)) 266 ; GFX8-LABEL: name: store_flat_v2s32 267 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 268 ; GFX8-NEXT: {{ $}} 269 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 270 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 271 ; GFX8-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s32>)) 272 ; GFX9-LABEL: name: store_flat_v2s32 273 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 274 ; GFX9-NEXT: {{ $}} 275 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 276 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 277 ; GFX9-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s32>)) 278 ; GFX10-LABEL: name: store_flat_v2s32 279 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 280 ; GFX10-NEXT: {{ $}} 281 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 282 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 283 ; GFX10-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s32>)) 284 %0:vgpr(p1) = COPY $vgpr0_vgpr1 285 %1:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3 286 G_STORE %1, %0 :: (store (<2 x s32>), align 8, addrspace 0) 287 288... 289--- 290 291name: store_flat_v3s32 292legalized: true 293tracksRegLiveness: true 294regBankSelected: true 295 296body: | 297 bb.0: 298 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 299 300 ; GFX7-LABEL: name: store_flat_v3s32 301 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 302 ; GFX7-NEXT: {{ $}} 303 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 304 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4 305 ; GFX7-NEXT: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<3 x s32>), align 16) 306 ; GFX8-LABEL: name: store_flat_v3s32 307 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 308 ; GFX8-NEXT: {{ $}} 309 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 310 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4 311 ; GFX8-NEXT: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<3 x s32>), align 16) 312 ; GFX9-LABEL: name: store_flat_v3s32 313 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 314 ; GFX9-NEXT: {{ $}} 315 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 316 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4 317 ; GFX9-NEXT: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<3 x s32>), align 16) 318 ; GFX10-LABEL: name: store_flat_v3s32 319 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 320 ; GFX10-NEXT: {{ $}} 321 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 322 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4 323 ; GFX10-NEXT: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<3 x s32>), align 16) 324 %0:vgpr(p1) = COPY $vgpr0_vgpr1 325 %1:vgpr(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4 326 G_STORE %1, %0 :: (store (<3 x s32>), align 16, addrspace 0) 327 328... 329--- 330 331name: store_flat_v4s32 332legalized: true 333tracksRegLiveness: true 334regBankSelected: true 335 336body: | 337 bb.0: 338 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 339 340 ; GFX7-LABEL: name: store_flat_v4s32 341 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 342 ; GFX7-NEXT: {{ $}} 343 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 344 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5 345 ; GFX7-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s32>)) 346 ; GFX8-LABEL: name: store_flat_v4s32 347 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 348 ; GFX8-NEXT: {{ $}} 349 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 350 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5 351 ; GFX8-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s32>)) 352 ; GFX9-LABEL: name: store_flat_v4s32 353 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 354 ; GFX9-NEXT: {{ $}} 355 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 356 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5 357 ; GFX9-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s32>)) 358 ; GFX10-LABEL: name: store_flat_v4s32 359 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 360 ; GFX10-NEXT: {{ $}} 361 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 362 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5 363 ; GFX10-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s32>)) 364 %0:vgpr(p1) = COPY $vgpr0_vgpr1 365 %1:vgpr(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 366 G_STORE %1, %0 :: (store (<4 x s32>), align 16, addrspace 0) 367 368... 369 370--- 371 372name: store_flat_v2s16 373legalized: true 374tracksRegLiveness: true 375regBankSelected: true 376 377body: | 378 bb.0: 379 liveins: $vgpr0_vgpr1, $vgpr2 380 381 ; GFX7-LABEL: name: store_flat_v2s16 382 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2 383 ; GFX7-NEXT: {{ $}} 384 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 385 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 386 ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s16>)) 387 ; GFX8-LABEL: name: store_flat_v2s16 388 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2 389 ; GFX8-NEXT: {{ $}} 390 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 391 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 392 ; GFX8-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s16>)) 393 ; GFX9-LABEL: name: store_flat_v2s16 394 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2 395 ; GFX9-NEXT: {{ $}} 396 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 397 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 398 ; GFX9-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s16>)) 399 ; GFX10-LABEL: name: store_flat_v2s16 400 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2 401 ; GFX10-NEXT: {{ $}} 402 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 403 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 404 ; GFX10-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s16>)) 405 %0:vgpr(p1) = COPY $vgpr0_vgpr1 406 %1:vgpr(<2 x s16>) = COPY $vgpr2 407 G_STORE %1, %0 :: (store (<2 x s16>), align 4, addrspace 0) 408 409... 410 411--- 412 413name: store_flat_v4s16 414legalized: true 415tracksRegLiveness: true 416regBankSelected: true 417 418body: | 419 bb.0: 420 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 421 422 ; GFX7-LABEL: name: store_flat_v4s16 423 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 424 ; GFX7-NEXT: {{ $}} 425 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 426 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 427 ; GFX7-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s16>)) 428 ; GFX8-LABEL: name: store_flat_v4s16 429 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 430 ; GFX8-NEXT: {{ $}} 431 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 432 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 433 ; GFX8-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s16>)) 434 ; GFX9-LABEL: name: store_flat_v4s16 435 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 436 ; GFX9-NEXT: {{ $}} 437 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 438 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 439 ; GFX9-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s16>)) 440 ; GFX10-LABEL: name: store_flat_v4s16 441 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 442 ; GFX10-NEXT: {{ $}} 443 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 444 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 445 ; GFX10-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s16>)) 446 %0:vgpr(p1) = COPY $vgpr0_vgpr1 447 %1:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3 448 G_STORE %1, %0 :: (store (<4 x s16>), align 8, addrspace 0) 449 450... 451 452--- 453 454name: store_flat_v6s16 455legalized: true 456tracksRegLiveness: true 457regBankSelected: true 458 459body: | 460 bb.0: 461 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 462 463 ; GFX7-LABEL: name: store_flat_v6s16 464 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 465 ; GFX7-NEXT: {{ $}} 466 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 467 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4 468 ; GFX7-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16) 469 ; GFX8-LABEL: name: store_flat_v6s16 470 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 471 ; GFX8-NEXT: {{ $}} 472 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 473 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4 474 ; GFX8-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16) 475 ; GFX9-LABEL: name: store_flat_v6s16 476 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 477 ; GFX9-NEXT: {{ $}} 478 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 479 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4 480 ; GFX9-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16) 481 ; GFX10-LABEL: name: store_flat_v6s16 482 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 483 ; GFX10-NEXT: {{ $}} 484 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 485 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4 486 ; GFX10-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16) 487 %0:vgpr(p1) = COPY $vgpr0_vgpr1 488 %1:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4 489 G_STORE %1, %0 :: (store (<6 x s16>), align 16, addrspace 0) 490 491... 492--- 493 494name: store_flat_v8s16 495legalized: true 496tracksRegLiveness: true 497regBankSelected: true 498 499body: | 500 bb.0: 501 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 502 503 ; GFX7-LABEL: name: store_flat_v8s16 504 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 505 ; GFX7-NEXT: {{ $}} 506 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 507 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 508 ; GFX7-NEXT: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store (<8 x s16>)) 509 ; GFX8-LABEL: name: store_flat_v8s16 510 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 511 ; GFX8-NEXT: {{ $}} 512 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 513 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 514 ; GFX8-NEXT: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store (<8 x s16>)) 515 ; GFX9-LABEL: name: store_flat_v8s16 516 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 517 ; GFX9-NEXT: {{ $}} 518 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 519 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 520 ; GFX9-NEXT: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store (<8 x s16>)) 521 ; GFX10-LABEL: name: store_flat_v8s16 522 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 523 ; GFX10-NEXT: {{ $}} 524 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 525 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 526 ; GFX10-NEXT: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store (<8 x s16>)) 527 %0:vgpr(p1) = COPY $vgpr0_vgpr1 528 %1:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 529 G_STORE %1, %0 :: (store (<8 x s16>), align 16, addrspace 0) 530 531... 532 533--- 534 535name: store_flat_v2s64 536legalized: true 537tracksRegLiveness: true 538regBankSelected: true 539 540body: | 541 bb.0: 542 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 543 544 ; GFX7-LABEL: name: store_flat_v2s64 545 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 546 ; GFX7-NEXT: {{ $}} 547 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 548 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5 549 ; GFX7-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s64>)) 550 ; GFX8-LABEL: name: store_flat_v2s64 551 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 552 ; GFX8-NEXT: {{ $}} 553 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 554 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5 555 ; GFX8-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s64>)) 556 ; GFX9-LABEL: name: store_flat_v2s64 557 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 558 ; GFX9-NEXT: {{ $}} 559 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 560 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5 561 ; GFX9-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s64>)) 562 ; GFX10-LABEL: name: store_flat_v2s64 563 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 564 ; GFX10-NEXT: {{ $}} 565 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 566 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5 567 ; GFX10-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s64>)) 568 %0:vgpr(p1) = COPY $vgpr0_vgpr1 569 %1:vgpr(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 570 G_STORE %1, %0 :: (store (<2 x s64>), align 16, addrspace 0) 571 572... 573 574--- 575 576name: store_flat_p1 577legalized: true 578tracksRegLiveness: true 579regBankSelected: true 580 581body: | 582 bb.0: 583 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 584 585 ; GFX7-LABEL: name: store_flat_p1 586 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 587 ; GFX7-NEXT: {{ $}} 588 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 589 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 590 ; GFX7-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p1)) 591 ; GFX8-LABEL: name: store_flat_p1 592 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 593 ; GFX8-NEXT: {{ $}} 594 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 595 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 596 ; GFX8-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p1)) 597 ; GFX9-LABEL: name: store_flat_p1 598 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 599 ; GFX9-NEXT: {{ $}} 600 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 601 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 602 ; GFX9-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p1)) 603 ; GFX10-LABEL: name: store_flat_p1 604 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 605 ; GFX10-NEXT: {{ $}} 606 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 607 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 608 ; GFX10-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p1)) 609 %0:vgpr(p1) = COPY $vgpr0_vgpr1 610 %1:vgpr(p1) = COPY $vgpr2_vgpr3 611 G_STORE %1, %0 :: (store (p1), align 8, addrspace 0) 612 613... 614 615--- 616 617name: store_flat_v2p1 618legalized: true 619tracksRegLiveness: true 620regBankSelected: true 621 622body: | 623 bb.0: 624 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 625 626 ; GFX7-LABEL: name: store_flat_v2p1 627 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 628 ; GFX7-NEXT: {{ $}} 629 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 630 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 631 ; GFX7-NEXT: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>)) 632 ; GFX8-LABEL: name: store_flat_v2p1 633 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 634 ; GFX8-NEXT: {{ $}} 635 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 636 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 637 ; GFX8-NEXT: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>)) 638 ; GFX9-LABEL: name: store_flat_v2p1 639 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 640 ; GFX9-NEXT: {{ $}} 641 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 642 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 643 ; GFX9-NEXT: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>)) 644 ; GFX10-LABEL: name: store_flat_v2p1 645 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 646 ; GFX10-NEXT: {{ $}} 647 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 648 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 649 ; GFX10-NEXT: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>)) 650 %0:vgpr(p1) = COPY $vgpr0_vgpr1 651 %1:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5 652 G_STORE %1, %0 :: (store (<2 x p1>), align 16, addrspace 0) 653 654... 655 656--- 657 658name: store_flat_p3 659legalized: true 660tracksRegLiveness: true 661regBankSelected: true 662 663body: | 664 bb.0: 665 liveins: $vgpr0_vgpr1, $vgpr2 666 667 ; GFX7-LABEL: name: store_flat_p3 668 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2 669 ; GFX7-NEXT: {{ $}} 670 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 671 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 672 ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p3)) 673 ; GFX8-LABEL: name: store_flat_p3 674 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2 675 ; GFX8-NEXT: {{ $}} 676 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 677 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 678 ; GFX8-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p3)) 679 ; GFX9-LABEL: name: store_flat_p3 680 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2 681 ; GFX9-NEXT: {{ $}} 682 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 683 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 684 ; GFX9-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p3)) 685 ; GFX10-LABEL: name: store_flat_p3 686 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2 687 ; GFX10-NEXT: {{ $}} 688 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 689 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 690 ; GFX10-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p3)) 691 %0:vgpr(p1) = COPY $vgpr0_vgpr1 692 %1:vgpr(p3) = COPY $vgpr2 693 G_STORE %1, %0 :: (store (p3), align 4, addrspace 0) 694 695... 696 697--- 698 699name: store_flat_v2p3 700legalized: true 701tracksRegLiveness: true 702regBankSelected: true 703 704body: | 705 bb.0: 706 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 707 708 ; GFX7-LABEL: name: store_flat_v2p3 709 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 710 ; GFX7-NEXT: {{ $}} 711 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 712 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3 713 ; GFX7-NEXT: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>)) 714 ; GFX8-LABEL: name: store_flat_v2p3 715 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 716 ; GFX8-NEXT: {{ $}} 717 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 718 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3 719 ; GFX8-NEXT: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>)) 720 ; GFX9-LABEL: name: store_flat_v2p3 721 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 722 ; GFX9-NEXT: {{ $}} 723 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 724 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3 725 ; GFX9-NEXT: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>)) 726 ; GFX10-LABEL: name: store_flat_v2p3 727 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 728 ; GFX10-NEXT: {{ $}} 729 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 730 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3 731 ; GFX10-NEXT: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>)) 732 %0:vgpr(p1) = COPY $vgpr0_vgpr1 733 %1:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3 734 G_STORE %1, %0 :: (store (<2 x p3>), align 8, addrspace 0) 735 736... 737--- 738 739name: store_atomic_flat_s32 740legalized: true 741tracksRegLiveness: true 742regBankSelected: true 743 744body: | 745 bb.0: 746 liveins: $vgpr0_vgpr1, $vgpr2 747 748 ; GFX7-LABEL: name: store_atomic_flat_s32 749 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2 750 ; GFX7-NEXT: {{ $}} 751 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 752 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 753 ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s32)) 754 ; GFX8-LABEL: name: store_atomic_flat_s32 755 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2 756 ; GFX8-NEXT: {{ $}} 757 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 758 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 759 ; GFX8-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s32)) 760 ; GFX9-LABEL: name: store_atomic_flat_s32 761 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2 762 ; GFX9-NEXT: {{ $}} 763 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 764 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 765 ; GFX9-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s32)) 766 ; GFX10-LABEL: name: store_atomic_flat_s32 767 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2 768 ; GFX10-NEXT: {{ $}} 769 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 770 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 771 ; GFX10-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s32)) 772 %0:vgpr(p1) = COPY $vgpr0_vgpr1 773 %1:vgpr(s32) = COPY $vgpr2 774 G_STORE %1, %0 :: (store monotonic (s32), align 4, addrspace 0) 775 776... 777 778--- 779 780name: store_atomic_flat_s64 781legalized: true 782tracksRegLiveness: true 783regBankSelected: true 784 785body: | 786 bb.0: 787 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 788 789 ; GFX7-LABEL: name: store_atomic_flat_s64 790 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 791 ; GFX7-NEXT: {{ $}} 792 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 793 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 794 ; GFX7-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s64)) 795 ; GFX8-LABEL: name: store_atomic_flat_s64 796 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 797 ; GFX8-NEXT: {{ $}} 798 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 799 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 800 ; GFX8-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s64)) 801 ; GFX9-LABEL: name: store_atomic_flat_s64 802 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 803 ; GFX9-NEXT: {{ $}} 804 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 805 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 806 ; GFX9-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s64)) 807 ; GFX10-LABEL: name: store_atomic_flat_s64 808 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 809 ; GFX10-NEXT: {{ $}} 810 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 811 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 812 ; GFX10-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s64)) 813 %0:vgpr(p1) = COPY $vgpr0_vgpr1 814 %1:vgpr(s64) = COPY $vgpr2_vgpr3 815 G_STORE %1, %0 :: (store monotonic (s64), align 8, addrspace 0) 816 817... 818 819--- 820 821name: store_flat_s32_gep_2047 822legalized: true 823tracksRegLiveness: true 824regBankSelected: true 825 826body: | 827 bb.0: 828 liveins: $vgpr0_vgpr1, $vgpr2 829 830 ; GFX7-LABEL: name: store_flat_s32_gep_2047 831 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2 832 ; GFX7-NEXT: {{ $}} 833 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 834 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 835 ; GFX7-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec 836 ; GFX7-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec 837 ; GFX7-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, [[V_MOV_B32_e32_1]], %subreg.sub1 838 ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0 839 ; GFX7-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0 840 ; GFX7-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1 841 ; GFX7-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1 842 ; GFX7-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec 843 ; GFX7-NEXT: %9:vgpr_32, dead %11:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec 844 ; GFX7-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, %9, %subreg.sub1 845 ; GFX7-NEXT: FLAT_STORE_DWORD [[REG_SEQUENCE1]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32)) 846 ; GFX8-LABEL: name: store_flat_s32_gep_2047 847 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2 848 ; GFX8-NEXT: {{ $}} 849 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 850 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 851 ; GFX8-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec 852 ; GFX8-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec 853 ; GFX8-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, [[V_MOV_B32_e32_1]], %subreg.sub1 854 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0 855 ; GFX8-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0 856 ; GFX8-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1 857 ; GFX8-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1 858 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec 859 ; GFX8-NEXT: %9:vgpr_32, dead %11:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec 860 ; GFX8-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, %9, %subreg.sub1 861 ; GFX8-NEXT: FLAT_STORE_DWORD [[REG_SEQUENCE1]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32)) 862 ; GFX9-LABEL: name: store_flat_s32_gep_2047 863 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2 864 ; GFX9-NEXT: {{ $}} 865 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 866 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 867 ; GFX9-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 2047, 0, implicit $exec, implicit $flat_scr :: (store (s32)) 868 ; GFX10-LABEL: name: store_flat_s32_gep_2047 869 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2 870 ; GFX10-NEXT: {{ $}} 871 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 872 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2 873 ; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec 874 ; GFX10-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec 875 ; GFX10-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, [[V_MOV_B32_e32_1]], %subreg.sub1 876 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0 877 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0 878 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1 879 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1 880 ; GFX10-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec 881 ; GFX10-NEXT: %9:vgpr_32, dead %11:sreg_32_xm0_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec 882 ; GFX10-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, %9, %subreg.sub1 883 ; GFX10-NEXT: FLAT_STORE_DWORD [[REG_SEQUENCE1]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32)) 884 %0:vgpr(p1) = COPY $vgpr0_vgpr1 885 %1:vgpr(s32) = COPY $vgpr2 886 %2:vgpr(s64) = G_CONSTANT i64 2047 887 %3:vgpr(p1) = G_PTR_ADD %0, %2 888 G_STORE %1, %3 :: (store (s32), align 4, addrspace 0) 889 890... 891