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