[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / AMDGPU / insert-skip-from-vcc.mir
blob4d92b06335b27577629a7154610698c5cf9b8516
1 # RUN: llc -march=amdgcn -mcpu=fiji -run-pass si-insert-skips -verify-machineinstrs -o - %s | FileCheck -check-prefix=GCN %s
2 # RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass si-insert-skips -verify-machineinstrs -o - %s | FileCheck -check-prefix=W32 %s
4 ---
5 # GCN-LABEL: name: and_execz_mov_vccz
6 # GCN-NOT: S_MOV_
7 # GCN-NOT: S_AND_
8 # GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec
9 name:            and_execz_mov_vccz
10 body:             |
11   bb.0:
12     S_NOP 0
14   bb.1:
15     S_NOP 0
17   bb.2:
18     $sgpr0_sgpr1 = S_MOV_B64 -1
19     $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc
20     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
21     S_ENDPGM 0
22 ...
23 ---
24 # GCN-LABEL: name: and_execz_imm_vccz
25 # GCN-NOT: S_AND_
26 # GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec
27 name:            and_execz_imm_vccz
28 body:             |
29   bb.0:
30     S_NOP 0
32   bb.1:
33     S_NOP 0
35   bb.2:
36     $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc
37     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
38     S_ENDPGM 0
39 ...
40 ---
41 # GCN-LABEL: name: and_execnz_imm_vccnz
42 # GCN-NOT: S_AND_
43 # GCN: S_CBRANCH_EXECNZ %bb.1, implicit $exec
44 name:            and_execnz_imm_vccnz
45 body:             |
46   bb.0:
47     S_NOP 0
49   bb.1:
50     S_NOP 0
52   bb.2:
53     $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc
54     S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc
55     S_ENDPGM 0
56 ...
57 ---
58 # GCN-LABEL: name: and_execz_imm_vccz_live_scc
59 # GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc
60 # GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec
61 name:            and_execz_imm_vccz_live_scc
62 body:             |
63   bb.0:
64     S_NOP 0
66   bb.1:
67     S_NOP 0
69   bb.2:
70     $vcc = S_AND_B64 $exec, -1, implicit-def $scc
71     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
72     S_ENDPGM 0
73 ...
74 ---
75 # GCN-LABEL: name: and_execz_mov_vccz_live_scc
76 # GCN-NOT: S_MOV_
77 # GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc
78 # GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec
79 name:            and_execz_mov_vccz_live_scc
80 body:             |
81   bb.0:
82     S_NOP 0
84   bb.1:
85     S_NOP 0
87   bb.2:
88     $sgpr0_sgpr1 = S_MOV_B64 -1
89     $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc
90     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
91     S_ENDPGM 0
92 ...
93 ---
94 # GCN-LABEL: name: and_execz_mov_vccz_live_sreg
95 # GCN:      $sgpr0_sgpr1 = S_MOV_B64 -1
96 # GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec
97 name:            and_execz_mov_vccz_live_sreg
98 body:             |
99   bb.0:
100     S_NOP 0
102   bb.1:
103     S_NOP 0
105   bb.2:
106     $sgpr0_sgpr1 = S_MOV_B64 -1
107     $vcc = S_AND_B64 $exec, $sgpr0_sgpr1, implicit-def dead $scc
108     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
109     S_ENDPGM 0
112 # GCN-LABEL: name: and_execz_mov_vccz_live_sreg_commute
113 # GCN:      $sgpr0_sgpr1 = S_MOV_B64 -1
114 # GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec
115 name:            and_execz_mov_vccz_live_sreg_commute
116 body:             |
117   bb.0:
118     S_NOP 0
120   bb.1:
121     S_NOP 0
123   bb.2:
124     $sgpr0_sgpr1 = S_MOV_B64 -1
125     $vcc = S_AND_B64 $sgpr0_sgpr1, $exec, implicit-def dead $scc
126     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
127     S_ENDPGM 0
130 # GCN-LABEL: name: and_execz_mov_vccz_live_scc_commute
131 # GCN-NOT: S_MOV_
132 # GCN: $vcc = S_AND_B64 $exec, -1, implicit-def $scc
133 # GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec
134 name:            and_execz_mov_vccz_live_scc_commute
135 body:             |
136   bb.0:
137     S_NOP 0
139   bb.1:
140     S_NOP 0
142   bb.2:
143     $sgpr0_sgpr1 = S_MOV_B64 -1
144     $vcc = S_AND_B64 killed $sgpr0_sgpr1, $exec, implicit-def $scc
145     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
146     S_ENDPGM 0
149 # GCN-LABEL: name: and_execz_mov_vccz_commute
150 # GCN-NOT: S_MOV_
151 # GCN-NOT: S_AND_
152 # GCN: S_CBRANCH_EXECZ %bb.1, implicit $exec
153 name:            and_execz_mov_vccz_commute
154 body:             |
155   bb.0:
156     S_NOP 0
158   bb.1:
159     S_NOP 0
161   bb.2:
162     $sgpr0_sgpr1 = S_MOV_B64 -1
163     $vcc = S_AND_B64 killed $sgpr0_sgpr1, $exec, implicit-def dead $scc
164     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
165     S_ENDPGM 0
168 # GCN-LABEL: name: and_execz_mov_exec_vccz
169 # GCN:      $exec = S_MOV_B64 -1
170 # GCN-NEXT: S_ENDPGM 0
171 name:            and_execz_mov_exec_vccz
172 body:             |
173   bb.0:
174     S_NOP 0
176   bb.1:
177     S_NOP 0
179   bb.2:
180     $exec = S_MOV_B64 -1
181     $vcc = S_AND_B64 $exec, $exec, implicit-def dead $scc
182     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
183     S_ENDPGM 0
186 # GCN-LABEL: name: and_execz_mov_exec_vccnz
187 # GCN:      $exec = S_MOV_B64 -1
188 # GCN-NEXT: S_BRANCH %bb.1{{$}}
189 name:            and_execz_mov_exec_vccnz
190 body:             |
191   bb.0:
192     S_NOP 0
194   bb.1:
195     S_NOP 0
197   bb.2:
198     $exec = S_MOV_B64 -1
199     $vcc = S_AND_B64 $exec, $exec, implicit-def dead $scc
200     S_CBRANCH_VCCNZ %bb.1, implicit killed $vcc
201     S_ENDPGM 0
204 # GCN-LABEL: name: and_execz_mov_vccz_reads_sreg_early
205 # GCN:      $sgpr0_sgpr1 = S_MOV_B64 -1
206 # GCN-NEXT: $sgpr2 = S_MOV_B32 $sgpr1
207 # GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec
208 name:            and_execz_mov_vccz_reads_sreg_early
209 body:             |
210   bb.0:
211     S_NOP 0
213   bb.1:
214     S_NOP 0
216   bb.2:
217     $sgpr0_sgpr1 = S_MOV_B64 -1
218     $sgpr2 = S_MOV_B32 $sgpr1
219     $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc
220     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
221     S_ENDPGM 0
224 # GCN-LABEL: name: and_execz_mov_vccz_reads_sreg_late
225 # GCN:      $sgpr0_sgpr1 = S_MOV_B64 -1
226 # GCN-NEXT: $sgpr2 = S_MOV_B32 $sgpr1
227 # GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec
228 name:            and_execz_mov_vccz_reads_sreg_late
229 body:             |
230   bb.0:
231     S_NOP 0
233   bb.1:
234     S_NOP 0
236   bb.2:
237     $sgpr0_sgpr1 = S_MOV_B64 -1
238     $vcc = S_AND_B64 $exec, $sgpr0_sgpr1, implicit-def dead $scc
239     $sgpr2 = S_MOV_B32 $sgpr1
240     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
241     S_ENDPGM 0
243 # GCN-LABEL: name: and_execz_mov_vccz_reads_writes_sreg_early
244 # GCN:      $sgpr0_sgpr1 = S_MOV_B64 -1
245 # GCN-NEXT: $sgpr1 = S_MOV_B32 $sgpr0
246 # GCN-NEXT: $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc
247 # GCN-NEXT: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
248 name:            and_execz_mov_vccz_reads_writes_sreg_early
249 body:             |
250   bb.0:
251     S_NOP 0
253   bb.1:
254     S_NOP 0
256   bb.2:
257     $sgpr0_sgpr1 = S_MOV_B64 -1
258     $sgpr1 = S_MOV_B32 $sgpr0
259     $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc
260     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
261     S_ENDPGM 0
264 # GCN-LABEL: name: and_execz_mov_vccz_reads_cond
265 # GCN:      $vcc = S_AND_B64 $exec, -1, implicit-def dead $scc
266 # GCN-NEXT: $sgpr2 = S_MOV_B32 $vcc_lo
267 # GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec
268 name:            and_execz_mov_vccz_reads_cond
269 body:             |
270   bb.0:
271     S_NOP 0
273   bb.1:
274     S_NOP 0
276   bb.2:
277     $sgpr0_sgpr1 = S_MOV_B64 -1
278     $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc
279     $sgpr2 = S_MOV_B32 $vcc_lo
280     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
281     S_ENDPGM 0
284 # GCN-LABEL: name: and_execz_mov_vccz_modifies_sreg
285 # GCN:      $sgpr0_sgpr1 = S_MOV_B64 -1
286 # GCN-NEXT: $sgpr0 = S_MOV_B32 0
287 # GCN-NEXT: $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc
288 # GCN-NEXT: S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
289 name:            and_execz_mov_vccz_modifies_sreg
290 body:             |
291   bb.0:
292     S_NOP 0
294   bb.1:
295     S_NOP 0
297   bb.2:
298     $sgpr0_sgpr1 = S_MOV_B64 -1
299     $sgpr0 = S_MOV_B32 0
300     $vcc = S_AND_B64 $exec, killed $sgpr0_sgpr1, implicit-def dead $scc
301     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
302     S_ENDPGM 0
305 # GCN-LABEL: name: and_execz_imm_vccz_liveout_scc
306 # GCN:      $vcc = S_AND_B64 $exec, -1, implicit-def $scc
307 # GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec
308 # GCN-NEXT  S_ENDPGM 0, implicit $scc
309 name:            and_execz_imm_vccz_liveout_scc
310 body:             |
311   bb.0:
312     S_NOP 0
314   bb.1:
315     S_NOP 0
317   bb.2:
318     $vcc = S_AND_B64 $exec, -1, implicit-def $scc
319     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
320     S_ENDPGM 0, implicit $scc
323 # W32-LABEL: name: and_execz_mov_vccz_w32
324 # W32-NOT: S_MOV_
325 # W32-NOT: S_AND_
326 # W32: S_CBRANCH_EXECZ %bb.1, implicit $exec
327 name:            and_execz_mov_vccz_w32
328 body:             |
329   bb.0:
330     S_NOP 0
332   bb.1:
333     S_NOP 0
335   bb.2:
336     $sgpr0 = S_MOV_B32 -1
337     $vcc_lo = S_AND_B32 $exec_lo, killed $sgpr0, implicit-def dead $scc
338     S_CBRANCH_VCCZ %bb.1, implicit killed $vcc
339     S_ENDPGM 0