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