xref: /llvm-project/llvm/test/CodeGen/AMDGPU/partial-forwarding-hazards.mir (revision e7900e695e7dfb36be8651d914a31f42a5d6c634)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+wavefrontsize64 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefixes=GCN,GFX11 %s
3# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefixes=GCN,GFX12 %s
4
5---
6name:            partial_forwarding_1_hazard
7body:            |
8  bb.0:
9    ; GFX11-LABEL: name: partial_forwarding_1_hazard
10    ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
11    ; GFX11-NEXT: $exec = S_MOV_B64 -1
12    ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
13    ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095
14    ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
15    ; GFX11-NEXT: S_ENDPGM 0
16    ;
17    ; GFX12-LABEL: name: partial_forwarding_1_hazard
18    ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
19    ; GFX12-NEXT: $exec = S_MOV_B64 -1
20    ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
21    ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
22    ; GFX12-NEXT: S_ENDPGM 0
23    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
24    $exec = S_MOV_B64 -1
25    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
26    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
27    S_ENDPGM 0
28...
29
30---
31name:            partial_forwarding_2_hazard
32body:            |
33  bb.0:
34    ; GFX11-LABEL: name: partial_forwarding_2_hazard
35    ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
36    ; GFX11-NEXT: $sgpr0 = S_MOV_B32 0
37    ; GFX11-NEXT: $sgpr1 = S_MOV_B32 0
38    ; GFX11-NEXT: $sgpr2 = S_MOV_B32 0
39    ; GFX11-NEXT: $exec = S_MOV_B64 -1
40    ; GFX11-NEXT: $sgpr3 = S_MOV_B32 0
41    ; GFX11-NEXT: $sgpr4 = S_MOV_B32 0
42    ; GFX11-NEXT: $sgpr5 = S_MOV_B32 0
43    ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
44    ; GFX11-NEXT: $sgpr6 = S_MOV_B32 0
45    ; GFX11-NEXT: $sgpr7 = S_MOV_B32 0
46    ; GFX11-NEXT: $sgpr8 = S_MOV_B32 0
47    ; GFX11-NEXT: $sgpr9 = S_MOV_B32 0
48    ; GFX11-NEXT: $sgpr10 = S_MOV_B32 0
49    ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095
50    ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
51    ; GFX11-NEXT: S_ENDPGM 0
52    ;
53    ; GFX12-LABEL: name: partial_forwarding_2_hazard
54    ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
55    ; GFX12-NEXT: $sgpr0 = S_MOV_B32 0
56    ; GFX12-NEXT: $sgpr1 = S_MOV_B32 0
57    ; GFX12-NEXT: $sgpr2 = S_MOV_B32 0
58    ; GFX12-NEXT: $exec = S_MOV_B64 -1
59    ; GFX12-NEXT: $sgpr3 = S_MOV_B32 0
60    ; GFX12-NEXT: $sgpr4 = S_MOV_B32 0
61    ; GFX12-NEXT: $sgpr5 = S_MOV_B32 0
62    ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
63    ; GFX12-NEXT: $sgpr6 = S_MOV_B32 0
64    ; GFX12-NEXT: $sgpr7 = S_MOV_B32 0
65    ; GFX12-NEXT: $sgpr8 = S_MOV_B32 0
66    ; GFX12-NEXT: $sgpr9 = S_MOV_B32 0
67    ; GFX12-NEXT: $sgpr10 = S_MOV_B32 0
68    ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
69    ; GFX12-NEXT: S_ENDPGM 0
70    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
71    $sgpr0 = S_MOV_B32 0
72    $sgpr1 = S_MOV_B32 0
73    $sgpr2 = S_MOV_B32 0
74    $exec = S_MOV_B64 -1
75    $sgpr3 = S_MOV_B32 0
76    $sgpr4 = S_MOV_B32 0
77    $sgpr5 = S_MOV_B32 0
78    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
79    $sgpr6 = S_MOV_B32 0
80    $sgpr7 = S_MOV_B32 0
81    $sgpr8 = S_MOV_B32 0
82    $sgpr9 = S_MOV_B32 0
83    $sgpr10 = S_MOV_B32 0
84    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
85    S_ENDPGM 0
86...
87
88---
89name:            partial_forwarding_3_hazard
90body:            |
91  bb.0:
92    ; GFX11-LABEL: name: partial_forwarding_3_hazard
93    ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
94    ; GFX11-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
95    ; GFX11-NEXT: $exec = S_MOV_B64 -1
96    ; GFX11-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
97    ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
98    ; GFX11-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
99    ; GFX11-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
100    ; GFX11-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
101    ; GFX11-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
102    ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095
103    ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
104    ; GFX11-NEXT: S_ENDPGM 0
105    ;
106    ; GFX12-LABEL: name: partial_forwarding_3_hazard
107    ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
108    ; GFX12-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
109    ; GFX12-NEXT: $exec = S_MOV_B64 -1
110    ; GFX12-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
111    ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
112    ; GFX12-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
113    ; GFX12-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
114    ; GFX12-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
115    ; GFX12-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
116    ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
117    ; GFX12-NEXT: S_ENDPGM 0
118    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
119    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
120    $exec = S_MOV_B64 -1
121    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
122    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
123    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
124    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
125    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
126    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
127    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
128    S_ENDPGM 0
129...
130
131---
132name:            partial_forwarding_3_no_hazard_1
133body:            |
134  bb.0:
135    ; GCN-LABEL: name: partial_forwarding_3_no_hazard_1
136    ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
137    ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
138    ; GCN-NEXT: $vgpr20 = V_MOV_B32_e32 0, implicit $exec
139    ; GCN-NEXT: $exec = S_MOV_B64 -1
140    ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
141    ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
142    ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
143    ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
144    ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
145    ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
146    ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
147    ; GCN-NEXT: S_ENDPGM 0
148    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
149    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
150    $vgpr20 = V_MOV_B32_e32 0, implicit $exec
151    $exec = S_MOV_B64 -1
152    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
153    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
154    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
155    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
156    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
157    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
158    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
159    S_ENDPGM 0
160...
161
162---
163name:            partial_forwarding_3_no_hazard_2
164body:            |
165  bb.0:
166    ; GCN-LABEL: name: partial_forwarding_3_no_hazard_2
167    ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
168    ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
169    ; GCN-NEXT: $exec = S_MOV_B64 -1
170    ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
171    ; GCN-NEXT: $vgpr20 = V_MOV_B32_e32 0, implicit $exec
172    ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
173    ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
174    ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
175    ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
176    ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
177    ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
178    ; GCN-NEXT: S_ENDPGM 0
179    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
180    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
181    $exec = S_MOV_B64 -1
182    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
183    $vgpr20 = V_MOV_B32_e32 0, implicit $exec
184    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
185    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
186    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
187    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
188    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
189    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
190    S_ENDPGM 0
191...
192
193---
194name:            partial_forwarding_3_no_hazard_3
195body:            |
196  bb.0:
197    ; GCN-LABEL: name: partial_forwarding_3_no_hazard_3
198    ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
199    ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
200    ; GCN-NEXT: $exec = S_MOV_B64 -1
201    ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
202    ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
203    ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
204    ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
205    ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
206    ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
207    ; GCN-NEXT: $vgpr20 = V_MOV_B32_e32 0, implicit $exec
208    ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
209    ; GCN-NEXT: S_ENDPGM 0
210    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
211    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
212    $exec = S_MOV_B64 -1
213    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
214    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
215    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
216    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
217    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
218    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
219    $vgpr20 = V_MOV_B32_e32 0, implicit $exec
220    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
221    S_ENDPGM 0
222...
223
224---
225name:            partial_forwarding_4_hazard
226body:            |
227  bb.0:
228    ; GFX11-LABEL: name: partial_forwarding_4_hazard
229    ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
230    ; GFX11-NEXT: $exec = S_MOV_B64 -1
231    ; GFX11-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
232    ; GFX11-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
233    ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
234    ; GFX11-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
235    ; GFX11-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
236    ; GFX11-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
237    ; GFX11-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
238    ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095
239    ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
240    ; GFX11-NEXT: S_ENDPGM 0
241    ;
242    ; GFX12-LABEL: name: partial_forwarding_4_hazard
243    ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
244    ; GFX12-NEXT: $exec = S_MOV_B64 -1
245    ; GFX12-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
246    ; GFX12-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
247    ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
248    ; GFX12-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
249    ; GFX12-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
250    ; GFX12-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
251    ; GFX12-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
252    ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
253    ; GFX12-NEXT: S_ENDPGM 0
254    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
255    $exec = S_MOV_B64 -1
256    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
257    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
258    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
259    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
260    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
261    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
262    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
263    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
264    S_ENDPGM 0
265...
266
267---
268name:            partial_forwarding_4_no_hazard
269body:            |
270  bb.0:
271    ; GCN-LABEL: name: partial_forwarding_4_no_hazard
272    ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
273    ; GCN-NEXT: $exec = S_MOV_B64 -1
274    ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
275    ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
276    ; GCN-NEXT: $vgpr21 = V_MOV_B32_e32 0, implicit $exec
277    ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
278    ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
279    ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
280    ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
281    ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
282    ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
283    ; GCN-NEXT: S_ENDPGM 0
284    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
285    $exec = S_MOV_B64 -1
286    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
287    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
288    $vgpr21 = V_MOV_B32_e32 0, implicit $exec
289    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
290    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
291    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
292    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
293    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
294    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
295    S_ENDPGM 0
296...
297
298---
299name:            partial_forwarding_5_hazard
300body:            |
301  bb.0:
302    ; GFX11-LABEL: name: partial_forwarding_5_hazard
303    ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
304    ; GFX11-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
305    ; GFX11-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
306    ; GFX11-NEXT: $exec = S_MOV_B64 -1
307    ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
308    ; GFX11-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
309    ; GFX11-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
310    ; GFX11-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
311    ; GFX11-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
312    ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095
313    ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
314    ; GFX11-NEXT: S_ENDPGM 0
315    ;
316    ; GFX12-LABEL: name: partial_forwarding_5_hazard
317    ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
318    ; GFX12-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
319    ; GFX12-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
320    ; GFX12-NEXT: $exec = S_MOV_B64 -1
321    ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
322    ; GFX12-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
323    ; GFX12-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
324    ; GFX12-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
325    ; GFX12-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
326    ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
327    ; GFX12-NEXT: S_ENDPGM 0
328    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
329    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
330    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
331    $exec = S_MOV_B64 -1
332    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
333    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
334    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
335    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
336    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
337    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
338    S_ENDPGM 0
339...
340
341---
342name:            partial_forwarding_5_no_hazard
343body:            |
344  bb.0:
345    ; GCN-LABEL: name: partial_forwarding_5_no_hazard
346    ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
347    ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
348    ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
349    ; GCN-NEXT: $vgpr21 = V_MOV_B32_e32 0, implicit $exec
350    ; GCN-NEXT: $exec = S_MOV_B64 -1
351    ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
352    ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
353    ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
354    ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
355    ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
356    ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
357    ; GCN-NEXT: S_ENDPGM 0
358    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
359    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
360    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
361    $vgpr21 = V_MOV_B32_e32 0, implicit $exec
362    $exec = S_MOV_B64 -1
363    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
364    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
365    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
366    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
367    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
368    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
369    S_ENDPGM 0
370...
371
372---
373name:            partial_forwarding_branching_1a
374body:            |
375  ; GFX11-LABEL: name: partial_forwarding_branching_1a
376  ; GFX11: bb.0:
377  ; GFX11-NEXT:   successors: %bb.2(0x80000000)
378  ; GFX11-NEXT: {{  $}}
379  ; GFX11-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
380  ; GFX11-NEXT:   $exec = S_MOV_B64 -1
381  ; GFX11-NEXT:   S_BRANCH %bb.2
382  ; GFX11-NEXT: {{  $}}
383  ; GFX11-NEXT: bb.1:
384  ; GFX11-NEXT:   successors: %bb.2(0x80000000)
385  ; GFX11-NEXT: {{  $}}
386  ; GFX11-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
387  ; GFX11-NEXT:   $vgpr30 = V_MOV_B32_e32 0, implicit $exec
388  ; GFX11-NEXT:   $vgpr31 = V_MOV_B32_e32 0, implicit $exec
389  ; GFX11-NEXT:   S_BRANCH %bb.2
390  ; GFX11-NEXT: {{  $}}
391  ; GFX11-NEXT: bb.2:
392  ; GFX11-NEXT:   $vgpr10 = V_MOV_B32_e32 0, implicit $exec
393  ; GFX11-NEXT:   $vgpr11 = V_MOV_B32_e32 0, implicit $exec
394  ; GFX11-NEXT:   $vgpr1 = V_MOV_B32_e32 0, implicit $exec
395  ; GFX11-NEXT:   $vgpr12 = V_MOV_B32_e32 0, implicit $exec
396  ; GFX11-NEXT:   $vgpr13 = V_MOV_B32_e32 0, implicit $exec
397  ; GFX11-NEXT:   $vgpr14 = V_MOV_B32_e32 0, implicit $exec
398  ; GFX11-NEXT:   $vgpr15 = V_MOV_B32_e32 0, implicit $exec
399  ; GFX11-NEXT:   S_WAITCNT_DEPCTR 4095
400  ; GFX11-NEXT:   $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
401  ; GFX11-NEXT:   S_ENDPGM 0
402  ;
403  ; GFX12-LABEL: name: partial_forwarding_branching_1a
404  ; GFX12: bb.0:
405  ; GFX12-NEXT:   successors: %bb.2(0x80000000)
406  ; GFX12-NEXT: {{  $}}
407  ; GFX12-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
408  ; GFX12-NEXT:   $exec = S_MOV_B64 -1
409  ; GFX12-NEXT:   S_BRANCH %bb.2
410  ; GFX12-NEXT: {{  $}}
411  ; GFX12-NEXT: bb.1:
412  ; GFX12-NEXT:   successors: %bb.2(0x80000000)
413  ; GFX12-NEXT: {{  $}}
414  ; GFX12-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
415  ; GFX12-NEXT:   $vgpr30 = V_MOV_B32_e32 0, implicit $exec
416  ; GFX12-NEXT:   $vgpr31 = V_MOV_B32_e32 0, implicit $exec
417  ; GFX12-NEXT:   S_BRANCH %bb.2
418  ; GFX12-NEXT: {{  $}}
419  ; GFX12-NEXT: bb.2:
420  ; GFX12-NEXT:   $vgpr10 = V_MOV_B32_e32 0, implicit $exec
421  ; GFX12-NEXT:   $vgpr11 = V_MOV_B32_e32 0, implicit $exec
422  ; GFX12-NEXT:   $vgpr1 = V_MOV_B32_e32 0, implicit $exec
423  ; GFX12-NEXT:   $vgpr12 = V_MOV_B32_e32 0, implicit $exec
424  ; GFX12-NEXT:   $vgpr13 = V_MOV_B32_e32 0, implicit $exec
425  ; GFX12-NEXT:   $vgpr14 = V_MOV_B32_e32 0, implicit $exec
426  ; GFX12-NEXT:   $vgpr15 = V_MOV_B32_e32 0, implicit $exec
427  ; GFX12-NEXT:   $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
428  ; GFX12-NEXT:   S_ENDPGM 0
429  bb.0:
430    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
431    $exec = S_MOV_B64 -1
432    S_BRANCH %bb.2
433  bb.1:
434    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
435    $vgpr30 = V_MOV_B32_e32 0, implicit $exec
436    $vgpr31 = V_MOV_B32_e32 0, implicit $exec
437    S_BRANCH %bb.2
438  bb.2:
439    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
440    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
441    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
442    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
443    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
444    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
445    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
446    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
447    S_ENDPGM 0
448...
449
450---
451name:            partial_forwarding_branching_1b
452body:            |
453  ; GFX11-LABEL: name: partial_forwarding_branching_1b
454  ; GFX11: bb.0:
455  ; GFX11-NEXT:   successors: %bb.2(0x80000000)
456  ; GFX11-NEXT: {{  $}}
457  ; GFX11-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
458  ; GFX11-NEXT:   $vgpr30 = V_MOV_B32_e32 0, implicit $exec
459  ; GFX11-NEXT:   $vgpr31 = V_MOV_B32_e32 0, implicit $exec
460  ; GFX11-NEXT:   S_BRANCH %bb.2
461  ; GFX11-NEXT: {{  $}}
462  ; GFX11-NEXT: bb.1:
463  ; GFX11-NEXT:   successors: %bb.2(0x80000000)
464  ; GFX11-NEXT: {{  $}}
465  ; GFX11-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
466  ; GFX11-NEXT:   $exec = S_MOV_B64 -1
467  ; GFX11-NEXT:   S_BRANCH %bb.2
468  ; GFX11-NEXT: {{  $}}
469  ; GFX11-NEXT: bb.2:
470  ; GFX11-NEXT:   $vgpr10 = V_MOV_B32_e32 0, implicit $exec
471  ; GFX11-NEXT:   $vgpr11 = V_MOV_B32_e32 0, implicit $exec
472  ; GFX11-NEXT:   $vgpr1 = V_MOV_B32_e32 0, implicit $exec
473  ; GFX11-NEXT:   $vgpr12 = V_MOV_B32_e32 0, implicit $exec
474  ; GFX11-NEXT:   $vgpr13 = V_MOV_B32_e32 0, implicit $exec
475  ; GFX11-NEXT:   $vgpr14 = V_MOV_B32_e32 0, implicit $exec
476  ; GFX11-NEXT:   $vgpr15 = V_MOV_B32_e32 0, implicit $exec
477  ; GFX11-NEXT:   S_WAITCNT_DEPCTR 4095
478  ; GFX11-NEXT:   $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
479  ; GFX11-NEXT:   S_ENDPGM 0
480  ;
481  ; GFX12-LABEL: name: partial_forwarding_branching_1b
482  ; GFX12: bb.0:
483  ; GFX12-NEXT:   successors: %bb.2(0x80000000)
484  ; GFX12-NEXT: {{  $}}
485  ; GFX12-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
486  ; GFX12-NEXT:   $vgpr30 = V_MOV_B32_e32 0, implicit $exec
487  ; GFX12-NEXT:   $vgpr31 = V_MOV_B32_e32 0, implicit $exec
488  ; GFX12-NEXT:   S_BRANCH %bb.2
489  ; GFX12-NEXT: {{  $}}
490  ; GFX12-NEXT: bb.1:
491  ; GFX12-NEXT:   successors: %bb.2(0x80000000)
492  ; GFX12-NEXT: {{  $}}
493  ; GFX12-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
494  ; GFX12-NEXT:   $exec = S_MOV_B64 -1
495  ; GFX12-NEXT:   S_BRANCH %bb.2
496  ; GFX12-NEXT: {{  $}}
497  ; GFX12-NEXT: bb.2:
498  ; GFX12-NEXT:   $vgpr10 = V_MOV_B32_e32 0, implicit $exec
499  ; GFX12-NEXT:   $vgpr11 = V_MOV_B32_e32 0, implicit $exec
500  ; GFX12-NEXT:   $vgpr1 = V_MOV_B32_e32 0, implicit $exec
501  ; GFX12-NEXT:   $vgpr12 = V_MOV_B32_e32 0, implicit $exec
502  ; GFX12-NEXT:   $vgpr13 = V_MOV_B32_e32 0, implicit $exec
503  ; GFX12-NEXT:   $vgpr14 = V_MOV_B32_e32 0, implicit $exec
504  ; GFX12-NEXT:   $vgpr15 = V_MOV_B32_e32 0, implicit $exec
505  ; GFX12-NEXT:   $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
506  ; GFX12-NEXT:   S_ENDPGM 0
507  bb.0:
508    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
509    $vgpr30 = V_MOV_B32_e32 0, implicit $exec
510    $vgpr31 = V_MOV_B32_e32 0, implicit $exec
511    S_BRANCH %bb.2
512  bb.1:
513    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
514    $exec = S_MOV_B64 -1
515    S_BRANCH %bb.2
516  bb.2:
517    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
518    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
519    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
520    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
521    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
522    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
523    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
524    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
525    S_ENDPGM 0
526...
527