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