1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s 3# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s 4# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s 5# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s 6# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s 7 8--- 9 10name: atomic_store_flat_s32_seq_cst 11legalized: true 12regBankSelected: true 13tracksRegLiveness: true 14 15body: | 16 bb.0: 17 liveins: $vgpr0, $vgpr1_vgpr2 18 19 ; GFX7-LABEL: name: atomic_store_flat_s32_seq_cst 20 ; GFX7: liveins: $vgpr0, $vgpr1_vgpr2 21 ; GFX7-NEXT: {{ $}} 22 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 23 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr1_vgpr2 24 ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY1]], [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (store seq_cst (s32)) 25 ; GFX9-LABEL: name: atomic_store_flat_s32_seq_cst 26 ; GFX9: liveins: $vgpr0, $vgpr1_vgpr2 27 ; GFX9-NEXT: {{ $}} 28 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 29 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr1_vgpr2 30 ; GFX9-NEXT: FLAT_STORE_DWORD [[COPY1]], [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (store seq_cst (s32)) 31 %0:vgpr(s32) = COPY $vgpr0 32 %1:vgpr(p0) = COPY $vgpr1_vgpr2 33 G_STORE %0, %1 :: (store seq_cst (s32), align 4, addrspace 0) 34 35... 36 37--- 38 39name: atomic_store_flat_v2s16_seq_cst 40legalized: true 41regBankSelected: true 42tracksRegLiveness: true 43 44body: | 45 bb.0: 46 liveins: $vgpr0, $vgpr1_vgpr2 47 48 ; GFX7-LABEL: name: atomic_store_flat_v2s16_seq_cst 49 ; GFX7: liveins: $vgpr0, $vgpr1_vgpr2 50 ; GFX7-NEXT: {{ $}} 51 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 52 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr1_vgpr2 53 ; GFX7-NEXT: G_STORE [[COPY]](<2 x s16>), [[COPY1]](p0) :: (store seq_cst (<2 x s16>)) 54 ; GFX9-LABEL: name: atomic_store_flat_v2s16_seq_cst 55 ; GFX9: liveins: $vgpr0, $vgpr1_vgpr2 56 ; GFX9-NEXT: {{ $}} 57 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 58 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr1_vgpr2 59 ; GFX9-NEXT: G_STORE [[COPY]](<2 x s16>), [[COPY1]](p0) :: (store seq_cst (<2 x s16>)) 60 %0:vgpr(<2 x s16>) = COPY $vgpr0 61 %1:vgpr(p0) = COPY $vgpr1_vgpr2 62 G_STORE %0, %1 :: (store seq_cst (<2 x s16>), align 4, addrspace 0) 63 64... 65 66--- 67 68name: atomic_store_flat_p3_seq_cst 69legalized: true 70regBankSelected: true 71tracksRegLiveness: true 72 73body: | 74 bb.0: 75 liveins: $vgpr0, $vgpr1_vgpr2 76 77 ; GFX7-LABEL: name: atomic_store_flat_p3_seq_cst 78 ; GFX7: liveins: $vgpr0, $vgpr1_vgpr2 79 ; GFX7-NEXT: {{ $}} 80 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0 81 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr1_vgpr2 82 ; GFX7-NEXT: G_STORE [[COPY]](p3), [[COPY1]](p0) :: (store seq_cst (p3)) 83 ; GFX9-LABEL: name: atomic_store_flat_p3_seq_cst 84 ; GFX9: liveins: $vgpr0, $vgpr1_vgpr2 85 ; GFX9-NEXT: {{ $}} 86 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0 87 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr1_vgpr2 88 ; GFX9-NEXT: G_STORE [[COPY]](p3), [[COPY1]](p0) :: (store seq_cst (p3)) 89 %0:vgpr(p3) = COPY $vgpr0 90 %1:vgpr(p0) = COPY $vgpr1_vgpr2 91 G_STORE %0, %1 :: (store seq_cst (p3), align 4, addrspace 0) 92 93... 94 95--- 96 97name: atomic_store_flat_p5_seq_cst 98legalized: true 99regBankSelected: true 100tracksRegLiveness: true 101 102body: | 103 bb.0: 104 liveins: $vgpr0, $vgpr1_vgpr2 105 106 ; GFX7-LABEL: name: atomic_store_flat_p5_seq_cst 107 ; GFX7: liveins: $vgpr0, $vgpr1_vgpr2 108 ; GFX7-NEXT: {{ $}} 109 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p5) = COPY $vgpr0 110 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr1_vgpr2 111 ; GFX7-NEXT: G_STORE [[COPY]](p5), [[COPY1]](p0) :: (store seq_cst (p5)) 112 ; GFX9-LABEL: name: atomic_store_flat_p5_seq_cst 113 ; GFX9: liveins: $vgpr0, $vgpr1_vgpr2 114 ; GFX9-NEXT: {{ $}} 115 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p5) = COPY $vgpr0 116 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr1_vgpr2 117 ; GFX9-NEXT: G_STORE [[COPY]](p5), [[COPY1]](p0) :: (store seq_cst (p5)) 118 %0:vgpr(p5) = COPY $vgpr0 119 %1:vgpr(p0) = COPY $vgpr1_vgpr2 120 G_STORE %0, %1 :: (store seq_cst (p5), align 4, addrspace 0) 121 122... 123 124--- 125 126name: atomic_store_flat_p6_seq_cst 127legalized: true 128regBankSelected: true 129tracksRegLiveness: true 130 131body: | 132 bb.0: 133 liveins: $vgpr0, $vgpr1_vgpr2 134 135 ; GFX7-LABEL: name: atomic_store_flat_p6_seq_cst 136 ; GFX7: liveins: $vgpr0, $vgpr1_vgpr2 137 ; GFX7-NEXT: {{ $}} 138 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p6) = COPY $vgpr0 139 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr1_vgpr2 140 ; GFX7-NEXT: G_STORE [[COPY]](p6), [[COPY1]](p0) :: (store seq_cst (p6)) 141 ; GFX9-LABEL: name: atomic_store_flat_p6_seq_cst 142 ; GFX9: liveins: $vgpr0, $vgpr1_vgpr2 143 ; GFX9-NEXT: {{ $}} 144 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p6) = COPY $vgpr0 145 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr1_vgpr2 146 ; GFX9-NEXT: G_STORE [[COPY]](p6), [[COPY1]](p0) :: (store seq_cst (p6)) 147 %0:vgpr(p6) = COPY $vgpr0 148 %1:vgpr(p0) = COPY $vgpr1_vgpr2 149 G_STORE %0, %1 :: (store seq_cst (p6), align 4, addrspace 0) 150 151... 152 153--- 154 155name: atomic_store_flat_s64_seq_cst 156legalized: true 157regBankSelected: true 158tracksRegLiveness: true 159 160body: | 161 bb.0: 162 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 163 164 ; GFX7-LABEL: name: atomic_store_flat_s64_seq_cst 165 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 166 ; GFX7-NEXT: {{ $}} 167 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 168 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 169 ; GFX7-NEXT: FLAT_STORE_DWORDX2 [[COPY1]], [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (store seq_cst (s64)) 170 ; GFX9-LABEL: name: atomic_store_flat_s64_seq_cst 171 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 172 ; GFX9-NEXT: {{ $}} 173 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 174 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3 175 ; GFX9-NEXT: FLAT_STORE_DWORDX2 [[COPY1]], [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (store seq_cst (s64)) 176 %0:vgpr(s64) = COPY $vgpr0_vgpr1 177 %1:vgpr(p0) = COPY $vgpr2_vgpr3 178 G_STORE %0, %1 :: (store seq_cst (s64), align 8, addrspace 0) 179 180... 181 182--- 183 184name: atomic_store_flat_v2s32_seq_cst 185legalized: true 186regBankSelected: true 187tracksRegLiveness: true 188 189body: | 190 bb.0: 191 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 192 193 ; GFX7-LABEL: name: atomic_store_flat_v2s32_seq_cst 194 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 195 ; GFX7-NEXT: {{ $}} 196 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1 197 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr2_vgpr3 198 ; GFX7-NEXT: G_STORE [[COPY]](<2 x s32>), [[COPY1]](p0) :: (store seq_cst (<2 x s32>)) 199 ; GFX9-LABEL: name: atomic_store_flat_v2s32_seq_cst 200 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 201 ; GFX9-NEXT: {{ $}} 202 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1 203 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr2_vgpr3 204 ; GFX9-NEXT: G_STORE [[COPY]](<2 x s32>), [[COPY1]](p0) :: (store seq_cst (<2 x s32>)) 205 %0:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1 206 %1:vgpr(p0) = COPY $vgpr2_vgpr3 207 G_STORE %0, %1 :: (store seq_cst (<2 x s32>), align 8, addrspace 0) 208 209... 210 211--- 212 213name: atomic_store_flat_v4s16_seq_cst 214legalized: true 215regBankSelected: true 216tracksRegLiveness: true 217 218body: | 219 bb.0: 220 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 221 222 ; GFX7-LABEL: name: atomic_store_flat_v4s16_seq_cst 223 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 224 ; GFX7-NEXT: {{ $}} 225 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1 226 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr2_vgpr3 227 ; GFX7-NEXT: G_STORE [[COPY]](<4 x s16>), [[COPY1]](p0) :: (store seq_cst (<4 x s16>)) 228 ; GFX9-LABEL: name: atomic_store_flat_v4s16_seq_cst 229 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 230 ; GFX9-NEXT: {{ $}} 231 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1 232 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr2_vgpr3 233 ; GFX9-NEXT: G_STORE [[COPY]](<4 x s16>), [[COPY1]](p0) :: (store seq_cst (<4 x s16>)) 234 %0:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1 235 %1:vgpr(p0) = COPY $vgpr2_vgpr3 236 G_STORE %0, %1 :: (store seq_cst (<4 x s16>), align 8, addrspace 0) 237 238... 239 240--- 241 242name: atomic_store_flat_p0_seq_cst 243legalized: true 244regBankSelected: true 245tracksRegLiveness: true 246 247body: | 248 bb.0: 249 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 250 251 ; GFX7-LABEL: name: atomic_store_flat_p0_seq_cst 252 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 253 ; GFX7-NEXT: {{ $}} 254 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1 255 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr2_vgpr3 256 ; GFX7-NEXT: G_STORE [[COPY]](p0), [[COPY1]](p0) :: (store seq_cst (p0)) 257 ; GFX9-LABEL: name: atomic_store_flat_p0_seq_cst 258 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 259 ; GFX9-NEXT: {{ $}} 260 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p0) = COPY $vgpr0_vgpr1 261 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr2_vgpr3 262 ; GFX9-NEXT: G_STORE [[COPY]](p0), [[COPY1]](p0) :: (store seq_cst (p0)) 263 %0:vgpr(p0) = COPY $vgpr0_vgpr1 264 %1:vgpr(p0) = COPY $vgpr2_vgpr3 265 G_STORE %0, %1 :: (store seq_cst (p0), align 8, addrspace 0) 266 267... 268--- 269 270name: atomic_store_flat_p1_seq_cst 271legalized: true 272regBankSelected: true 273tracksRegLiveness: true 274 275body: | 276 bb.0: 277 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 278 279 ; GFX7-LABEL: name: atomic_store_flat_p1_seq_cst 280 ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 281 ; GFX7-NEXT: {{ $}} 282 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 283 ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr2_vgpr3 284 ; GFX7-NEXT: G_STORE [[COPY]](p1), [[COPY1]](p0) :: (store seq_cst (p1)) 285 ; GFX9-LABEL: name: atomic_store_flat_p1_seq_cst 286 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 287 ; GFX9-NEXT: {{ $}} 288 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1 289 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(p0) = COPY $vgpr2_vgpr3 290 ; GFX9-NEXT: G_STORE [[COPY]](p1), [[COPY1]](p0) :: (store seq_cst (p1)) 291 %0:vgpr(p1) = COPY $vgpr0_vgpr1 292 %1:vgpr(p0) = COPY $vgpr2_vgpr3 293 G_STORE %0, %1 :: (store seq_cst (p1), align 8, addrspace 0) 294 295... 296