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