xref: /llvm-project/llvm/test/CodeGen/AMDGPU/lds-branch-vmem-hazard.mir (revision 9e9907f1cfa424366fba58d9520f9305b537cec9)
1# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefixes=GCN,GFX10 %s
2# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefixes=GCN %s
3
4# GCN-LABEL: name: hazard_lds_branch_buf
5# GCN:        bb.1:
6# GFX10-NEXT: S_WAITCNT_VSCNT undef $sgpr_null, 0
7# GCN-NEXT:   BUFFER_LOAD_DWORD_OFFEN
8---
9name:            hazard_lds_branch_buf
10body:            |
11  bb.0:
12    successors: %bb.1
13    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
14    S_BRANCH %bb.1
15
16  bb.1:
17    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
18    S_ENDPGM 0
19...
20
21# GCN-LABEL: name: hazard_buf_branch_lds
22# GCN:        bb.1:
23# GFX10-NEXT: S_WAITCNT_VSCNT undef $sgpr_null, 0
24# GCN-NEXT:   DS_READ_B32
25---
26name:            hazard_buf_branch_lds
27body:            |
28  bb.0:
29    successors: %bb.1
30    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
31    S_BRANCH %bb.1
32
33  bb.1:
34    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
35    S_ENDPGM 0
36...
37
38# GCN-LABEL: name: no_hazard_lds_branch_lds
39# GCN:       bb.1:
40# GCN-NEXT:  DS_READ_B32
41---
42name:            no_hazard_lds_branch_lds
43body:            |
44  bb.0:
45    successors: %bb.1
46    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
47    S_BRANCH %bb.1
48
49  bb.1:
50    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
51    S_ENDPGM 0
52...
53
54# GCN-LABEL: name: no_hazard_buf_branch_buf
55# GCN:      bb.1:
56# GCN-NEXT: BUFFER_LOAD_DWORD_OFFEN
57---
58name:            no_hazard_buf_branch_buf
59body:            |
60  bb.0:
61    successors: %bb.1
62    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
63    S_BRANCH %bb.1
64
65  bb.1:
66    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
67    S_ENDPGM 0
68...
69
70# GCN-LABEL: name: no_hazard_lds_branch_buf_fallthrough
71# GCN:      bb.1:
72# GCN-NEXT: BUFFER_LOAD_DWORD_OFFEN
73---
74name:            no_hazard_lds_branch_buf_fallthrough
75body:            |
76  bb.0:
77    successors: %bb.1
78    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
79
80  bb.1:
81    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
82    S_ENDPGM 0
83...
84
85# GCN-LABEL: name: no_hazard_lds_branch_buf_samebb
86# GCN:      DS_READ_B32
87# GCN-NEXT: BUFFER_LOAD_DWORD_OFFEN
88---
89name:            no_hazard_lds_branch_buf_samebb
90body:            |
91  bb.0:
92    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
93    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
94    S_ENDPGM 0
95...
96
97# GCN-LABEL: name: hazard_lds_branch_buf_loop
98# GFX10:    S_WAITCNT_VSCNT undef $sgpr_null, 0
99# GCN:      DS_READ_B32
100# GCN-NEXT: BUFFER_LOAD_DWORD_OFFEN
101---
102name:            hazard_lds_branch_buf_loop
103body:            |
104  bb.0:
105    successors: %bb.0
106    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
107    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
108    S_BRANCH %bb.0
109...
110
111# GCN-LABEL: name: single_hazard_lds_branch_buf
112# GCN:        bb.1:
113# GFX10-NEXT: S_WAITCNT_VSCNT undef $sgpr_null, 0
114# GCN-NEXT:   BUFFER_LOAD_DWORD_OFFEN
115# GCN-NEXT:   BUFFER_LOAD_DWORD_OFFEN
116---
117name:            single_hazard_lds_branch_buf
118body:            |
119  bb.0:
120    successors: %bb.1
121    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
122    S_BRANCH %bb.1
123
124  bb.1:
125    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
126    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
127    S_ENDPGM 0
128...
129
130# GCN-LABEL: name: no_hazard_lds_branch_lds_buf
131# GCN:      bb.1:
132# GCN-NEXT: DS_READ_B32
133# GCN-NEXT: BUFFER_LOAD_DWORD_OFFEN
134---
135name:            no_hazard_lds_branch_lds_buf
136body:            |
137  bb.0:
138    successors: %bb.1
139    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
140    S_BRANCH %bb.1
141
142  bb.1:
143    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
144    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
145    S_ENDPGM 0
146...
147
148# GCN-LABEL: name: no_hazard_lds_buf_branch_buf
149# GCN:      bb.1:
150# GCN-NEXT: BUFFER_LOAD_DWORD_OFFEN
151---
152name:            no_hazard_lds_buf_branch_buf
153body:            |
154  bb.0:
155    successors: %bb.1
156    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
157    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
158    S_BRANCH %bb.1
159
160  bb.1:
161    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
162    S_ENDPGM 0
163...
164
165# GCN-LABEL: name: hazard_lds_branch_vscnt_1_buf
166# GCN:        bb.1:
167# GCN-NEXT:   S_WAITCNT_VSCNT undef $sgpr_null, 1
168# GFX10-NEXT: S_WAITCNT_VSCNT undef $sgpr_null, 0
169# GCN-NEXT:   BUFFER_LOAD_DWORD_OFFEN
170---
171name:            hazard_lds_branch_vscnt_1_buf
172body:            |
173  bb.0:
174    successors: %bb.1
175    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
176    S_BRANCH %bb.1
177
178  bb.1:
179    S_WAITCNT_VSCNT undef $sgpr_null, 1
180    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
181    S_ENDPGM 0
182...
183
184# GCN-LABEL: name: no_hazard_lds_branch_vscnt_0_buf
185# GCN:      bb.1:
186# GCN-NEXT: S_WAITCNT_VSCNT undef $sgpr_null, 0
187# GCN-NEXT: BUFFER_LOAD_DWORD_OFFEN
188---
189name:            no_hazard_lds_branch_vscnt_0_buf
190body:            |
191  bb.0:
192    successors: %bb.1
193    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
194    S_BRANCH %bb.1
195
196  bb.1:
197    S_WAITCNT_VSCNT undef $sgpr_null, 0
198    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
199    S_ENDPGM 0
200...
201
202# GCN-LABEL: name: hazard_lds_branch_vscnt_s0_buf
203# GCN:        bb.1:
204# GCN-NEXT:   S_WAITCNT_VSCNT undef $sgpr0, 0
205# GFX10-NEXT: S_WAITCNT_VSCNT undef $sgpr_null, 0
206# GCN-NEXT:   BUFFER_LOAD_DWORD_OFFEN
207---
208name:            hazard_lds_branch_vscnt_s0_buf
209body:            |
210  bb.0:
211    successors: %bb.1
212    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
213    S_BRANCH %bb.1
214
215  bb.1:
216    S_WAITCNT_VSCNT undef $sgpr0, 0
217    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
218    S_ENDPGM 0
219...
220
221# GCN-LABEL: name: no_hazard_lds_vscnt_0_branch_buf
222# GCN:      bb.1:
223# GCN-NEXT: BUFFER_LOAD_DWORD_OFFEN
224---
225name:            no_hazard_lds_vscnt_0_branch_buf
226body:            |
227  bb.0:
228    successors: %bb.1
229    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
230    S_WAITCNT_VSCNT undef $sgpr_null, 0
231    S_BRANCH %bb.1
232
233  bb.1:
234    $vgpr1 = BUFFER_LOAD_DWORD_OFFEN undef $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, undef $sgpr4, 0, 0, 0, implicit $exec
235    S_ENDPGM 0
236...
237
238# GCN-LABEL: name: hazard_lds_branch_global
239# GCN:        bb.1:
240# GFX10-NEXT: S_WAITCNT_VSCNT undef $sgpr_null, 0
241# GCN-NEXT:   GLOBAL_LOAD_DWORD
242---
243name:            hazard_lds_branch_global
244body:            |
245  bb.0:
246    successors: %bb.1
247    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
248    S_BRANCH %bb.1
249
250  bb.1:
251    $vgpr1 = GLOBAL_LOAD_DWORD undef $vgpr0_vgpr1, 0, 0, implicit $exec
252    S_ENDPGM 0
253...
254
255# GCN-LABEL: name: hazard_lds_branch_scratch
256# GCN:        bb.1:
257# GFX10-NEXT: S_WAITCNT_VSCNT undef $sgpr_null, 0
258# GCN-NEXT:   SCRATCH_LOAD_DWORD
259---
260name:            hazard_lds_branch_scratch
261body:            |
262  bb.0:
263    successors: %bb.1
264    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
265    S_BRANCH %bb.1
266
267  bb.1:
268    $vgpr1 = SCRATCH_LOAD_DWORD undef $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
269    S_ENDPGM 0
270...
271
272# GCN-LABEL: name: no_hazard_lds_branch_flat
273# GCN:      bb.1:
274# GCN-NEXT: FLAT_LOAD_DWORD
275---
276name:            no_hazard_lds_branch_flat
277body:            |
278  bb.0:
279    successors: %bb.1
280    $vgpr1 = DS_READ_B32 undef $vgpr0, 0, 0, implicit $m0, implicit $exec
281    S_BRANCH %bb.1
282
283  bb.1:
284    $vgpr1 = FLAT_LOAD_DWORD undef $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
285    S_ENDPGM 0
286...
287