1# RUN: llc -march=amdgcn -mcpu=fiji -run-pass si-insert-skips -verify-machineinstrs -o - %s | FileCheck -check-prefix=GCN %s
2
3---
4# GCN-LABEL: name: and_execz_mov_vccz
5# GCN-NOT: S_MOV_
6# GCN-NOT: S_AND_
7# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec
8name:            and_execz_mov_vccz
9body:             |
10  bb.0:
11    S_NOP 0
12
13  bb.1:
14    S_NOP 0
15
16  bb.2:
17    $sgpr0_sgpr1 = S_MOV_B64 -1
18    $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc
19    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
20    S_ENDPGM
21...
22---
23# GCN-LABEL: name: and_execz_imm_vccz
24# GCN-NOT: S_AND_
25# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec
26name:            and_execz_imm_vccz
27body:             |
28  bb.0:
29    S_NOP 0
30
31  bb.1:
32    S_NOP 0
33
34  bb.2:
35    $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc
36    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
37    S_ENDPGM
38...
39---
40# GCN-LABEL: name: and_execnz_imm_vccnz
41# GCN-NOT: S_AND_
42# GCN: S_CBRANCH_EXECNZ %bb.1, implicit $exec
43name:            and_execnz_imm_vccnz
44body:             |
45  bb.0:
46    S_NOP 0
47
48  bb.1:
49    S_NOP 0
50
51  bb.2:
52    $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc
53    S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc
54    S_ENDPGM
55...
56---
57# GCN-LABEL: name: and_execz_imm_vccz_live_scc
58# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc
59# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec
60name:            and_execz_imm_vccz_live_scc
61body:             |
62  bb.0:
63    S_NOP 0
64
65  bb.1:
66    S_NOP 0
67
68  bb.2:
69    $vcc = S_AND_B64 $exec, -1, implicit-def $scc
70    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
71    S_ENDPGM
72...
73---
74# GCN-LABEL: name: and_execz_mov_vccz_live_scc
75# GCN-NOT: S_MOV_
76# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc
77# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec
78name:            and_execz_mov_vccz_live_scc
79body:             |
80  bb.0:
81    S_NOP 0
82
83  bb.1:
84    S_NOP 0
85
86  bb.2:
87    $sgpr0_sgpr1 = S_MOV_B64 -1
88    $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc
89    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
90    S_ENDPGM
91...
92---
93# GCN-LABEL: name: and_execz_mov_vccz_live_sreg
94# GCN:      $sgpr0_sgpr1 = S_MOV_B64 -1
95# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec
96name:            and_execz_mov_vccz_live_sreg
97body:             |
98  bb.0:
99    S_NOP 0
100
101  bb.1:
102    S_NOP 0
103
104  bb.2:
105    $sgpr0_sgpr1 = S_MOV_B64 -1
106    $vcc = S_AND_B64 $exec, $sgpr0_sgpr1, implicit-def dead $scc
107    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
108    S_ENDPGM
109...
110---
111# GCN-LABEL: name: and_execz_mov_vccz_live_sreg_commute
112# GCN:      $sgpr0_sgpr1 = S_MOV_B64 -1
113# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec
114name:            and_execz_mov_vccz_live_sreg_commute
115body:             |
116  bb.0:
117    S_NOP 0
118
119  bb.1:
120    S_NOP 0
121
122  bb.2:
123    $sgpr0_sgpr1 = S_MOV_B64 -1
124    $vcc = S_AND_B64 $sgpr0_sgpr1, $exec, implicit-def dead $scc
125    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
126    S_ENDPGM
127...
128---
129# GCN-LABEL: name: and_execz_mov_vccz_live_scc_commute
130# GCN-NOT: S_MOV_
131# GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc
132# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec
133name:            and_execz_mov_vccz_live_scc_commute
134body:             |
135  bb.0:
136    S_NOP 0
137
138  bb.1:
139    S_NOP 0
140
141  bb.2:
142    $sgpr0_sgpr1 = S_MOV_B64 -1
143    $vcc = S_AND_B64 killed $sgpr0_sgpr1, $exec, implicit-def $scc
144    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
145    S_ENDPGM
146...
147---
148# GCN-LABEL: name: and_execz_mov_vccz_commute
149# GCN-NOT: S_MOV_
150# GCN-NOT: S_AND_
151# GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec
152name:            and_execz_mov_vccz_commute
153body:             |
154  bb.0:
155    S_NOP 0
156
157  bb.1:
158    S_NOP 0
159
160  bb.2:
161    $sgpr0_sgpr1 = S_MOV_B64 -1
162    $vcc = S_AND_B64 killed $sgpr0_sgpr1, $exec, implicit-def dead $scc
163    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
164    S_ENDPGM
165...
166---
167# GCN-LABEL: name: and_execz_mov_exec_vccz
168# GCN:      $exec = S_MOV_B64 -1
169# GCN-NEXT: S_ENDPGM
170name:            and_execz_mov_exec_vccz
171body:             |
172  bb.0:
173    S_NOP 0
174
175  bb.1:
176    S_NOP 0
177
178  bb.2:
179    $exec = S_MOV_B64 -1
180    $vcc = S_AND_B64 $exec, $exec, implicit-def dead $scc
181    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
182    S_ENDPGM
183...
184---
185# GCN-LABEL: name: and_execz_mov_exec_vccnz
186# GCN:      $exec = S_MOV_B64 -1
187# GCN-NEXT: S_BRANCH %bb.1{{$}}
188name:            and_execz_mov_exec_vccnz
189body:             |
190  bb.0:
191    S_NOP 0
192
193  bb.1:
194    S_NOP 0
195
196  bb.2:
197    $exec = S_MOV_B64 -1
198    $vcc = S_AND_B64 $exec, $exec, implicit-def dead $scc
199    S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc
200    S_ENDPGM
201...
202---
203# GCN-LABEL: name: and_execz_mov_vccz_reads_sreg_early
204# GCN:      $sgpr0_sgpr1 = S_MOV_B64 -1
205# GCN-NEXT: $sgpr2 = S_MOV_B32 $sgpr1
206# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec
207name:            and_execz_mov_vccz_reads_sreg_early
208body:             |
209  bb.0:
210    S_NOP 0
211
212  bb.1:
213    S_NOP 0
214
215  bb.2:
216    $sgpr0_sgpr1 = S_MOV_B64 -1
217    $sgpr2 = S_MOV_B32 $sgpr1
218    $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc
219    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
220    S_ENDPGM
221...
222---
223# GCN-LABEL: name: and_execz_mov_vccz_reads_sreg_late
224# GCN:      $sgpr0_sgpr1 = S_MOV_B64 -1
225# GCN-NEXT: $sgpr2 = S_MOV_B32 $sgpr1
226# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec
227name:            and_execz_mov_vccz_reads_sreg_late
228body:             |
229  bb.0:
230    S_NOP 0
231
232  bb.1:
233    S_NOP 0
234
235  bb.2:
236    $sgpr0_sgpr1 = S_MOV_B64 -1
237    $vcc = S_AND_B64 $exec, $sgpr0_sgpr1, implicit-def dead $scc
238    $sgpr2 = S_MOV_B32 $sgpr1
239    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
240    S_ENDPGM
241...
242# GCN-LABEL: name: and_execz_mov_vccz_reads_writes_sreg_early
243# GCN:      $sgpr0_sgpr1 = S_MOV_B64 -1
244# GCN-NEXT: $sgpr1 = S_MOV_B32 $sgpr0
245# GCN-NEXT: $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc
246# GCN-NEXT: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
247name:            and_execz_mov_vccz_reads_writes_sreg_early
248body:             |
249  bb.0:
250    S_NOP 0
251
252  bb.1:
253    S_NOP 0
254
255  bb.2:
256    $sgpr0_sgpr1 = S_MOV_B64 -1
257    $sgpr1 = S_MOV_B32 $sgpr0
258    $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc
259    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
260    S_ENDPGM
261...
262---
263# GCN-LABEL: name: and_execz_mov_vccz_reads_cond
264# GCN:      $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc
265# GCN-NEXT: $sgpr2 = S_MOV_B32 $vcc_lo
266# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec
267name:            and_execz_mov_vccz_reads_cond
268body:             |
269  bb.0:
270    S_NOP 0
271
272  bb.1:
273    S_NOP 0
274
275  bb.2:
276    $sgpr0_sgpr1 = S_MOV_B64 -1
277    $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc
278    $sgpr2 = S_MOV_B32 $vcc_lo
279    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
280    S_ENDPGM
281...
282---
283# GCN-LABEL: name: and_execz_mov_vccz_modifies_sreg
284# GCN:      $sgpr0_sgpr1 = S_MOV_B64 -1
285# GCN-NEXT: $sgpr0 = S_MOV_B32 0
286# GCN-NEXT: $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc
287# GCN-NEXT: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
288name:            and_execz_mov_vccz_modifies_sreg
289body:             |
290  bb.0:
291    S_NOP 0
292
293  bb.1:
294    S_NOP 0
295
296  bb.2:
297    $sgpr0_sgpr1 = S_MOV_B64 -1
298    $sgpr0 = S_MOV_B32 0
299    $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc
300    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
301    S_ENDPGM
302...
303---
304# GCN-LABEL: name: and_execz_imm_vccz_liveout_scc
305# GCN:      $vcc = S_AND_B64 $exec, -1, implicit-def $scc
306# GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec
307# GCN-NEXT  S_ENDPGM implicit $scc
308name:            and_execz_imm_vccz_liveout_scc
309body:             |
310  bb.0:
311    S_NOP 0
312
313  bb.1:
314    S_NOP 0
315
316  bb.2:
317    $vcc = S_AND_B64 $exec, -1, implicit-def $scc
318    S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
319    S_ENDPGM implicit $scc
320...
321