xref: /llvm-project/llvm/test/CodeGen/AArch64/cfi-fixup.mir (revision b4ad28da196d3c2b1bc064b4dc46c3e00e93438f)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=aarch64 -run-pass=cfi-fixup %s -o - | FileCheck %s
3--- |
4  define i32 @f0(i32 %x) #0 {
5  entry: br label %return
6  if.end: br label %return
7  if.then2: br label %return
8  if.else: br label %return
9  return:
10    ret i32 0
11  }
12
13  define i32 @f1(i32 %x) #0 {
14  entry: br label %return
15  if.end: br label %return
16  if.then2: br label %return
17  if.else: br label %return
18  return:
19    ret i32 0
20  }
21
22  define i32 @f2(i32 %x) #0 {
23  entry: br label %return
24  if.end: br label %return
25  if.then2: br label %return
26  if.else: br label %return
27  return:
28    ret i32 0
29  }
30
31  declare i32 @g(i32)
32
33  attributes #0 = { nounwind shadowcallstack uwtable "sign-return-address"="non-leaf" "target-features"="+reserve-x18" }
34
35...
36---
37name:            f0
38alignment:       4
39exposesReturnsTwice: false
40legalized:       false
41regBankSelected: false
42selected:        false
43failedISel:      false
44tracksRegLiveness: true
45hasWinCFI:       false
46failsVerification: false
47registers:       []
48liveins:
49  - { reg: '$w0', virtual-reg: '' }
50frameInfo:
51  isFrameAddressTaken: false
52  isReturnAddressTaken: false
53  hasStackMap:     false
54  hasPatchPoint:   false
55  stackSize:       16
56  offsetAdjustment: 0
57  maxAlignment:    16
58  adjustsStack:    true
59  hasCalls:        true
60  stackProtector:  ''
61  maxCallFrameSize: 0
62  cvBytesOfCalleeSavedRegisters: 0
63  hasOpaqueSPAdjustment: false
64  hasVAStart:      false
65  hasMustTailInVarArgFunc: false
66  hasTailCall:     false
67  localFrameSize:  0
68  savePoint:       ''
69  restorePoint:    ''
70fixedStack:      []
71stack:
72  - { id: 0, name: '', type: spill-slot, offset: -16, size: 8, alignment: 16,
73      stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true,
74      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
75callSites:       []
76debugValueSubstitutions: []
77constants:       []
78machineFunctionInfo:
79  hasRedZone:      false
80body:             |
81  ; CHECK-LABEL: name: f0
82  ; CHECK: bb.0.entry:
83  ; CHECK-NEXT:   successors: %bb.4(0x30000000), %bb.1(0x50000000)
84  ; CHECK-NEXT:   liveins: $w0, $lr, $x18
85  ; CHECK-NEXT: {{  $}}
86  ; CHECK-NEXT:   CBZW renamable $w0, %bb.4
87  ; CHECK-NEXT: {{  $}}
88  ; CHECK-NEXT: bb.1.if.end:
89  ; CHECK-NEXT:   successors: %bb.3(0x30000000), %bb.2(0x50000000)
90  ; CHECK-NEXT:   liveins: $w0, $lr, $x18
91  ; CHECK-NEXT: {{  $}}
92  ; CHECK-NEXT:   early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
93  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
94  ; CHECK-NEXT:   frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp
95  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state
96  ; CHECK-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
97  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
98  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -16
99  ; CHECK-NEXT:   CFI_INSTRUCTION remember_state
100  ; CHECK-NEXT:   TBNZW renamable $w0, 31, %bb.3
101  ; CHECK-NEXT: {{  $}}
102  ; CHECK-NEXT: bb.2.if.else:
103  ; CHECK-NEXT:   successors: %bb.5(0x80000000)
104  ; CHECK-NEXT:   liveins: $w0
105  ; CHECK-NEXT: {{  $}}
106  ; CHECK-NEXT:   renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0
107  ; CHECK-NEXT:   BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
108  ; CHECK-NEXT:   renamable $w8 = MOVZWi 1, 0
109  ; CHECK-NEXT:   $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0
110  ; CHECK-NEXT:   B %bb.5
111  ; CHECK-NEXT: {{  $}}
112  ; CHECK-NEXT: bb.3.if.then2:
113  ; CHECK-NEXT:   successors: %bb.5(0x80000000)
114  ; CHECK-NEXT:   liveins: $w0
115  ; CHECK-NEXT: {{  $}}
116  ; CHECK-NEXT:   renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0
117  ; CHECK-NEXT:   BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
118  ; CHECK-NEXT:   renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0
119  ; CHECK-NEXT:   B %bb.5
120  ; CHECK-NEXT: {{  $}}
121  ; CHECK-NEXT: bb.4.return:
122  ; CHECK-NEXT:   liveins: $w0
123  ; CHECK-NEXT: {{  $}}
124  ; CHECK-NEXT:   CFI_INSTRUCTION def_cfa $wsp, 0
125  ; CHECK-NEXT:   CFI_INSTRUCTION negate_ra_sign_state
126  ; CHECK-NEXT:   CFI_INSTRUCTION same_value $w18
127  ; CHECK-NEXT:   CFI_INSTRUCTION same_value $w30
128  ; CHECK-NEXT:   RET undef $lr, implicit killed $w0
129  ; CHECK-NEXT: {{  $}}
130  ; CHECK-NEXT: bb.5.return:
131  ; CHECK-NEXT:   successors: %bb.7(0x80000000)
132  ; CHECK-NEXT:   liveins: $w0
133  ; CHECK-NEXT: {{  $}}
134  ; CHECK-NEXT:   CFI_INSTRUCTION restore_state
135  ; CHECK-NEXT:   CFI_INSTRUCTION remember_state
136  ; CHECK-NEXT:   B %bb.7
137  ; CHECK-NEXT: {{  $}}
138  ; CHECK-NEXT: bb.6.return:
139  ; CHECK-NEXT:   liveins: $w0
140  ; CHECK-NEXT: {{  $}}
141  ; CHECK-NEXT:   early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0)
142  ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION def_cfa_offset 0
143  ; CHECK-NEXT:   frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp
144  ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION negate_ra_sign_state
145  ; CHECK-NEXT:   early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8
146  ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION restore $w18
147  ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION restore $w30
148  ; CHECK-NEXT:   RET undef $lr, implicit killed $w0
149  ; CHECK-NEXT: {{  $}}
150  ; CHECK-NEXT: bb.7.return:
151  ; CHECK-NEXT:   successors: %bb.6(0x80000000)
152  ; CHECK-NEXT:   liveins: $w0
153  ; CHECK-NEXT: {{  $}}
154  ; CHECK-NEXT:   CFI_INSTRUCTION restore_state
155  ; CHECK-NEXT:   B %bb.6
156  bb.0.entry:
157    successors: %bb.4(0x30000000), %bb.1(0x50000000)
158    liveins: $w0, $lr, $x18
159
160    CBZW renamable $w0, %bb.4
161
162  bb.1.if.end:
163    successors: %bb.3(0x30000000), %bb.2(0x50000000)
164    liveins: $w0, $lr, $x18
165
166    early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
167    frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
168    frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp
169    frame-setup CFI_INSTRUCTION negate_ra_sign_state
170    early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
171    frame-setup CFI_INSTRUCTION def_cfa_offset 16
172    frame-setup CFI_INSTRUCTION offset $w30, -16
173    TBNZW renamable $w0, 31, %bb.3
174
175  bb.2.if.else:
176    successors: %bb.5(0x80000000)
177    liveins: $w0
178
179    renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0
180    BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
181    renamable $w8 = MOVZWi 1, 0
182    $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0
183    B %bb.5
184
185  bb.3.if.then2:
186    successors: %bb.5(0x80000000)
187    liveins: $w0
188
189    renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0
190    BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
191    renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0
192    B %bb.5
193
194  bb.4.return:
195    liveins: $w0
196    RET undef $lr, implicit killed $w0
197
198  bb.5.return:
199    liveins: $w0
200    B %bb.6
201
202  bb.7.return:
203    liveins: $w0
204    early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0)
205    frame-destroy CFI_INSTRUCTION def_cfa_offset 0
206    frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp
207    frame-destroy CFI_INSTRUCTION negate_ra_sign_state
208    early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8
209    frame-destroy CFI_INSTRUCTION restore $w18
210    frame-destroy CFI_INSTRUCTION restore $w30
211    RET undef $lr, implicit killed $w0
212
213  bb.6.return:
214    liveins: $w0
215    B %bb.7
216
217
218...
219---
220name:            f1
221alignment:       4
222exposesReturnsTwice: false
223legalized:       false
224regBankSelected: false
225selected:        false
226failedISel:      false
227tracksRegLiveness: true
228hasWinCFI:       false
229failsVerification: false
230registers:       []
231liveins:
232  - { reg: '$w0', virtual-reg: '' }
233frameInfo:
234  isFrameAddressTaken: false
235  isReturnAddressTaken: false
236  hasStackMap:     false
237  hasPatchPoint:   false
238  stackSize:       16
239  offsetAdjustment: 0
240  maxAlignment:    16
241  adjustsStack:    true
242  hasCalls:        true
243  stackProtector:  ''
244  maxCallFrameSize: 0
245  cvBytesOfCalleeSavedRegisters: 0
246  hasOpaqueSPAdjustment: false
247  hasVAStart:      false
248  hasMustTailInVarArgFunc: false
249  hasTailCall:     false
250  localFrameSize:  0
251  savePoint:       ''
252  restorePoint:    ''
253fixedStack:      []
254stack:
255  - { id: 0, name: '', type: spill-slot, offset: -16, size: 8, alignment: 16,
256      stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true,
257      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
258callSites:       []
259debugValueSubstitutions: []
260constants:       []
261machineFunctionInfo:
262  hasRedZone:      false
263body:             |
264  ; CHECK-LABEL: name: f1
265  ; CHECK: bb.0.entry:
266  ; CHECK-NEXT:   successors: %bb.5(0x30000000), %bb.1(0x50000000)
267  ; CHECK-NEXT:   liveins: $w0, $lr, $x18
268  ; CHECK-NEXT: {{  $}}
269  ; CHECK-NEXT:   CBZW renamable $w0, %bb.5
270  ; CHECK-NEXT: {{  $}}
271  ; CHECK-NEXT: bb.1.if.end:
272  ; CHECK-NEXT:   successors: %bb.3(0x30000000), %bb.2(0x50000000)
273  ; CHECK-NEXT:   liveins: $w0, $lr, $x18
274  ; CHECK-NEXT: {{  $}}
275  ; CHECK-NEXT:   early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
276  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
277  ; CHECK-NEXT:   frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp
278  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state
279  ; CHECK-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
280  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
281  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -16
282  ; CHECK-NEXT:   TBNZW renamable $w0, 31, %bb.3
283  ; CHECK-NEXT: {{  $}}
284  ; CHECK-NEXT: bb.2.if.else:
285  ; CHECK-NEXT:   successors: %bb.4(0x80000000)
286  ; CHECK-NEXT:   liveins: $w0
287  ; CHECK-NEXT: {{  $}}
288  ; CHECK-NEXT:   renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0
289  ; CHECK-NEXT:   BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
290  ; CHECK-NEXT:   renamable $w8 = MOVZWi 1, 0
291  ; CHECK-NEXT:   $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0
292  ; CHECK-NEXT:   B %bb.4
293  ; CHECK-NEXT: {{  $}}
294  ; CHECK-NEXT: bb.3.if.then2:
295  ; CHECK-NEXT:   successors: %bb.4(0x80000000)
296  ; CHECK-NEXT:   liveins: $w0
297  ; CHECK-NEXT: {{  $}}
298  ; CHECK-NEXT:   renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0
299  ; CHECK-NEXT:   BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
300  ; CHECK-NEXT:   renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0
301  ; CHECK-NEXT:   B %bb.4
302  ; CHECK-NEXT: {{  $}}
303  ; CHECK-NEXT: bb.4.return:
304  ; CHECK-NEXT:   liveins: $w0
305  ; CHECK-NEXT: {{  $}}
306  ; CHECK-NEXT:   early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0)
307  ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION def_cfa_offset 0
308  ; CHECK-NEXT:   frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp
309  ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION negate_ra_sign_state
310  ; CHECK-NEXT:   early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8
311  ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION restore $w18
312  ; CHECK-NEXT:   frame-destroy CFI_INSTRUCTION restore $w30
313  ; CHECK-NEXT:   RET undef $lr, implicit killed $w0
314  ; CHECK-NEXT: {{  $}}
315  ; CHECK-NEXT: bb.5.return:
316  ; CHECK-NEXT:   liveins: $w0
317  ; CHECK-NEXT: {{  $}}
318  ; CHECK-NEXT:   RET undef $lr, implicit killed $w0
319  bb.0.entry:
320    successors: %bb.5(0x30000000), %bb.1(0x50000000)
321    liveins: $w0, $lr, $x18
322
323    CBZW renamable $w0, %bb.5
324
325  bb.1.if.end:
326    successors: %bb.3(0x30000000), %bb.2(0x50000000)
327    liveins: $w0, $lr, $x18
328
329    early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
330    frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
331    frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp
332    frame-setup CFI_INSTRUCTION negate_ra_sign_state
333    early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
334    frame-setup CFI_INSTRUCTION def_cfa_offset 16
335    frame-setup CFI_INSTRUCTION offset $w30, -16
336    TBNZW renamable $w0, 31, %bb.3
337
338  bb.2.if.else:
339    successors: %bb.4(0x80000000)
340    liveins: $w0
341
342    renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0
343    BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
344    renamable $w8 = MOVZWi 1, 0
345    $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0
346    B %bb.4
347
348  bb.3.if.then2:
349    successors: %bb.4(0x80000000)
350    liveins: $w0
351
352    renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0
353    BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
354    renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0
355    B %bb.4
356
357  bb.4.return:
358    liveins: $w0
359
360    early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0)
361    frame-destroy CFI_INSTRUCTION def_cfa_offset 0
362    frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp
363    frame-destroy CFI_INSTRUCTION negate_ra_sign_state
364    early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8
365    frame-destroy CFI_INSTRUCTION restore $w18
366    frame-destroy CFI_INSTRUCTION restore $w30
367    RET undef $lr, implicit killed $w0
368
369  bb.5.return:
370    liveins: $w0
371    RET undef $lr, implicit killed $w0
372
373...
374---
375name:            f2
376alignment:       4
377exposesReturnsTwice: false
378legalized:       false
379regBankSelected: false
380selected:        false
381failedISel:      false
382tracksRegLiveness: true
383hasWinCFI:       false
384failsVerification: false
385registers:       []
386liveins:
387  - { reg: '$w0', virtual-reg: '' }
388frameInfo:
389  isFrameAddressTaken: false
390  isReturnAddressTaken: false
391  hasStackMap:     false
392  hasPatchPoint:   false
393  stackSize:       16
394  offsetAdjustment: 0
395  maxAlignment:    16
396  adjustsStack:    true
397  hasCalls:        true
398  stackProtector:  ''
399  maxCallFrameSize: 0
400  cvBytesOfCalleeSavedRegisters: 0
401  hasOpaqueSPAdjustment: false
402  hasVAStart:      false
403  hasMustTailInVarArgFunc: false
404  hasTailCall:     false
405  localFrameSize:  0
406  savePoint:       ''
407  restorePoint:    ''
408fixedStack:      []
409stack:
410  - { id: 0, name: '', type: spill-slot, offset: -16, size: 8, alignment: 16,
411      stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true,
412      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
413callSites:       []
414debugValueSubstitutions: []
415constants:       []
416machineFunctionInfo:
417  hasRedZone:      false
418body:             |
419  ; CHECK-LABEL: name: f2
420  ; CHECK: bb.0.entry:
421  ; CHECK-NEXT:   successors: %bb.5(0x30000000), %bb.1(0x50000000)
422  ; CHECK-NEXT:   liveins: $w0, $lr, $x18
423  ; CHECK-NEXT: {{  $}}
424  ; CHECK-NEXT:   CBZW renamable $w0, %bb.5
425  ; CHECK-NEXT: {{  $}}
426  ; CHECK-NEXT: bb.1.if.end:
427  ; CHECK-NEXT:   successors: %bb.3(0x30000000), %bb.2(0x50000000)
428  ; CHECK-NEXT:   liveins: $w0, $lr, $x18
429  ; CHECK-NEXT: {{  $}}
430  ; CHECK-NEXT:   early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
431  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
432  ; CHECK-NEXT:   frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp
433  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state
434  ; CHECK-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
435  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
436  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -16
437  ; CHECK-NEXT:   TBNZW renamable $w0, 31, %bb.3
438  ; CHECK-NEXT: {{  $}}
439  ; CHECK-NEXT: bb.2.if.else:
440  ; CHECK-NEXT:   successors: %bb.4(0x80000000)
441  ; CHECK-NEXT:   liveins: $w0
442  ; CHECK-NEXT: {{  $}}
443  ; CHECK-NEXT:   renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0
444  ; CHECK-NEXT:   BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
445  ; CHECK-NEXT:   renamable $w8 = MOVZWi 1, 0
446  ; CHECK-NEXT:   $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0
447  ; CHECK-NEXT:   B %bb.4
448  ; CHECK-NEXT: {{  $}}
449  ; CHECK-NEXT: bb.3.if.then2:
450  ; CHECK-NEXT:   successors: %bb.4(0x80000000)
451  ; CHECK-NEXT:   liveins: $w0
452  ; CHECK-NEXT: {{  $}}
453  ; CHECK-NEXT:   renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0
454  ; CHECK-NEXT:   BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
455  ; CHECK-NEXT:   renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0
456  ; CHECK-NEXT:   B %bb.4
457  ; CHECK-NEXT: {{  $}}
458  ; CHECK-NEXT: bb.4.return:
459  ; CHECK-NEXT:   liveins: $w0
460  ; CHECK-NEXT: {{  $}}
461  ; CHECK-NEXT:   early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0)
462  ; CHECK-NEXT:   frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp
463  ; CHECK-NEXT:   early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8
464  ; CHECK-NEXT:   RET undef $lr, implicit killed $w0
465  ; CHECK-NEXT: {{  $}}
466  ; CHECK-NEXT: bb.5.return:
467  ; CHECK-NEXT:   liveins: $w0
468  ; CHECK-NEXT: {{  $}}
469  ; CHECK-NEXT:   CFI_INSTRUCTION def_cfa $wsp, 0
470  ; CHECK-NEXT:   CFI_INSTRUCTION negate_ra_sign_state
471  ; CHECK-NEXT:   CFI_INSTRUCTION same_value $w18
472  ; CHECK-NEXT:   CFI_INSTRUCTION same_value $w30
473  ; CHECK-NEXT:   RET undef $lr, implicit killed $w0
474  bb.0.entry:
475    successors: %bb.5(0x30000000), %bb.1(0x50000000)
476    liveins: $w0, $lr, $x18
477
478    CBZW renamable $w0, %bb.5
479
480  bb.1.if.end:
481    successors: %bb.3(0x30000000), %bb.2(0x50000000)
482    liveins: $w0, $lr, $x18
483
484    early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
485    frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
486    frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp
487    frame-setup CFI_INSTRUCTION negate_ra_sign_state
488    early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
489    frame-setup CFI_INSTRUCTION def_cfa_offset 16
490    frame-setup CFI_INSTRUCTION offset $w30, -16
491    TBNZW renamable $w0, 31, %bb.3
492
493  bb.2.if.else:
494    successors: %bb.4(0x80000000)
495    liveins: $w0
496
497    renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0
498    BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
499    renamable $w8 = MOVZWi 1, 0
500    $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0
501    B %bb.4
502
503  bb.3.if.then2:
504    successors: %bb.4(0x80000000)
505    liveins: $w0
506
507    renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0
508    BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
509    renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0
510    B %bb.4
511
512  bb.4.return:
513    liveins: $w0
514
515    early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0)
516    frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp
517    early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8
518    RET undef $lr, implicit killed $w0
519
520  bb.5.return:
521    liveins: $w0
522    RET undef $lr, implicit killed $w0
523
524...
525