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