1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=aarch64 -run-pass=peephole-opt -verify-machineinstrs %s -o - | FileCheck %s
3---
4name:            remove_subswr_after_csincwr
5tracksRegLiveness: true
6body:             |
7  ; CHECK-LABEL: name: remove_subswr_after_csincwr
8  ; CHECK: bb.0:
9  ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
10  ; CHECK:   liveins: $x1
11  ; CHECK:   [[COPY:%[0-9]+]]:gpr64common = COPY $x1
12  ; CHECK:   [[DEF:%[0-9]+]]:gpr64 = IMPLICIT_DEF
13  ; CHECK:   [[SUBSXrr:%[0-9]+]]:gpr64 = SUBSXrr killed [[DEF]], [[COPY]], implicit-def $nzcv
14  ; CHECK:   [[CSINCWr:%[0-9]+]]:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv
15  ; CHECK:   Bcc 1, %bb.2, implicit $nzcv
16  ; CHECK:   B %bb.1
17  ; CHECK: bb.1:
18  ; CHECK:   successors: %bb.2(0x80000000)
19  ; CHECK:   B %bb.2
20  ; CHECK: bb.2:
21  ; CHECK:   RET_ReallyLR
22  bb.0:
23    liveins: $x1
24    successors: %bb.1(0x40000000), %bb.2(0x40000000)
25    %1:gpr64common = COPY $x1
26    %2:gpr64 = IMPLICIT_DEF
27    %3:gpr64 = SUBSXrr killed %2:gpr64, %1:gpr64common, implicit-def $nzcv
28    %4:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv
29    %5:gpr32 = SUBSWri killed %4:gpr32common, 1, 0, implicit-def $nzcv
30    Bcc 1, %bb.2, implicit $nzcv
31    B %bb.1
32
33  bb.1:
34    successors: %bb.2(0x80000000)
35    B %bb.2
36
37  bb.2:
38    RET_ReallyLR
39
40...
41---
42name:            remove_subsxr_after_csincxr_invertcc
43tracksRegLiveness: true
44body:             |
45  ; CHECK-LABEL: name: remove_subsxr_after_csincxr_invertcc
46  ; CHECK: bb.0:
47  ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
48  ; CHECK:   liveins: $x1
49  ; CHECK:   [[COPY:%[0-9]+]]:gpr64common = COPY $x1
50  ; CHECK:   [[DEF:%[0-9]+]]:gpr64 = IMPLICIT_DEF
51  ; CHECK:   [[SUBSXrr:%[0-9]+]]:gpr64 = SUBSXrr killed [[DEF]], [[COPY]], implicit-def $nzcv
52  ; CHECK:   [[CSINCXr:%[0-9]+]]:gpr64common = CSINCXr $xzr, $xzr, 1, implicit $nzcv
53  ; CHECK:   Bcc 1, %bb.2, implicit $nzcv
54  ; CHECK:   B %bb.1
55  ; CHECK: bb.1:
56  ; CHECK:   successors: %bb.2(0x80000000)
57  ; CHECK:   B %bb.2
58  ; CHECK: bb.2:
59  ; CHECK:   RET_ReallyLR
60  bb.0:
61    liveins: $x1
62    successors: %bb.1(0x40000000), %bb.2(0x40000000)
63    %1:gpr64common = COPY $x1
64    %2:gpr64 = IMPLICIT_DEF
65    %3:gpr64 = SUBSXrr killed %2:gpr64, %1:gpr64common, implicit-def $nzcv
66    %4:gpr64common = CSINCXr $xzr, $xzr, 1, implicit $nzcv
67    %5:gpr64 = SUBSXri killed %4:gpr64common, 0, 0, implicit-def $nzcv
68    Bcc 0, %bb.2, implicit $nzcv
69    B %bb.1
70
71  bb.1:
72    successors: %bb.2(0x80000000)
73    B %bb.2
74
75  bb.2:
76    RET_ReallyLR
77
78...
79---
80name:            cflags_alive_in_succs
81tracksRegLiveness: true
82body:             |
83  ; CHECK-LABEL: name: cflags_alive_in_succs
84  ; CHECK: bb.0:
85  ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
86  ; CHECK:   liveins: $nzcv
87  ; CHECK:   [[CSINCXr:%[0-9]+]]:gpr64common = CSINCXr $xzr, $xzr, 1, implicit $nzcv
88  ; CHECK:   [[ADDSXri:%[0-9]+]]:gpr64 = ADDSXri killed [[CSINCXr]], 0, 0, implicit-def $nzcv
89  ; CHECK:   Bcc 0, %bb.2, implicit $nzcv
90  ; CHECK:   B %bb.1
91  ; CHECK: bb.1:
92  ; CHECK:   successors: %bb.2(0x80000000)
93  ; CHECK:   liveins: $nzcv
94  ; CHECK:   B %bb.2
95  ; CHECK: bb.2:
96  ; CHECK:   RET_ReallyLR
97  bb.0:
98    liveins: $nzcv
99    successors: %bb.1(0x40000000), %bb.2(0x40000000)
100    %1:gpr64common = CSINCXr $xzr, $xzr, 1, implicit $nzcv
101    %2:gpr64 = ADDSXri killed %1:gpr64common, 0, 0, implicit-def $nzcv
102    Bcc 0, %bb.2, implicit $nzcv
103    B %bb.1
104
105  bb.1:
106    liveins: $nzcv
107    successors: %bb.2(0x80000000)
108    B %bb.2
109
110  bb.2:
111    RET_ReallyLR
112
113...
114---
115name:            nz_used_after_cmp
116tracksRegLiveness: true
117body:             |
118  ; CHECK-LABEL: name: nz_used_after_cmp
119  ; CHECK: bb.0:
120  ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
121  ; CHECK:   liveins: $nzcv
122  ; CHECK:   [[CSINCXr:%[0-9]+]]:gpr64common = CSINCXr $xzr, $xzr, 1, implicit $nzcv
123  ; CHECK:   [[ADDSXri:%[0-9]+]]:gpr64 = ADDSXri killed [[CSINCXr]], 0, 0, implicit-def $nzcv
124  ; CHECK:   Bcc 4, %bb.2, implicit $nzcv
125  ; CHECK:   B %bb.1
126  ; CHECK: bb.1:
127  ; CHECK:   successors: %bb.2(0x80000000)
128  ; CHECK:   B %bb.2
129  ; CHECK: bb.2:
130  ; CHECK:   RET_ReallyLR
131  bb.0:
132    liveins: $nzcv
133    successors: %bb.1(0x40000000), %bb.2(0x40000000)
134    %1:gpr64common = CSINCXr $xzr, $xzr, 1, implicit $nzcv
135    %2:gpr64 = ADDSXri killed %1:gpr64common, 0, 0, implicit-def $nzcv
136    Bcc 4, %bb.2, implicit $nzcv
137    B %bb.1
138
139  bb.1:
140    successors: %bb.2(0x80000000)
141    B %bb.2
142
143  bb.2:
144    RET_ReallyLR
145
146...
147---
148name:            remove_addswr_after_csincwr_invertcc
149tracksRegLiveness: true
150body:             |
151  ; CHECK-LABEL: name: remove_addswr_after_csincwr_invertcc
152  ; CHECK: bb.0:
153  ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
154  ; CHECK:   liveins: $nzcv
155  ; CHECK:   [[CSINCWr:%[0-9]+]]:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv
156  ; CHECK:   Bcc 0, %bb.2, implicit $nzcv
157  ; CHECK:   B %bb.1
158  ; CHECK: bb.1:
159  ; CHECK:   successors: %bb.2(0x80000000)
160  ; CHECK:   B %bb.2
161  ; CHECK: bb.2:
162  ; CHECK:   RET_ReallyLR
163  bb.0:
164    liveins: $nzcv
165    successors: %bb.1(0x40000000), %bb.2(0x40000000)
166    %1:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv
167    %2:gpr32 = ADDSWri killed %1:gpr32common, 0, 0, implicit-def $nzcv
168    Bcc 1, %bb.2, implicit $nzcv
169    B %bb.1
170
171  bb.1:
172    successors: %bb.2(0x80000000)
173    B %bb.2
174
175  bb.2:
176    RET_ReallyLR
177
178...
179---
180name:            cv_used_after_cmp
181tracksRegLiveness: true
182body:             |
183  ; CHECK-LABEL: name: cv_used_after_cmp
184  ; CHECK: bb.0:
185  ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
186  ; CHECK:   liveins: $nzcv
187  ; CHECK:   [[CSINCWr:%[0-9]+]]:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv
188  ; CHECK:   [[SUBSWri:%[0-9]+]]:gpr32 = SUBSWri killed [[CSINCWr]], 0, 0, implicit-def $nzcv
189  ; CHECK:   Bcc 2, %bb.2, implicit $nzcv
190  ; CHECK:   B %bb.1
191  ; CHECK: bb.1:
192  ; CHECK:   successors: %bb.2(0x80000000)
193  ; CHECK:   B %bb.2
194  ; CHECK: bb.2:
195  ; CHECK:   RET_ReallyLR
196  bb.0:
197    liveins: $nzcv
198    successors: %bb.1(0x40000000), %bb.2(0x40000000)
199    %1:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv
200    %2:gpr32 = SUBSWri killed %1:gpr32common, 0, 0, implicit-def $nzcv
201    Bcc 2, %bb.2, implicit $nzcv
202    B %bb.1
203
204  bb.1:
205    successors: %bb.2(0x80000000)
206    B %bb.2
207
208  bb.2:
209    RET_ReallyLR
210
211...
212---
213name:            csinc_add0
214tracksRegLiveness: true
215body:             |
216  ; CHECK-LABEL: name: csinc_add0
217  ; CHECK: bb.0:
218  ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
219  ; CHECK:   liveins: $nzcv
220  ; CHECK:   [[CSINCWr:%[0-9]+]]:gpr32common = CSINCWr $wzr, $wzr, 4, implicit $nzcv
221  ; CHECK:   [[ADDSWri:%[0-9]+]]:gpr32 = ADDSWri killed [[CSINCWr]], 0, 0, implicit-def $nzcv
222  ; CHECK:   Bcc 1, %bb.2, implicit $nzcv
223  ; CHECK:   B %bb.1
224  ; CHECK: bb.1:
225  ; CHECK:   successors: %bb.2(0x80000000)
226  ; CHECK:   B %bb.2
227  ; CHECK: bb.2:
228  ; CHECK:   RET_ReallyLR
229  bb.0:
230    liveins: $nzcv
231    successors: %bb.1(0x40000000), %bb.2(0x40000000)
232    %1:gpr32common = CSINCWr $wzr, $wzr, 4, implicit $nzcv
233    %2:gpr32 = ADDSWri killed %1:gpr32common, 0, 0, implicit-def $nzcv
234    Bcc 1, %bb.2, implicit $nzcv
235    B %bb.1
236
237  bb.1:
238    successors: %bb.2(0x80000000)
239    B %bb.2
240
241  bb.2:
242    RET_ReallyLR
243
244...
245---
246name:            remove_subs1_after_csincN_invertcc
247tracksRegLiveness: true
248body:             |
249  ; CHECK-LABEL: name: remove_subs1_after_csincN_invertcc
250  ; CHECK: bb.0:
251  ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
252  ; CHECK:   liveins: $nzcv
253  ; CHECK:   [[CSINCWr:%[0-9]+]]:gpr32common = CSINCWr $wzr, $wzr, 5, implicit $nzcv
254  ; CHECK:   Bcc 5, %bb.2, implicit $nzcv
255  ; CHECK:   B %bb.1
256  ; CHECK: bb.1:
257  ; CHECK:   successors: %bb.2(0x80000000)
258  ; CHECK:   B %bb.2
259  ; CHECK: bb.2:
260  ; CHECK:   RET_ReallyLR
261  bb.0:
262    liveins: $nzcv
263    successors: %bb.1(0x40000000), %bb.2(0x40000000)
264    %1:gpr32common = CSINCWr $wzr, $wzr, 5, implicit $nzcv
265    %2:gpr32 = SUBSWri killed %1:gpr32common, 1, 0, implicit-def $nzcv
266    Bcc 4, %bb.2, implicit $nzcv
267    B %bb.1
268
269  bb.1:
270    successors: %bb.2(0x80000000)
271    B %bb.2
272
273  bb.2:
274    RET_ReallyLR
275
276...
277---
278name:            csinc_wrong_cc
279tracksRegLiveness: true
280body:             |
281  ; CHECK-LABEL: name: csinc_wrong_cc
282  ; CHECK: bb.0:
283  ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
284  ; CHECK:   liveins: $nzcv
285  ; CHECK:   [[CSINCXr:%[0-9]+]]:gpr64common = CSINCXr $xzr, $xzr, 2, implicit $nzcv
286  ; CHECK:   [[SUBSXri:%[0-9]+]]:gpr64 = SUBSXri killed [[CSINCXr]], 1, 0, implicit-def $nzcv
287  ; CHECK:   Bcc 0, %bb.2, implicit $nzcv
288  ; CHECK:   B %bb.1
289  ; CHECK: bb.1:
290  ; CHECK:   successors: %bb.2(0x80000000)
291  ; CHECK:   B %bb.2
292  ; CHECK: bb.2:
293  ; CHECK:   RET_ReallyLR
294  bb.0:
295    liveins: $nzcv
296    successors: %bb.1(0x40000000), %bb.2(0x40000000)
297    %1:gpr64common = CSINCXr $xzr, $xzr, 2, implicit $nzcv
298    %2:gpr64 = SUBSXri killed %1:gpr64common, 1, 0, implicit-def $nzcv
299    Bcc 0, %bb.2, implicit $nzcv
300    B %bb.1
301
302  bb.1:
303    successors: %bb.2(0x80000000)
304    B %bb.2
305
306  bb.2:
307    RET_ReallyLR
308
309...
310---
311name:            subswr_wrong_cmp_value
312tracksRegLiveness: true
313body:             |
314  ; CHECK-LABEL: name: subswr_wrong_cmp_value
315  ; CHECK: bb.0:
316  ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
317  ; CHECK:   liveins: $x1
318  ; CHECK:   [[COPY:%[0-9]+]]:gpr64common = COPY $x1
319  ; CHECK:   [[DEF:%[0-9]+]]:gpr64 = IMPLICIT_DEF
320  ; CHECK:   [[SUBSXrr:%[0-9]+]]:gpr64 = SUBSXrr killed [[DEF]], [[COPY]], implicit-def $nzcv
321  ; CHECK:   [[CSINCWr:%[0-9]+]]:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv
322  ; CHECK:   [[SUBSWri:%[0-9]+]]:gpr32 = SUBSWri killed [[CSINCWr]], 3, 0, implicit-def $nzcv
323  ; CHECK:   Bcc 1, %bb.2, implicit $nzcv
324  ; CHECK:   B %bb.1
325  ; CHECK: bb.1:
326  ; CHECK:   successors: %bb.2(0x80000000)
327  ; CHECK:   B %bb.2
328  ; CHECK: bb.2:
329  ; CHECK:   RET_ReallyLR
330  bb.0:
331    liveins: $x1
332    successors: %bb.1(0x40000000), %bb.2(0x40000000)
333    %1:gpr64common = COPY $x1
334    %2:gpr64 = IMPLICIT_DEF
335    %3:gpr64 = SUBSXrr killed %2:gpr64, %1:gpr64common, implicit-def $nzcv
336    %4:gpr32common = CSINCWr $wzr, $wzr, 1, implicit $nzcv
337    %5:gpr32 = SUBSWri killed %4:gpr32common, 3, 0, implicit-def $nzcv
338    Bcc 1, %bb.2, implicit $nzcv
339    B %bb.1
340
341  bb.1:
342    successors: %bb.2(0x80000000)
343    B %bb.2
344
345  bb.2:
346    RET_ReallyLR
347
348...
349