[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / csinc-cmp-removal.mir
blob2098218d23f33c9c15e9d93ad93f5e3663aab424
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 ---
4 name:            remove_subswr_after_csincwr
5 tracksRegLiveness: true
6 body:             |
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
33   bb.1:
34     successors: %bb.2(0x80000000)
35     B %bb.2
37   bb.2:
38     RET_ReallyLR
40 ...
41 ---
42 name:            remove_subsxr_after_csincxr_invertcc
43 tracksRegLiveness: true
44 body:             |
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
71   bb.1:
72     successors: %bb.2(0x80000000)
73     B %bb.2
75   bb.2:
76     RET_ReallyLR
78 ...
79 ---
80 name:            cflags_alive_in_succs
81 tracksRegLiveness: true
82 body:             |
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
105   bb.1:
106     liveins: $nzcv
107     successors: %bb.2(0x80000000)
108     B %bb.2
110   bb.2:
111     RET_ReallyLR
115 name:            nz_used_after_cmp
116 tracksRegLiveness: true
117 body:             |
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
139   bb.1:
140     successors: %bb.2(0x80000000)
141     B %bb.2
143   bb.2:
144     RET_ReallyLR
148 name:            remove_addswr_after_csincwr_invertcc
149 tracksRegLiveness: true
150 body:             |
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
171   bb.1:
172     successors: %bb.2(0x80000000)
173     B %bb.2
175   bb.2:
176     RET_ReallyLR
180 name:            cv_used_after_cmp
181 tracksRegLiveness: true
182 body:             |
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
204   bb.1:
205     successors: %bb.2(0x80000000)
206     B %bb.2
208   bb.2:
209     RET_ReallyLR
213 name:            csinc_add0
214 tracksRegLiveness: true
215 body:             |
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
237   bb.1:
238     successors: %bb.2(0x80000000)
239     B %bb.2
241   bb.2:
242     RET_ReallyLR
246 name:            remove_subs1_after_csincN_invertcc
247 tracksRegLiveness: true
248 body:             |
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
269   bb.1:
270     successors: %bb.2(0x80000000)
271     B %bb.2
273   bb.2:
274     RET_ReallyLR
278 name:            csinc_wrong_cc
279 tracksRegLiveness: true
280 body:             |
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
302   bb.1:
303     successors: %bb.2(0x80000000)
304     B %bb.2
306   bb.2:
307     RET_ReallyLR
311 name:            subswr_wrong_cmp_value
312 tracksRegLiveness: true
313 body:             |
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
341   bb.1:
342     successors: %bb.2(0x80000000)
343     B %bb.2
345   bb.2:
346     RET_ReallyLR