xref: /llvm-project/llvm/test/CodeGen/AArch64/shrinkwrap-split-restore-point.mir (revision c4a60c9d34375e73fc2da5e02215eabe4bc90e8f)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
2# RUN: llc -mtriple=aarch64 -run-pass=shrink-wrap -o - %s | FileCheck %s
3
4--- |
5  define void @shrink_test1(i32 %a) {
6  entry:
7    %cmp5 = icmp sgt i32 %a, 0
8    br i1 %cmp5, label %BB0, label %exit
9
10  BB0:                                              ; preds = %entry
11    %call = call i32 @fun()
12    %c = icmp eq i32 %call, 0
13    br i1 %c, label %BB1, label %exit
14
15  BB1:                                              ; preds = %BB0
16    %call2 = call i32 @fun()
17    br label %exit
18
19  exit:                                             ; preds = %BB1, %BB0, %entry
20    ret void
21  }
22
23  define void @shrink_test2(i32 %a, ptr %P1, ptr %P2) {
24  BB00:
25    %cmp5 = icmp sgt i32 %a, 0
26    br i1 %cmp5, label %BB01, label %exit
27
28  BB01:                                             ; preds = %BB00
29    store i32 %a, ptr %P1, align 4
30    %c1 = icmp sgt i32 %a, 1
31    br i1 %c1, label %BB02, label %BB03
32
33  BB02:                                             ; preds = %BB01
34    store i32 %a, ptr %P2, align 4
35    br label %BB03
36
37  BB03:                                             ; preds = %BB02, %BB01
38    %call03 = call i32 @fun()
39    %c03 = icmp eq i32 %call03, 0
40    br i1 %c03, label %BB04, label %BB05
41
42  BB04:                                             ; preds = %BB03
43    %call04 = call i32 @fun()
44    br label %BB05
45
46  BB05:                                             ; preds = %BB04, %BB03
47    %call05 = call i32 @fun()
48    %c05 = icmp eq i32 %call05, 0
49    br i1 %c05, label %BB06, label %BB07
50
51  BB06:                                             ; preds = %BB05
52    %call06 = call i32 @fun()
53    br label %exit
54
55  BB07:                                             ; preds = %BB05
56    %call07 = call i32 @fun2()
57    br label %exit
58
59  exit:                                             ; preds = %BB07, %BB06, %BB00
60    ret void
61  }
62
63  define void @noshrink_test1(i32 %a, i32 %v, i32 %v2) {
64  entry:
65    %cmp5 = icmp sgt i32 %a, 0
66    br i1 %cmp5, label %BB0, label %exit
67
68  BB0:                                              ; preds = %entry
69    %c = icmp eq i32 %a, 10
70    %c1 = icmp eq i32 %v, 10
71    %or.cond = select i1 %c, i1 %c1, i1 false
72    br i1 %or.cond, label %BB3, label %BB2
73
74  BB2:                                              ; preds = %BB0
75    %c2 = icmp eq i32 %v2, 10
76    br i1 %c2, label %BB4, label %exit
77
78  BB3:                                              ; preds = %BB0
79    %call3 = call i32 @fun()
80    br label %exit
81
82  BB4:                                              ; preds = %BB2
83    %call4 = call i32 @fun2()
84    br label %exit
85
86  exit:                                             ; preds = %BB4, %BB3, %BB2, %entry
87    ret void
88  }
89
90  define void @noshrink_test2(i32 %a) {
91  BB00:
92    %cmp5 = icmp sgt i32 %a, 0
93    br i1 %cmp5, label %BB01, label %InfLoop.preheader
94
95  InfLoop.preheader:                                ; preds = %BB00
96    br label %InfLoop
97
98  BB01:                                             ; preds = %BB00
99    %call = call i32 @fun()
100    %c = icmp eq i32 %call, 0
101    br i1 %c, label %BB02, label %exit
102
103  BB02:                                             ; preds = %BB01
104    %call2 = call i32 @fun()
105    br label %exit
106
107  InfLoop:                                          ; preds = %InfLoop.preheader, %InfLoop
108    %call3 = call i32 @fun()
109    br label %InfLoop
110
111  exit:                                             ; preds = %BB02, %BB01
112    ret void
113  }
114
115  define void @noshrink_test3(i32 %a) {
116  BB00:
117    %cmp5 = icmp sgt i32 %a, 0
118    %call02 = call i32 @fun()
119    br i1 %cmp5, label %BB02, label %BB01
120
121  BB01:                                             ; preds = %BB00
122    %0 = icmp eq i32 %call02, 0
123    br i1 %0, label %BB01.1, label %exit
124
125  BB01.1:                                           ; preds = %BB01
126    call void @abort() #0
127    unreachable
128
129  BB02:                                             ; preds = %BB00
130    %1 = icmp eq i32 %call02, 0
131    br i1 %1, label %BB03, label %BB04
132
133  BB03:                                             ; preds = %BB02
134    %call03 = call i32 @fun()
135    %c03 = icmp eq i32 %call03, 0
136    br i1 %c03, label %BB04, label %exit
137
138  BB04:                                             ; preds = %BB03, %BB02
139    %call04 = call i32 @fun()
140    br label %exit
141
142  exit:                                             ; preds = %BB04, %BB03, %BB01
143    ret void
144  }
145
146  define void @noshrink_bb_as_inlineasmbr_target(i1 %cond) {
147  entry:
148    br i1 %cond, label %0, label %exit
149
150  0:                                                ; preds = %entry
151    callbr void asm sideeffect "", "!i,~{flags}"()
152      to label %1 [label %exit]
153
154  1:                                                ; preds = %0
155    call void @dosomething()
156    br label %exit
157
158  exit:                                             ; preds = %1, %0, %entry
159    ret void
160  }
161
162  declare i32 @fun()
163  declare i32 @fun2()
164  declare void @abort()
165  declare void @dosomething()
166...
167---
168name:            shrink_test1
169alignment:       4
170tracksRegLiveness: true
171tracksDebugUserValues: true
172liveins:
173  - { reg: '$w0' }
174frameInfo:
175  maxAlignment:    1
176  adjustsStack:    true
177  hasCalls:        true
178  maxCallFrameSize: 0
179machineFunctionInfo: {}
180body:             |
181  ; CHECK-LABEL: name: shrink_test1
182  ; CHECK: bb.0.entry:
183  ; CHECK-NEXT:   successors: %bb.1(0x50000000), %bb.3(0x30000000)
184  ; CHECK-NEXT:   liveins: $w0
185  ; CHECK-NEXT: {{  $}}
186  ; CHECK-NEXT:   dead $wzr = SUBSWri killed renamable $w0, 1, 0, implicit-def $nzcv
187  ; CHECK-NEXT:   Bcc 11, %bb.3, implicit killed $nzcv
188  ; CHECK-NEXT:   B %bb.1
189  ; CHECK-NEXT: {{  $}}
190  ; CHECK-NEXT: bb.1.BB0:
191  ; CHECK-NEXT:   successors: %bb.2(0x30000000), %bb.4(0x50000000)
192  ; CHECK-NEXT: {{  $}}
193  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
194  ; CHECK-NEXT:   BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
195  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
196  ; CHECK-NEXT:   CBNZW killed renamable $w0, %bb.4
197  ; CHECK-NEXT:   B %bb.2
198  ; CHECK-NEXT: {{  $}}
199  ; CHECK-NEXT: bb.2.BB1:
200  ; CHECK-NEXT:   successors: %bb.4(0x80000000)
201  ; CHECK-NEXT: {{  $}}
202  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
203  ; CHECK-NEXT:   BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
204  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
205  ; CHECK-NEXT:   B %bb.4
206  ; CHECK-NEXT: {{  $}}
207  ; CHECK-NEXT: bb.3.exit:
208  ; CHECK-NEXT:   RET_ReallyLR
209  ; CHECK-NEXT: {{  $}}
210  ; CHECK-NEXT: bb.4:
211  ; CHECK-NEXT:   successors: %bb.3(0x80000000)
212  ; CHECK-NEXT: {{  $}}
213  ; CHECK-NEXT:   B %bb.3
214  bb.0.entry:
215    successors: %bb.1(0x50000000), %bb.3(0x30000000)
216    liveins: $w0
217
218    dead $wzr = SUBSWri killed renamable $w0, 1, 0, implicit-def $nzcv
219    Bcc 11, %bb.3, implicit killed $nzcv
220    B %bb.1
221
222  bb.1.BB0:
223    successors: %bb.2(0x30000000), %bb.3(0x50000000)
224
225    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
226    BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
227    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
228    CBNZW killed renamable $w0, %bb.3
229    B %bb.2
230
231  bb.2.BB1:
232    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
233    BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
234    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
235
236  bb.3.exit:
237    RET_ReallyLR
238
239...
240---
241name:            shrink_test2
242alignment:       4
243tracksRegLiveness: true
244tracksDebugUserValues: true
245liveins:
246  - { reg: '$w0' }
247  - { reg: '$x1' }
248  - { reg: '$x2' }
249frameInfo:
250  maxAlignment:    1
251  adjustsStack:    true
252  hasCalls:        true
253  maxCallFrameSize: 0
254machineFunctionInfo: {}
255body:             |
256  ; CHECK-LABEL: name: shrink_test2
257  ; CHECK: bb.0.BB00:
258  ; CHECK-NEXT:   successors: %bb.1(0x50000000), %bb.8(0x30000000)
259  ; CHECK-NEXT:   liveins: $w0, $x1, $x2
260  ; CHECK-NEXT: {{  $}}
261  ; CHECK-NEXT:   dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv
262  ; CHECK-NEXT:   Bcc 11, %bb.8, implicit killed $nzcv
263  ; CHECK-NEXT:   B %bb.1
264  ; CHECK-NEXT: {{  $}}
265  ; CHECK-NEXT: bb.1.BB01:
266  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.3(0x40000000)
267  ; CHECK-NEXT:   liveins: $w0, $x1, $x2
268  ; CHECK-NEXT: {{  $}}
269  ; CHECK-NEXT:   dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv
270  ; CHECK-NEXT:   STRWui renamable $w0, killed renamable $x1, 0 :: (store (s32) into %ir.P1)
271  ; CHECK-NEXT:   Bcc 11, %bb.3, implicit killed $nzcv
272  ; CHECK-NEXT:   B %bb.2
273  ; CHECK-NEXT: {{  $}}
274  ; CHECK-NEXT: bb.2.BB02:
275  ; CHECK-NEXT:   successors: %bb.3(0x80000000)
276  ; CHECK-NEXT:   liveins: $w0, $x2
277  ; CHECK-NEXT: {{  $}}
278  ; CHECK-NEXT:   STRWui killed renamable $w0, killed renamable $x2, 0 :: (store (s32) into %ir.P2)
279  ; CHECK-NEXT: {{  $}}
280  ; CHECK-NEXT: bb.3.BB03:
281  ; CHECK-NEXT:   successors: %bb.4(0x30000000), %bb.5(0x50000000)
282  ; CHECK-NEXT: {{  $}}
283  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
284  ; CHECK-NEXT:   BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
285  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
286  ; CHECK-NEXT:   CBNZW killed renamable $w0, %bb.5
287  ; CHECK-NEXT:   B %bb.4
288  ; CHECK-NEXT: {{  $}}
289  ; CHECK-NEXT: bb.4.BB04:
290  ; CHECK-NEXT:   successors: %bb.5(0x80000000)
291  ; CHECK-NEXT: {{  $}}
292  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
293  ; CHECK-NEXT:   BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
294  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
295  ; CHECK-NEXT: {{  $}}
296  ; CHECK-NEXT: bb.5.BB05:
297  ; CHECK-NEXT:   successors: %bb.6(0x30000000), %bb.7(0x50000000)
298  ; CHECK-NEXT: {{  $}}
299  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
300  ; CHECK-NEXT:   BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
301  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
302  ; CHECK-NEXT:   CBNZW killed renamable $w0, %bb.7
303  ; CHECK-NEXT:   B %bb.6
304  ; CHECK-NEXT: {{  $}}
305  ; CHECK-NEXT: bb.6.BB06:
306  ; CHECK-NEXT:   successors: %bb.9(0x80000000)
307  ; CHECK-NEXT: {{  $}}
308  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
309  ; CHECK-NEXT:   BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
310  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
311  ; CHECK-NEXT:   B %bb.9
312  ; CHECK-NEXT: {{  $}}
313  ; CHECK-NEXT: bb.7.BB07:
314  ; CHECK-NEXT:   successors: %bb.9(0x80000000)
315  ; CHECK-NEXT: {{  $}}
316  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
317  ; CHECK-NEXT:   BL @fun2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
318  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
319  ; CHECK-NEXT:   B %bb.9
320  ; CHECK-NEXT: {{  $}}
321  ; CHECK-NEXT: bb.8.exit:
322  ; CHECK-NEXT:   RET_ReallyLR
323  ; CHECK-NEXT: {{  $}}
324  ; CHECK-NEXT: bb.9:
325  ; CHECK-NEXT:   successors: %bb.8(0x80000000)
326  ; CHECK-NEXT: {{  $}}
327  ; CHECK-NEXT:   B %bb.8
328  bb.0.BB00:
329    successors: %bb.1(0x50000000), %bb.8(0x30000000)
330    liveins: $w0, $x1, $x2
331
332    dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv
333    Bcc 11, %bb.8, implicit killed $nzcv
334    B %bb.1
335
336  bb.1.BB01:
337    successors: %bb.2, %bb.3
338    liveins: $w0, $x1, $x2
339
340    dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv
341    STRWui renamable $w0, killed renamable $x1, 0 :: (store (s32) into %ir.P1)
342    Bcc 11, %bb.3, implicit killed $nzcv
343    B %bb.2
344
345  bb.2.BB02:
346    liveins: $w0, $x2
347
348    STRWui killed renamable $w0, killed renamable $x2, 0 :: (store (s32) into %ir.P2)
349
350  bb.3.BB03:
351    successors: %bb.4(0x30000000), %bb.5(0x50000000)
352
353    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
354    BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
355    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
356    CBNZW killed renamable $w0, %bb.5
357    B %bb.4
358
359  bb.4.BB04:
360    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
361    BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
362    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
363
364  bb.5.BB05:
365    successors: %bb.6(0x30000000), %bb.7(0x50000000)
366
367    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
368    BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
369    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
370    CBNZW killed renamable $w0, %bb.7
371    B %bb.6
372
373  bb.6.BB06:
374    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
375    BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
376    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
377    B %bb.8
378
379  bb.7.BB07:
380    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
381    BL @fun2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
382    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
383
384  bb.8.exit:
385    RET_ReallyLR
386
387...
388---
389name:            noshrink_test1
390alignment:       4
391tracksRegLiveness: true
392tracksDebugUserValues: true
393liveins:
394  - { reg: '$w0' }
395  - { reg: '$w1' }
396  - { reg: '$w2' }
397frameInfo:
398  maxAlignment:    1
399  adjustsStack:    true
400  hasCalls:        true
401  maxCallFrameSize: 0
402machineFunctionInfo: {}
403body:             |
404  ; CHECK-LABEL: name: noshrink_test1
405  ; CHECK: bb.0.entry:
406  ; CHECK-NEXT:   successors: %bb.1(0x50000000), %bb.6(0x30000000)
407  ; CHECK-NEXT:   liveins: $w0, $w1, $w2
408  ; CHECK-NEXT: {{  $}}
409  ; CHECK-NEXT:   dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv
410  ; CHECK-NEXT:   Bcc 11, %bb.6, implicit killed $nzcv
411  ; CHECK-NEXT:   B %bb.1
412  ; CHECK-NEXT: {{  $}}
413  ; CHECK-NEXT: bb.1.BB0:
414  ; CHECK-NEXT:   successors: %bb.2(0x60000000), %bb.3(0x20000000)
415  ; CHECK-NEXT:   liveins: $w0, $w1, $w2
416  ; CHECK-NEXT: {{  $}}
417  ; CHECK-NEXT:   dead $wzr = SUBSWri killed renamable $w0, 10, 0, implicit-def $nzcv
418  ; CHECK-NEXT:   Bcc 1, %bb.3, implicit killed $nzcv
419  ; CHECK-NEXT:   B %bb.2
420  ; CHECK-NEXT: {{  $}}
421  ; CHECK-NEXT: bb.2.BB0:
422  ; CHECK-NEXT:   successors: %bb.4(0x55555555), %bb.3(0x2aaaaaab)
423  ; CHECK-NEXT:   liveins: $w1, $w2
424  ; CHECK-NEXT: {{  $}}
425  ; CHECK-NEXT:   dead $wzr = SUBSWri killed renamable $w1, 10, 0, implicit-def $nzcv
426  ; CHECK-NEXT:   Bcc 0, %bb.4, implicit killed $nzcv
427  ; CHECK-NEXT:   B %bb.3
428  ; CHECK-NEXT: {{  $}}
429  ; CHECK-NEXT: bb.3.BB2:
430  ; CHECK-NEXT:   successors: %bb.5(0x40000000), %bb.6(0x40000000)
431  ; CHECK-NEXT:   liveins: $w2
432  ; CHECK-NEXT: {{  $}}
433  ; CHECK-NEXT:   dead $wzr = SUBSWri killed renamable $w2, 10, 0, implicit-def $nzcv
434  ; CHECK-NEXT:   Bcc 0, %bb.5, implicit killed $nzcv
435  ; CHECK-NEXT:   B %bb.6
436  ; CHECK-NEXT: {{  $}}
437  ; CHECK-NEXT: bb.4.BB3:
438  ; CHECK-NEXT:   successors: %bb.6(0x80000000)
439  ; CHECK-NEXT: {{  $}}
440  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
441  ; CHECK-NEXT:   BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
442  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
443  ; CHECK-NEXT:   B %bb.6
444  ; CHECK-NEXT: {{  $}}
445  ; CHECK-NEXT: bb.5.BB4:
446  ; CHECK-NEXT:   successors: %bb.6(0x80000000)
447  ; CHECK-NEXT: {{  $}}
448  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
449  ; CHECK-NEXT:   BL @fun2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
450  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
451  ; CHECK-NEXT: {{  $}}
452  ; CHECK-NEXT: bb.6.exit:
453  ; CHECK-NEXT:   RET_ReallyLR
454  bb.0.entry:
455    successors: %bb.1(0x50000000), %bb.6(0x30000000)
456    liveins: $w0, $w1, $w2
457
458    dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv
459    Bcc 11, %bb.6, implicit killed $nzcv
460    B %bb.1
461
462  bb.1.BB0:
463    successors: %bb.2(0x60000000), %bb.3(0x20000000)
464    liveins: $w0, $w1, $w2
465
466    dead $wzr = SUBSWri killed renamable $w0, 10, 0, implicit-def $nzcv
467    Bcc 1, %bb.3, implicit killed $nzcv
468    B %bb.2
469
470  bb.2.BB0:
471    successors: %bb.4(0x55555555), %bb.3(0x2aaaaaab)
472    liveins: $w1, $w2
473
474    dead $wzr = SUBSWri killed renamable $w1, 10, 0, implicit-def $nzcv
475    Bcc 0, %bb.4, implicit killed $nzcv
476    B %bb.3
477
478  bb.3.BB2:
479    liveins: $w2
480
481    dead $wzr = SUBSWri killed renamable $w2, 10, 0, implicit-def $nzcv
482    Bcc 0, %bb.5, implicit killed $nzcv
483    B %bb.6
484
485  bb.4.BB3:
486    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
487    BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
488    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
489    B %bb.6
490
491  bb.5.BB4:
492    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
493    BL @fun2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
494    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
495
496  bb.6.exit:
497    RET_ReallyLR
498
499...
500---
501name:            noshrink_test2
502alignment:       4
503tracksRegLiveness: true
504tracksDebugUserValues: true
505liveins:
506  - { reg: '$w0' }
507frameInfo:
508  maxAlignment:    1
509  adjustsStack:    true
510  hasCalls:        true
511  maxCallFrameSize: 0
512machineFunctionInfo: {}
513body:             |
514  ; CHECK-LABEL: name: noshrink_test2
515  ; CHECK: bb.0.BB00:
516  ; CHECK-NEXT:   successors: %bb.2(0x50000000), %bb.1(0x30000000)
517  ; CHECK-NEXT:   liveins: $w0
518  ; CHECK-NEXT: {{  $}}
519  ; CHECK-NEXT:   dead $wzr = SUBSWri killed renamable $w0, 0, 0, implicit-def $nzcv
520  ; CHECK-NEXT:   Bcc 12, %bb.2, implicit killed $nzcv
521  ; CHECK-NEXT: {{  $}}
522  ; CHECK-NEXT: bb.1:
523  ; CHECK-NEXT:   successors: %bb.4(0x80000000)
524  ; CHECK-NEXT: {{  $}}
525  ; CHECK-NEXT:   B %bb.4
526  ; CHECK-NEXT: {{  $}}
527  ; CHECK-NEXT: bb.2.BB01:
528  ; CHECK-NEXT:   successors: %bb.3(0x30000000), %bb.5(0x50000000)
529  ; CHECK-NEXT: {{  $}}
530  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
531  ; CHECK-NEXT:   BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
532  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
533  ; CHECK-NEXT:   CBNZW killed renamable $w0, %bb.5
534  ; CHECK-NEXT:   B %bb.3
535  ; CHECK-NEXT: {{  $}}
536  ; CHECK-NEXT: bb.3.BB02:
537  ; CHECK-NEXT:   successors: %bb.5(0x80000000)
538  ; CHECK-NEXT: {{  $}}
539  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
540  ; CHECK-NEXT:   BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
541  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
542  ; CHECK-NEXT:   B %bb.5
543  ; CHECK-NEXT: {{  $}}
544  ; CHECK-NEXT: bb.4.InfLoop:
545  ; CHECK-NEXT:   successors: %bb.4(0x80000000)
546  ; CHECK-NEXT: {{  $}}
547  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
548  ; CHECK-NEXT:   BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
549  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
550  ; CHECK-NEXT:   B %bb.4
551  ; CHECK-NEXT: {{  $}}
552  ; CHECK-NEXT: bb.5.exit:
553  ; CHECK-NEXT:   RET_ReallyLR
554  bb.0.BB00:
555    successors: %bb.2(0x50000000), %bb.1(0x30000000)
556    liveins: $w0
557
558    dead $wzr = SUBSWri killed renamable $w0, 0, 0, implicit-def $nzcv
559    Bcc 12, %bb.2, implicit killed $nzcv
560
561  bb.1:
562    B %bb.4
563
564  bb.2.BB01:
565    successors: %bb.3(0x30000000), %bb.5(0x50000000)
566
567    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
568    BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
569    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
570    CBNZW killed renamable $w0, %bb.5
571    B %bb.3
572
573  bb.3.BB02:
574    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
575    BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
576    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
577    B %bb.5
578
579  bb.4.InfLoop:
580    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
581    BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
582    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
583    B %bb.4
584
585  bb.5.exit:
586    RET_ReallyLR
587
588...
589---
590name:            noshrink_test3
591alignment:       4
592tracksRegLiveness: true
593tracksDebugUserValues: true
594liveins:
595  - { reg: '$w0' }
596frameInfo:
597  maxAlignment:    1
598  adjustsStack:    true
599  hasCalls:        true
600  maxCallFrameSize: 0
601machineFunctionInfo: {}
602body:             |
603  ; CHECK-LABEL: name: noshrink_test3
604  ; CHECK: bb.0.BB00:
605  ; CHECK-NEXT:   successors: %bb.3(0x50000000), %bb.1(0x30000000)
606  ; CHECK-NEXT:   liveins: $w0
607  ; CHECK-NEXT: {{  $}}
608  ; CHECK-NEXT:   renamable $w19 = COPY $w0
609  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
610  ; CHECK-NEXT:   BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
611  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
612  ; CHECK-NEXT:   dead $wzr = SUBSWri killed renamable $w19, 0, 0, implicit-def $nzcv
613  ; CHECK-NEXT:   Bcc 12, %bb.3, implicit killed $nzcv
614  ; CHECK-NEXT:   B %bb.1
615  ; CHECK-NEXT: {{  $}}
616  ; CHECK-NEXT: bb.1.BB01:
617  ; CHECK-NEXT:   successors: %bb.2(0x00000800), %bb.6(0x7ffff800)
618  ; CHECK-NEXT:   liveins: $w0
619  ; CHECK-NEXT: {{  $}}
620  ; CHECK-NEXT:   CBNZW killed renamable $w0, %bb.6
621  ; CHECK-NEXT:   B %bb.2
622  ; CHECK-NEXT: {{  $}}
623  ; CHECK-NEXT: bb.2.BB01.1:
624  ; CHECK-NEXT:   successors: %bb.3(0x80000000)
625  ; CHECK-NEXT: {{  $}}
626  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
627  ; CHECK-NEXT:   BL @abort, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp
628  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
629  ; CHECK-NEXT: {{  $}}
630  ; CHECK-NEXT: bb.3.BB02:
631  ; CHECK-NEXT:   successors: %bb.4(0x30000000), %bb.5(0x50000000)
632  ; CHECK-NEXT:   liveins: $w0
633  ; CHECK-NEXT: {{  $}}
634  ; CHECK-NEXT:   CBNZW killed renamable $w0, %bb.5
635  ; CHECK-NEXT:   B %bb.4
636  ; CHECK-NEXT: {{  $}}
637  ; CHECK-NEXT: bb.4.BB03:
638  ; CHECK-NEXT:   successors: %bb.5(0x30000000), %bb.6(0x50000000)
639  ; CHECK-NEXT: {{  $}}
640  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
641  ; CHECK-NEXT:   BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
642  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
643  ; CHECK-NEXT:   CBNZW killed renamable $w0, %bb.6
644  ; CHECK-NEXT:   B %bb.5
645  ; CHECK-NEXT: {{  $}}
646  ; CHECK-NEXT: bb.5.BB04:
647  ; CHECK-NEXT:   successors: %bb.6(0x80000000)
648  ; CHECK-NEXT: {{  $}}
649  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
650  ; CHECK-NEXT:   BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
651  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
652  ; CHECK-NEXT: {{  $}}
653  ; CHECK-NEXT: bb.6.exit:
654  ; CHECK-NEXT:   RET_ReallyLR
655  bb.0.BB00:
656    successors: %bb.3(0x50000000), %bb.1(0x30000000)
657    liveins: $w0
658
659    renamable $w19 = COPY $w0
660    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
661    BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
662    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
663    dead $wzr = SUBSWri killed renamable $w19, 0, 0, implicit-def $nzcv
664    Bcc 12, %bb.3, implicit killed $nzcv
665    B %bb.1
666
667  bb.1.BB01:
668    successors: %bb.2(0x00000800), %bb.6(0x7ffff800)
669    liveins: $w0
670
671    CBNZW killed renamable $w0, %bb.6
672    B %bb.2
673
674  bb.2.BB01.1:
675
676    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
677    BL @abort, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp
678    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
679
680  bb.3.BB02:
681    successors: %bb.4(0x30000000), %bb.5(0x50000000)
682    liveins: $w0
683
684    CBNZW killed renamable $w0, %bb.5
685    B %bb.4
686
687  bb.4.BB03:
688    successors: %bb.5(0x30000000), %bb.6(0x50000000)
689
690    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
691    BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
692    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
693    CBNZW killed renamable $w0, %bb.6
694    B %bb.5
695
696  bb.5.BB04:
697    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
698    BL @fun, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
699    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
700
701  bb.6.exit:
702    RET_ReallyLR
703
704...
705---
706name:            noshrink_bb_as_inlineasmbr_target
707registers:       []
708liveins:
709  - { reg: '$w0', virtual-reg: '' }
710frameInfo:
711  savePoint:       ''
712  restorePoint:    ''
713body:             |
714  ; CHECK-LABEL: name: noshrink_bb_as_inlineasmbr_target
715  ; CHECK: bb.0.entry:
716  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.3(0x40000000)
717  ; CHECK-NEXT:   liveins: $w0
718  ; CHECK-NEXT: {{  $}}
719  ; CHECK-NEXT:   TBZW killed renamable $w0, 0, %bb.3
720  ; CHECK-NEXT:   B %bb.1
721  ; CHECK-NEXT: {{  $}}
722  ; CHECK-NEXT: bb.1 (%ir-block.0):
723  ; CHECK-NEXT:   successors: %bb.2(0x80000000), %bb.3(0x00000000)
724  ; CHECK-NEXT: {{  $}}
725  ; CHECK-NEXT:   INLINEASM_BR &"", 1 /* sideeffect attdialect */, 13 /* imm */, %bb.3
726  ; CHECK-NEXT:   B %bb.2
727  ; CHECK-NEXT: {{  $}}
728  ; CHECK-NEXT: bb.2 (%ir-block.1):
729  ; CHECK-NEXT:   successors: %bb.3(0x80000000)
730  ; CHECK-NEXT: {{  $}}
731  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
732  ; CHECK-NEXT:   BL @dosomething, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp
733  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
734  ; CHECK-NEXT: {{  $}}
735  ; CHECK-NEXT: bb.3.exit (machine-block-address-taken, inlineasm-br-indirect-target):
736  ; CHECK-NEXT:   RET_ReallyLR
737  bb.0.entry:
738    successors: %bb.1(0x40000000), %bb.3(0x40000000)
739    liveins: $w0
740
741    TBZW killed renamable $w0, 0, %bb.3
742    B %bb.1
743
744  bb.1 (%ir-block.0):
745    successors: %bb.2(0x80000000), %bb.3(0x00000000)
746
747    INLINEASM_BR &"", 1 /* sideeffect attdialect */, 13 /* imm */, %bb.3
748    B %bb.2
749
750  bb.2 (%ir-block.1):
751    successors: %bb.3(0x80000000)
752
753    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
754    BL @dosomething, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp
755    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
756
757  bb.3.exit (machine-block-address-taken, inlineasm-br-indirect-target):
758    RET_ReallyLR
759
760...
761