[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AArch64 / post-ra-machine-sink.mir
blobca9e9f6c1c69fa36c76a8434168c26421c50720a
1 # RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass=postra-machine-sink -verify-machineinstrs  -o - %s | FileCheck %s
3 ---
4 # Sink w19 to %bb.1.
5 # CHECK-LABEL: name: sinkcopy1
6 # CHECK-LABEL: bb.0:
7 # CHECK-NOT: $w19 = COPY killed $w0
8 # CHECK-LABEL: bb.1:
9 # CHECK: liveins: $w1, $w0
10 # CHECK: renamable $w19 = COPY killed $w0
12 name: sinkcopy1
13 tracksRegLiveness: true
14 body: |
15   bb.0:
16     liveins: $w0, $w1
17     $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv
18     renamable  $w19 = COPY killed $w0
19     Bcc 11, %bb.1, implicit $nzcv
20     B %bb.2
22   bb.1:
23     liveins: $w1, $w19
24     $w0 = ADDWrr $w1, $w19
25     RET $x0
27   bb.2:
28     $w0 = COPY $wzr
29     RET   $x0
30 ...
32 ---
33 # Sink w19 to %bb.2.
34 # CHECK-LABEL: name: sinkcopy2
35 # CHECK-LABEL: bb.0:
36 # CHECK-NOT: renamable $w19 = COPY killed $w0
37 # CHECK-LABEL: bb.2:
38 # CHECK: liveins: $w1, $w0
39 # CHECK: renamable $w19 = COPY killed $w0
40 name: sinkcopy2
41 tracksRegLiveness: true
42 body: |
43   bb.0:
44     liveins: $w0, $w1
45     $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv
46     renamable $w19 = COPY killed $w0
47     Bcc 11, %bb.2, implicit $nzcv
48     B %bb.1
50   bb.1:
51     $w0 = COPY $wzr
52     RET $x0
54   bb.2:
55     liveins: $w1, $w19
56     $w0 = ADDWrr $w1, $w19
57     RET $x0
58 ...
60 ---
61 # Sink w19 and w20 to %bb.1.
62 # CHECK-LABEL: name: sinkcopy3
63 # CHECK-LABEL: bb.0:
64 # CHECK-NOT: renamable $w19 = COPY killed $w0
65 # CHECK-LABEL: bb.1:
66 # CHECK: liveins: $w1, $w0
67 # CHECK: renamable $w19 = COPY killed $w0
68 # CHECK: renamable $w20 = COPY killed $w1
69 name: sinkcopy3
70 tracksRegLiveness: true
71 body: |
72   bb.0:
73     liveins: $w0, $w1
74     $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv
75     renamable $w19 = COPY killed $w0
76     renamable $w20 = COPY killed $w1
78   bb.1:
79     liveins: $w19, $w20
80     $w0 = COPY $w19
81     $w1 = COPY $w20
82     RET $x0
83 ...
86 # Sink w19 to %bb.1 and w20 to %bb.2.
87 # CHECK-LABEL: name: sinkcopy4
88 # CHECK-LABEL: bb.0:
89 # CHECK-NOT: renamable $w19 = COPY killed $w0
90 # CHECK-NOT: renamable $w20 = COPY killed $w1
91 # CHECK-LABEL: bb.1:
92 # CHECK: liveins: $w1, $w0
93 # CHECK: renamable $w19 = COPY killed $w0
94 # CHECK-LABEL: bb.2:
95 # CHECK: liveins: $w0, $w1
96 # CHECK: renamable $w20 = COPY killed $w1
97 name: sinkcopy4
98 tracksRegLiveness: true
99 body: |
100   bb.0:
101     liveins: $w0, $w1
102     $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv
103     renamable $w19 = COPY killed $w0
104     renamable $w20 = COPY killed $w1
105     Bcc 11, %bb.2, implicit $nzcv
106     B %bb.1
108   bb.1:
109     liveins: $w1, $w19
110     $w0 = ADDWrr $w1, $w19
111     RET $x0
113   bb.2:
114     liveins: $w0, $w20
115     $w0 = ADDWrr $w0, $w20
116     RET $x0
119 # Sink w19 to %bb.3 through %bb.2.
120 # CHECK-LABEL: name: sinkcopy5
121 # CHECK-LABEL: bb.0:
122 # CHECK-NOT: renamable $w19 = COPY $w0
123 # CHECK-LABEL: bb.2:
124 # CHECK: $w1 = ADDWrr $w1, $w0
125 # CHECK-LABEL: bb.3:
126 # CHECK: liveins: $w1, $w0
127 # CHECK: renamable $w19 = COPY killed $w0
128 name: sinkcopy5
129 tracksRegLiveness: true
130 body: |
131   bb.0:
132     liveins: $w0, $w1
133     $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv
134     renamable $w19 = COPY $w0
135     Bcc 11, %bb.2, implicit $nzcv
137   bb.1:
138     liveins: $x0
139     $w19 = COPY $wzr
140     RET $x0
142   bb.2:
143     liveins: $w0, $w1, $w19
144     $w1 = ADDWrr $w1, killed $w0
146   bb.3:
147     liveins: $w1, $w19
148     $w0 = ADDWrr $w1, $w19
149     RET $x0
152 # Sink w19 to %bb.3, but  through %bb.2.
153 # CHECK-LABEL: name: sinkcopy6
154 # CHECK-LABEL: bb.0:
155 # CHECK-NOT: renamable $w19 = COPY $w0
156 # CHECK-NOT: renamable $w20 = COPY $w0
157 # CHECK-LABEL: bb.2:
158 # CHECK: liveins: $w1, $w0
159 # CHECK: renamable $w19 = COPY $w0
160 # CHECK: renamable $w20 = COPY $w19
161 name: sinkcopy6
162 tracksRegLiveness: true
163 body: |
164   bb.0:
165     liveins: $w0, $w1
166     $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv
167     renamable $w19 = COPY $w0
168     renamable $w20 = COPY $w19
169     Bcc 11, %bb.2, implicit $nzcv
171   bb.1:
172     $w0 = COPY $wzr
173     RET $x0
175   bb.2:
176     liveins: $w1, $w20
177     $w0 = ADDWrr killed $w1, $w20
178     RET $x0
182 # Sink w19 regardless of the def of wzr in bb.0.
183 # CHECK-LABEL: name: sinkcopy7
184 # CHECK-LABEL: bb.0:
185 # CHECK-NOT: renamable $w19 = COPY $w0
186 # CHECK-LABEL: bb.2:
187 # CHECK: renamable $w19 = COPY $wzr
188 name: sinkcopy7
189 tracksRegLiveness: true
190 body: |
191   bb.0:
192     liveins: $w0, $w1
193     renamable $w19 = COPY $wzr
194     $wzr = SUBSWri $w1, 1, 0, implicit-def $nzcv
195     Bcc 11, %bb.2, implicit $nzcv
196     B %bb.1
198   bb.1:
199     $x0 = COPY $xzr
200     RET $x0
202   bb.2:
203     liveins: $w0, $w19
204     $w0 = ADDWrr $w0, $w19
205     RET $x0
209 # Sink w19 to %bb.3 through %bb.2.
210 # CHECK-LABEL: name: sinkcopy8
211 # CHECK-LABEL: bb.0:
212 # CHECK-NOT: renamable $w19 = COPY $w0, implicit-def $x19
213 # CHECK-LABEL: bb.2:
214 # CHECK: $w1 = ADDWrr $w1, $w0, implicit $x0
215 # CHECK-LABEL: bb.3:
216 # CHECK: liveins: $x1, $w0
217 # CHECK: renamable $w19 = COPY killed $w0, implicit-def $x19
218 name: sinkcopy8
219 tracksRegLiveness: true
220 body: |
221   bb.0:
222     liveins: $w0, $x1
223     $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv
224     renamable $w19 = COPY $w0, implicit-def $x19
225     Bcc 11, %bb.2, implicit $nzcv
227   bb.1:
228     liveins: $x0
229     $w19 = COPY $wzr
230     RET $x0
232   bb.2:
233     liveins: $w0, $x1, $x19
234     $w1 = ADDWrr $w1, $w0, implicit killed $x0
236   bb.3:
237     liveins: $x1, $x19
238     $x0 = ADDXrr $x1, $x19
239     RET $x0
243 # Don't sink w19 as w0 is defined in bb.0.
244 # CHECK-LABEL: name: donotsinkcopy1
245 # CHECK-LABEL: bb.0:
246 # CHECK: renamable $w19 = COPY $w0
247 # CHECK: $w0 = LDRWui $sp, 0
248 name: donotsinkcopy1
249 tracksRegLiveness: true
250 body: |
251   bb.0:
252     liveins: $w0, $w1
253     $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv
254     renamable $w19 = COPY $w0
255     $w0 = LDRWui $sp, 0 :: (load 4)
256     Bcc 11, %bb.2, implicit $nzcv
257     B %bb.1
259   bb.1:
260     $x0 = COPY $xzr
261     RET $x0
263   bb.2:
264     liveins: $w0, $w19
265     $w0 = ADDWrr $w0, $w19
266     RET $x0
270 # Don't sink w19 as w19 is used in bb.0.
271 # CHECK-LABEL: name: donotsinkcopy2
272 # CHECK-LABEL: bb.0:
273 # CHECK: renamable $w19 = COPY $w0
274 # CHECK: STRWui $w1, $x19, 0
275 name: donotsinkcopy2
276 tracksRegLiveness: true
277 body: |
278   bb.0:
279     liveins: $w0, $w1
280     $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv
281     renamable $w19 = COPY $w0
282     STRWui $w1, $x19, 0 :: (store 4)
283     Bcc 11, %bb.2, implicit $nzcv
284     B %bb.1
286   bb.1:
287     $x0 = COPY $xzr
288     RET $x0
290   bb.2:
291     liveins: $w0, $w19
292     $w0 = ADDWrr $w0, $w19
293     RET $x0
297 # Don't sink w19 as w19 is used in both %bb.1 and %bb.2.
298 # CHECK-LABEL: name: donotsinkcopy3
299 # CHECK-LABEL: bb.0:
300 # CHECK: renamable $w19 = COPY $w0
301 name: donotsinkcopy3
302 tracksRegLiveness: true
303 body: |
304   bb.0:
305     liveins: $w0, $w1
306     $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv
307     renamable $w19 = COPY $w0
308     Bcc 11, %bb.2, implicit $nzcv
309     B %bb.1
311   bb.1:
312     liveins: $w19
313     $w0 = COPY $w19
314     RET $x0
316   bb.2:
317     liveins: $w0, $w19
318     $w0 = ADDWrr $w0, $w19
319     RET $x0
323 # Don't sink w19 as %bb.2 has multiple predecessors.
324 # CHECK-LABEL: name: donotsinkcopy4
325 # CHECK-LABEL: bb.0:
326 # CHECK: renamable $w19 = COPY $w0
327 name: donotsinkcopy4
328 tracksRegLiveness: true
329 body: |
330   bb.0:
331     liveins: $w0, $w1
332     $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv
333     renamable $w19 = COPY $w0
334     Bcc 11, %bb.2, implicit $nzcv
335     B %bb.1
337   bb.1:
338     liveins: $w0
339     $w19 = COPY $w0
340     B %bb.2
342   bb.2:
343     liveins: $w0, $w19
344     $w0 = ADDWrr $w0, $w19
345     RET $x0
349 # Don't sink w19 after sinking w20.
350 # CHECK-LABEL: name: donotsinkcopy5
351 # CHECK-LABEL: bb.0:
352 # CHECK: renamable $w19 = COPY $w0
353 # CHECK-LABEL: bb.2:
354 # CHECK: liveins: $w0, $w19
355 # CHECK: renamable $w20 = COPY $w19
356 name: donotsinkcopy5
357 tracksRegLiveness: true
358 body: |
359   bb.0:
360     liveins: $w0, $w1
361     $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv
362     renamable $w19 = COPY $w0
363     renamable $w20 = COPY $w19
364     Bcc 11, %bb.2, implicit $nzcv
366   bb.1:
367     liveins: $w19
368     $w0 = COPY $w19
369     RET $x0
371   bb.2:
372     liveins: $w0, $w20
373     $w0 = ADDWrr killed $w0, $w20
374     RET $x0
378 # Don't sink w19 as x19 is live-in in %bb.2.
379 # CHECK-LABEL: name: donotsinkcopy6
380 # CHECK-LABEL: bb.0:
381 name: donotsinkcopy6
382 tracksRegLiveness: true
383 body: |
384   bb.0:
385     liveins: $x0, $w1
386     $w1 = SUBSWri $w1, 1, 0, implicit-def $nzcv
387     renamable $x19 = COPY $x0
388     Bcc 11, %bb.2, implicit $nzcv
389     B %bb.1
391   bb.1:
392     liveins: $w19
393     $w0 = COPY $w19
394     RET $x0
396   bb.2:
397     liveins: $x0, $x19
398     $x0 = ADDXrr $x0, $x19
399     RET $x0