1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=thumbv8.1m.main-none-eabi -mattr=+mve -run-pass=arm-block-placement -verify-machineinstrs %s -o - | FileCheck %s
3--- |
4
5  ; Checks that Predecessor gets moved (to before the LoopExit) if it contains a backward WLS.
6  define void @backwards_branch(i32 %N, i32* nocapture %a, i32* nocapture readonly %b)   {
7  entry:
8    unreachable
9  }
10
11  ; Checks that Predecessor (containing a backwards WLS) does not get moved to before the loopExit if it is the entry block.
12  define void @backwards_branch_entry_block(i32 %N, i32* nocapture %a, i32* nocapture readonly %b)   {
13  entry:
14    unreachable
15  }
16
17  ; Checks that Predecessor (to which a forward WLS exists) is not moved if moving it would cause the WLS to become backwards branching.
18  define void @backwards_branch_backwards_wls(i32 %N, i32 %M, i32* nocapture %a, i32* nocapture %b, i32* nocapture %c)   {
19  entry:
20    unreachable
21  }
22
23  ; Checks that a MachineFunction is unaffected if it doesn't contain any WLS (pseudo) instruction.
24  define void @no_predecessor(i32 %N, i32 %M, i32* nocapture %a, i32* nocapture %b, i32* nocapture %c)   {
25  entry:
26    unreachable
27  }
28
29  ; Within a nested (Both the WLS and loopExit are at depth=3 here) loop, checks that Predecessor
30  ; gets moved (in backward direction) if there exists a backdwards WLS from it to the LoopExit.
31  define void @nested_loops(i32 %n, i32 %m, i32 %l, i8* noalias %X, i8* noalias %Y)   {
32  entry:
33    unreachable
34  }
35
36  ; Checks that Predecessor (to which a forward WLS exists) is moved if moving it would NOT cause the WLS
37  ; to become backwards branching.
38  define void @backwards_branch_forwards_wls(i32 %N, i32 %M, i32* nocapture %a, i32* nocapture %b, i32* nocapture %c) {
39  entry:
40    unreachable
41  }
42
43  ; Checks that multiple predecessor case is handled appropriately
44  define void @multiple_predecessors(i32 %d, i32 %e, i32 %f) {
45  entry:
46    unreachable
47  }
48
49  ; Checks that blocks after jump tables work
50  define void @jump_table(i32 %d, i32 %e, i32 %f) {
51  entry:
52    unreachable
53  }
54
55  declare dso_local i32 @g(...)
56
57  declare dso_local i32 @h(...)
58
59...
60---
61name:            backwards_branch
62tracksRegLiveness: true
63body:             |
64  ; CHECK-LABEL: name: backwards_branch
65  ; CHECK: bb.0:
66  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
67  ; CHECK-NEXT:   liveins: $r0, $r1, $r2, $lr
68  ; CHECK-NEXT: {{  $}}
69  ; CHECK-NEXT:   tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
70  ; CHECK-NEXT:   t2IT 11, 8, implicit-def $itstate
71  ; CHECK-NEXT:   frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
72  ; CHECK-NEXT: {{  $}}
73  ; CHECK-NEXT: bb.1:
74  ; CHECK-NEXT:   successors: %bb.3(0x80000000)
75  ; CHECK-NEXT:   liveins: $r0, $r1, $r2
76  ; CHECK-NEXT: {{  $}}
77  ; CHECK-NEXT:   $lr = t2WhileLoopStartLR killed renamable $r0, %bb.2, implicit-def dead $cpsr
78  ; CHECK-NEXT:   t2B %bb.3, 14 /* CC::al */, $noreg
79  ; CHECK-NEXT: {{  $}}
80  ; CHECK-NEXT: bb.2:
81  ; CHECK-NEXT:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
82  ; CHECK-NEXT: {{  $}}
83  ; CHECK-NEXT: bb.3:
84  ; CHECK-NEXT:   successors: %bb.3(0x7c000000), %bb.2(0x04000000)
85  ; CHECK-NEXT:   liveins: $lr, $r1, $r2
86  ; CHECK-NEXT: {{  $}}
87  ; CHECK-NEXT:   renamable $r0 = tLDRi renamable $r2, 0, 14 /* CC::al */, $noreg
88  ; CHECK-NEXT:   tSTRi killed renamable $r0, renamable $r1, 0, 14 /* CC::al */, $noreg
89  ; CHECK-NEXT:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.3, implicit-def dead $cpsr
90  ; CHECK-NEXT:   t2B %bb.2, 14 /* CC::al */, $noreg
91  bb.0:
92    successors: %bb.2(0x80000000)
93    liveins: $r0, $r1, $r2, $lr
94
95    tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
96    t2IT 11, 8, implicit-def $itstate
97    frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
98
99  bb.1:
100    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
101
102  bb.2:
103    successors: %bb.3(0x80000000)
104    liveins: $r0, $r1, $r2
105
106    $lr = t2WhileLoopStartLR killed renamable $r0, %bb.1, implicit-def dead $cpsr
107
108  bb.3:
109    successors: %bb.3(0x7c000000), %bb.1(0x04000000)
110    liveins: $lr, $r1, $r2
111
112    renamable $r0 = tLDRi renamable $r2, 0, 14 /* CC::al */, $noreg
113    tSTRi killed renamable $r0, renamable $r1, 0, 14 /* CC::al */, $noreg
114    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.3, implicit-def dead $cpsr
115    t2B %bb.1, 14 /* CC::al */, $noreg
116
117...
118---
119name:            backwards_branch_entry_block
120tracksRegLiveness: true
121body:             |
122  ; CHECK-LABEL: name: backwards_branch_entry_block
123  ; CHECK: bb.0:
124  ; CHECK-NEXT:   successors: %bb.2(0x80000000)
125  ; CHECK-NEXT:   liveins: $r0, $r1, $r2, $lr
126  ; CHECK-NEXT: {{  $}}
127  ; CHECK-NEXT:   tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
128  ; CHECK-NEXT:   t2IT 11, 8, implicit-def $itstate
129  ; CHECK-NEXT:   frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
130  ; CHECK-NEXT: {{  $}}
131  ; CHECK-NEXT: bb.1:
132  ; CHECK-NEXT:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
133  ; CHECK-NEXT: {{  $}}
134  ; CHECK-NEXT: bb.2:
135  ; CHECK-NEXT:   successors: %bb.3(0x80000000)
136  ; CHECK-NEXT:   liveins: $r0, $r1, $r2
137  ; CHECK-NEXT: {{  $}}
138  ; CHECK-NEXT:   $lr = t2WhileLoopStartLR killed renamable $r0, %bb.0, implicit-def dead $cpsr
139  ; CHECK-NEXT: {{  $}}
140  ; CHECK-NEXT: bb.3:
141  ; CHECK-NEXT:   successors: %bb.3(0x7c000000), %bb.1(0x04000000)
142  ; CHECK-NEXT:   liveins: $lr, $r1, $r2
143  ; CHECK-NEXT: {{  $}}
144  ; CHECK-NEXT:   renamable $r0 = tLDRi renamable $r2, 0, 14 /* CC::al */, $noreg
145  ; CHECK-NEXT:   tSTRi killed renamable $r0, renamable $r1, 0, 14 /* CC::al */, $noreg
146  ; CHECK-NEXT:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.3, implicit-def dead $cpsr
147  ; CHECK-NEXT:   t2B %bb.1, 14 /* CC::al */, $noreg
148  bb.0:
149    successors: %bb.2(0x80000000)
150    liveins: $r0, $r1, $r2, $lr
151
152    tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
153    t2IT 11, 8, implicit-def $itstate
154    frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
155
156  bb.1:
157    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
158
159  bb.2:
160    successors: %bb.3(0x80000000)
161    liveins: $r0, $r1, $r2
162
163    $lr = t2WhileLoopStartLR killed renamable $r0, %bb.0, implicit-def dead $cpsr
164
165  bb.3:
166    successors: %bb.3(0x7c000000), %bb.1(0x04000000)
167    liveins: $lr, $r1, $r2
168
169    renamable $r0 = tLDRi renamable $r2, 0, 14 /* CC::al */, $noreg
170    tSTRi killed renamable $r0, renamable $r1, 0, 14 /* CC::al */, $noreg
171    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.3, implicit-def dead $cpsr
172    t2B %bb.1, 14 /* CC::al */, $noreg
173
174...
175---
176name:            backwards_branch_backwards_wls
177tracksRegLiveness: true
178body:             |
179  ; CHECK-LABEL: name: backwards_branch_backwards_wls
180  ; CHECK: bb.0:
181  ; CHECK-NEXT:   successors: %bb.2(0x80000000)
182  ; CHECK-NEXT:   liveins: $r0, $r1, $r2, $lr
183  ; CHECK-NEXT: {{  $}}
184  ; CHECK-NEXT:   tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
185  ; CHECK-NEXT:   t2IT 11, 8, implicit-def $itstate
186  ; CHECK-NEXT:   frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
187  ; CHECK-NEXT: {{  $}}
188  ; CHECK-NEXT: bb.1:
189  ; CHECK-NEXT:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
190  ; CHECK-NEXT: {{  $}}
191  ; CHECK-NEXT: bb.2:
192  ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.6(0x40000000)
193  ; CHECK-NEXT:   liveins: $r0, $r1, $r2
194  ; CHECK-NEXT: {{  $}}
195  ; CHECK-NEXT:   $lr = t2WhileLoopStartLR killed renamable $r0, %bb.3, implicit-def dead $cpsr
196  ; CHECK-NEXT:   t2B %bb.6, 14 /* CC::al */, $noreg
197  ; CHECK-NEXT: {{  $}}
198  ; CHECK-NEXT: bb.3:
199  ; CHECK-NEXT:   successors: %bb.1(0x7c000000), %bb.4(0x04000000)
200  ; CHECK-NEXT:   liveins: $lr, $r0, $r1, $r2
201  ; CHECK-NEXT: {{  $}}
202  ; CHECK-NEXT:   t2CMPri renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
203  ; CHECK-NEXT:   t2Bcc %bb.1, 0 /* CC::eq */, $cpsr
204  ; CHECK-NEXT: {{  $}}
205  ; CHECK-NEXT: bb.4:
206  ; CHECK-NEXT:   successors: %bb.5(0x80000000)
207  ; CHECK-NEXT:   liveins: $r2, $r1, $r0
208  ; CHECK-NEXT: {{  $}}
209  ; CHECK-NEXT:   $lr = t2DoLoopStart renamable $r0
210  ; CHECK-NEXT:   t2B %bb.5, 14 /* CC::al */, $noreg
211  ; CHECK-NEXT: {{  $}}
212  ; CHECK-NEXT: bb.5:
213  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.5(0x40000000)
214  ; CHECK-NEXT:   liveins: $lr, $r1, $r2
215  ; CHECK-NEXT: {{  $}}
216  ; CHECK-NEXT:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr
217  ; CHECK-NEXT:   t2B %bb.1, 14 /* CC::al */, $noreg
218  ; CHECK-NEXT: {{  $}}
219  ; CHECK-NEXT: bb.6:
220  ; CHECK-NEXT:   successors: %bb.6(0x40000000), %bb.3(0x40000000)
221  ; CHECK-NEXT:   liveins: $lr, $r1, $r2
222  ; CHECK-NEXT: {{  $}}
223  ; CHECK-NEXT:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.6, implicit-def dead $cpsr
224  ; CHECK-NEXT:   t2B %bb.3, 14 /* CC::al */, $noreg
225  bb.0:
226    successors: %bb.2(0x80000000)
227    liveins: $r0, $r1, $r2, $lr
228
229    tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
230    t2IT 11, 8, implicit-def $itstate
231    frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
232
233  bb.1:
234    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
235
236  bb.2:
237    successors: %bb.3(0x80000000), %bb.5(0x80000000)
238    liveins: $r0, $r1, $r2
239
240    $lr = t2WhileLoopStartLR killed renamable $r0, %bb.3, implicit-def dead $cpsr
241    t2B %bb.5, 14 /* CC::al */, $noreg
242
243  bb.3:
244    successors: %bb.1(0x7c000000), %bb.4(0x04000000)
245    liveins: $lr, $r0, $r1, $r2
246
247    $lr = t2WhileLoopStartLR killed renamable $r0, %bb.1, implicit-def dead $cpsr
248    t2B %bb.4, 14 /* CC::al */, $noreg
249
250  bb.4:
251    successors: %bb.1, %bb.4
252    liveins: $lr, $r1, $r2
253
254    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr
255    t2B %bb.1, 14 /* CC::al */, $noreg
256
257  bb.5:
258    successors: %bb.5, %bb.3
259    liveins: $lr, $r1, $r2
260
261    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr
262    t2B %bb.3, 14 /* CC::al */, $noreg
263...
264---
265name:            no_predecessor
266tracksRegLiveness: true
267body:             |
268  ; CHECK-LABEL: name: no_predecessor
269  ; CHECK: bb.0:
270  ; CHECK-NEXT:   successors: %bb.2(0x30000000), %bb.1(0x50000000)
271  ; CHECK-NEXT:   liveins: $r0, $r4, $r5, $r7, $lr
272  ; CHECK-NEXT: {{  $}}
273  ; CHECK-NEXT:   frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r4, killed $r5, $r7, killed $lr, implicit-def $sp, implicit $sp
274  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
275  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $lr, -4
276  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $r7, -8
277  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $r5, -12
278  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $r4, -16
279  ; CHECK-NEXT:   $r7 = frame-setup tADDrSPi $sp, 2, 14 /* CC::al */, $noreg
280  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION def_cfa $r7, 8
281  ; CHECK-NEXT:   $r4 = tMOVr killed $r0, 14 /* CC::al */, $noreg
282  ; CHECK-NEXT:   tBL 14 /* CC::al */, $noreg, @g, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $r0
283  ; CHECK-NEXT:   tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
284  ; CHECK-NEXT:   t2Bcc %bb.2, 0 /* CC::eq */, killed $cpsr
285  ; CHECK-NEXT: {{  $}}
286  ; CHECK-NEXT: bb.1:
287  ; CHECK-NEXT:   successors: %bb.4(0x80000000)
288  ; CHECK-NEXT:   liveins: $r4
289  ; CHECK-NEXT: {{  $}}
290  ; CHECK-NEXT:   renamable $r0, dead $cpsr = tMOVi8 4, 14 /* CC::al */, $noreg
291  ; CHECK-NEXT:   renamable $r5 = t2LDRSHi12 killed renamable $r0, 0, 14 /* CC::al */, $noreg
292  ; CHECK-NEXT:   t2B %bb.4, 14 /* CC::al */, $noreg
293  ; CHECK-NEXT: {{  $}}
294  ; CHECK-NEXT: bb.2:
295  ; CHECK-NEXT:   successors: %bb.4(0x80000000)
296  ; CHECK-NEXT:   liveins: $r4
297  ; CHECK-NEXT: {{  $}}
298  ; CHECK-NEXT:   renamable $r5, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
299  ; CHECK-NEXT:   t2B %bb.4, 14 /* CC::al */, $noreg
300  ; CHECK-NEXT: {{  $}}
301  ; CHECK-NEXT: bb.3:
302  ; CHECK-NEXT:   successors: %bb.4(0x80000000)
303  ; CHECK-NEXT:   liveins: $r4, $r5
304  ; CHECK-NEXT: {{  $}}
305  ; CHECK-NEXT:   $r0 = tMOVr $r5, 14 /* CC::al */, $noreg
306  ; CHECK-NEXT:   tBL 14 /* CC::al */, $noreg, @h, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $r0, implicit-def $sp, implicit-def dead $r0
307  ; CHECK-NEXT: {{  $}}
308  ; CHECK-NEXT: bb.4:
309  ; CHECK-NEXT:   successors: %bb.5(0x04000000), %bb.3(0x7c000000)
310  ; CHECK-NEXT:   liveins: $r4, $r5
311  ; CHECK-NEXT: {{  $}}
312  ; CHECK-NEXT:   renamable $r0 = tLDRi renamable $r4, 0, 14 /* CC::al */, $noreg
313  ; CHECK-NEXT:   tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
314  ; CHECK-NEXT:   t2Bcc %bb.3, 1 /* CC::ne */, killed $cpsr
315  ; CHECK-NEXT: {{  $}}
316  ; CHECK-NEXT: bb.5:
317  ; CHECK-NEXT:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r4, def $r5, def $r7, def $pc
318  bb.0:
319    successors: %bb.1(0x30000000), %bb.2(0x50000000)
320    liveins: $r0, $r4, $r5, $r7, $lr
321
322    frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r4, killed $r5, $r7, killed $lr, implicit-def $sp, implicit $sp
323    frame-setup CFI_INSTRUCTION def_cfa_offset 16
324    frame-setup CFI_INSTRUCTION offset $lr, -4
325    frame-setup CFI_INSTRUCTION offset $r7, -8
326    frame-setup CFI_INSTRUCTION offset $r5, -12
327    frame-setup CFI_INSTRUCTION offset $r4, -16
328    $r7 = frame-setup tADDrSPi $sp, 2, 14 /* CC::al */, $noreg
329    frame-setup CFI_INSTRUCTION def_cfa $r7, 8
330    $r4 = tMOVr killed $r0, 14 /* CC::al */, $noreg
331    tBL 14 /* CC::al */, $noreg, @g, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $r0
332    tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
333    t2Bcc %bb.1, 0 /* CC::eq */, killed $cpsr
334
335  bb.2:
336    successors: %bb.3(0x80000000)
337    liveins: $r4
338
339    renamable $r0, dead $cpsr = tMOVi8 4, 14 /* CC::al */, $noreg
340    renamable $r5 = t2LDRSHi12 killed renamable $r0, 0, 14 /* CC::al */, $noreg
341    t2B %bb.3, 14 /* CC::al */, $noreg
342
343  bb.1:
344    successors: %bb.3(0x80000000)
345    liveins: $r4
346
347    renamable $r5, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
348    t2B %bb.3, 14 /* CC::al */, $noreg
349
350  bb.4:
351    successors: %bb.3(0x80000000)
352    liveins: $r4, $r5
353
354    $r0 = tMOVr $r5, 14 /* CC::al */, $noreg
355    tBL 14 /* CC::al */, $noreg, @h, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $r0, implicit-def $sp, implicit-def dead $r0
356
357  bb.3:
358    successors: %bb.5(0x04000000), %bb.4(0x7c000000)
359    liveins: $r4, $r5
360
361    renamable $r0 = tLDRi renamable $r4, 0, 14 /* CC::al */, $noreg
362    tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
363    t2Bcc %bb.4, 1 /* CC::ne */, killed $cpsr
364
365  bb.5:
366    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r4, def $r5, def $r7, def $pc
367...
368---
369name:            nested_loops
370tracksRegLiveness: true
371liveins:
372  - { reg: '$r0' }
373  - { reg: '$r1' }
374  - { reg: '$r2' }
375  - { reg: '$r3' }
376frameInfo:
377  stackSize:       32
378  maxAlignment:    4
379  maxCallFrameSize: 0
380fixedStack:
381  - { id: 0, size: 4, alignment: 8, isImmutable: true }
382stack:
383  - { id: 0, type: spill-slot, offset: -4, size: 4, alignment: 4, callee-saved-register: '$lr',
384      callee-saved-restored: false }
385  - { id: 1, type: spill-slot, offset: -8, size: 4, alignment: 4, callee-saved-register: '$r10' }
386  - { id: 2, type: spill-slot, offset: -12, size: 4, alignment: 4, callee-saved-register: '$r9' }
387  - { id: 3, type: spill-slot, offset: -16, size: 4, alignment: 4, callee-saved-register: '$r8' }
388  - { id: 4, type: spill-slot, offset: -20, size: 4, alignment: 4, callee-saved-register: '$r7' }
389  - { id: 5, type: spill-slot, offset: -24, size: 4, alignment: 4, callee-saved-register: '$r6' }
390  - { id: 6, type: spill-slot, offset: -28, size: 4, alignment: 4, callee-saved-register: '$r5' }
391  - { id: 7, type: spill-slot, offset: -32, size: 4, alignment: 4, callee-saved-register: '$r4' }
392machineFunctionInfo: {}
393body:             |
394  ; CHECK-LABEL: name: nested_loops
395  ; CHECK: bb.0:
396  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
397  ; CHECK-NEXT:   liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $lr
398  ; CHECK-NEXT: {{  $}}
399  ; CHECK-NEXT:   $sp = frame-setup t2STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r4, killed $r5, killed $r6, killed $r7, killed $r8, killed $r9, killed $r10, killed $lr
400  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 32
401  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $lr, -4
402  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $r10, -8
403  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $r9, -12
404  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $r8, -16
405  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $r7, -20
406  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $r6, -24
407  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $r5, -28
408  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $r4, -32
409  ; CHECK-NEXT:   tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
410  ; CHECK-NEXT:   t2IT 11, 8, implicit-def $itstate
411  ; CHECK-NEXT:   $sp = frame-destroy t2LDMIA_RET $sp, 11 /* CC::lt */, killed $cpsr, def $r4, def $r5, def $r6, def $r7, def $r8, def $r9, def $r10, def $pc, implicit killed $itstate
412  ; CHECK-NEXT: {{  $}}
413  ; CHECK-NEXT: bb.1:
414  ; CHECK-NEXT:   successors: %bb.3(0x80000000)
415  ; CHECK-NEXT:   liveins: $r0, $r1, $r2, $r3
416  ; CHECK-NEXT: {{  $}}
417  ; CHECK-NEXT:   renamable $r12 = t2LDRi12 $sp, 32, 14 /* CC::al */, $noreg :: (load (s32) from %fixed-stack.0, align 8)
418  ; CHECK-NEXT:   $r9 = tMOVr killed $r2, 14 /* CC::al */, $noreg
419  ; CHECK-NEXT:   renamable $r8 = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
420  ; CHECK-NEXT:   t2B %bb.3, 14 /* CC::al */, $noreg
421  ; CHECK-NEXT: {{  $}}
422  ; CHECK-NEXT: bb.2:
423  ; CHECK-NEXT:   successors: %bb.9(0x04000000), %bb.3(0x7c000000)
424  ; CHECK-NEXT:   liveins: $r0, $r1, $r3, $r8, $r9, $r12
425  ; CHECK-NEXT: {{  $}}
426  ; CHECK-NEXT:   renamable $r8 = nuw nsw t2ADDri killed renamable $r8, 1, 14 /* CC::al */, $noreg, $noreg
427  ; CHECK-NEXT:   renamable $r3, dead $cpsr = tADDi8 killed renamable $r3, 1, 14 /* CC::al */, $noreg
428  ; CHECK-NEXT:   tCMPhir renamable $r8, renamable $r0, 14 /* CC::al */, $noreg, implicit-def $cpsr
429  ; CHECK-NEXT:   renamable $r12 = t2ADDri killed renamable $r12, 1, 14 /* CC::al */, $noreg, $noreg
430  ; CHECK-NEXT:   t2Bcc %bb.9, 0 /* CC::eq */, killed $cpsr
431  ; CHECK-NEXT: {{  $}}
432  ; CHECK-NEXT: bb.3:
433  ; CHECK-NEXT:   successors: %bb.4(0x50000000), %bb.2(0x30000000)
434  ; CHECK-NEXT:   liveins: $r0, $r1, $r3, $r8, $r9, $r12
435  ; CHECK-NEXT: {{  $}}
436  ; CHECK-NEXT:   tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
437  ; CHECK-NEXT:   t2Bcc %bb.2, 11 /* CC::lt */, killed $cpsr
438  ; CHECK-NEXT: {{  $}}
439  ; CHECK-NEXT: bb.4:
440  ; CHECK-NEXT:   successors: %bb.5(0x80000000)
441  ; CHECK-NEXT:   liveins: $r0, $r1, $r3, $r8, $r9, $r12
442  ; CHECK-NEXT: {{  $}}
443  ; CHECK-NEXT:   renamable $r4, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
444  ; CHECK-NEXT:   $r10 = tMOVr $r12, 14 /* CC::al */, $noreg
445  ; CHECK-NEXT:   $r2 = tMOVr $r3, 14 /* CC::al */, $noreg
446  ; CHECK-NEXT:   t2B %bb.5, 14 /* CC::al */, $noreg
447  ; CHECK-NEXT: {{  $}}
448  ; CHECK-NEXT: bb.5:
449  ; CHECK-NEXT:   successors: %bb.7(0x50000000), %bb.6(0x30000000)
450  ; CHECK-NEXT:   liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12
451  ; CHECK-NEXT: {{  $}}
452  ; CHECK-NEXT:   renamable $lr = t2WhileLoopStartLR killed renamable $r9, %bb.6, implicit-def dead $cpsr
453  ; CHECK-NEXT:   t2B %bb.7, 14 /* CC::al */, $noreg
454  ; CHECK-NEXT: {{  $}}
455  ; CHECK-NEXT: bb.6:
456  ; CHECK-NEXT:   successors: %bb.2(0x04000000), %bb.5(0x7c000000)
457  ; CHECK-NEXT:   liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12
458  ; CHECK-NEXT: {{  $}}
459  ; CHECK-NEXT:   renamable $r4, dead $cpsr = nuw nsw tADDi8 killed renamable $r4, 1, 14 /* CC::al */, $noreg
460  ; CHECK-NEXT:   renamable $r2, dead $cpsr = tADDi8 killed renamable $r2, 1, 14 /* CC::al */, $noreg
461  ; CHECK-NEXT:   tCMPr renamable $r4, renamable $r1, 14 /* CC::al */, $noreg, implicit-def $cpsr
462  ; CHECK-NEXT:   renamable $r10 = t2ADDri killed renamable $r10, 1, 14 /* CC::al */, $noreg, $noreg
463  ; CHECK-NEXT:   t2Bcc %bb.2, 0 /* CC::eq */, killed $cpsr
464  ; CHECK-NEXT:   t2B %bb.5, 14 /* CC::al */, $noreg
465  ; CHECK-NEXT: {{  $}}
466  ; CHECK-NEXT: bb.7:
467  ; CHECK-NEXT:   successors: %bb.8(0x80000000)
468  ; CHECK-NEXT:   liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12
469  ; CHECK-NEXT: {{  $}}
470  ; CHECK-NEXT:   $r5 = tMOVr $r10, 14 /* CC::al */, $noreg
471  ; CHECK-NEXT:   $r6 = tMOVr $r2, 14 /* CC::al */, $noreg
472  ; CHECK-NEXT:   t2B %bb.8, 14 /* CC::al */, $noreg
473  ; CHECK-NEXT: {{  $}}
474  ; CHECK-NEXT: bb.8:
475  ; CHECK-NEXT:   successors: %bb.8(0x7c000000), %bb.6(0x04000000)
476  ; CHECK-NEXT:   liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r8, $r9, $r10, $r12
477  ; CHECK-NEXT: {{  $}}
478  ; CHECK-NEXT:   tSTRi killed $r0, $r1, 0, 14 /* CC::al */, $noreg
479  ; CHECK-NEXT:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.8, implicit-def dead $cpsr
480  ; CHECK-NEXT:   t2B %bb.6, 14 /* CC::al */, $noreg
481  ; CHECK-NEXT: {{  $}}
482  ; CHECK-NEXT: bb.9:
483  ; CHECK-NEXT:   $sp = frame-destroy t2LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r4, def $r5, def $r6, def $r7, def $r8, def $r9, def $r10, def $pc
484  bb.0:
485    successors: %bb.1
486    liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $lr
487
488    $sp = frame-setup t2STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r4, killed $r5, killed $r6, killed $r7, killed $r8, killed $r9, killed $r10, killed $lr
489    frame-setup CFI_INSTRUCTION def_cfa_offset 32
490    frame-setup CFI_INSTRUCTION offset $lr, -4
491    frame-setup CFI_INSTRUCTION offset $r10, -8
492    frame-setup CFI_INSTRUCTION offset $r9, -12
493    frame-setup CFI_INSTRUCTION offset $r8, -16
494    frame-setup CFI_INSTRUCTION offset $r7, -20
495    frame-setup CFI_INSTRUCTION offset $r6, -24
496    frame-setup CFI_INSTRUCTION offset $r5, -28
497    frame-setup CFI_INSTRUCTION offset $r4, -32
498    tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
499    t2IT 11, 8, implicit-def $itstate
500    $sp = frame-destroy t2LDMIA_RET $sp, 11 /* CC::lt */, killed $cpsr, def $r4, def $r5, def $r6, def $r7, def $r8, def $r9, def $r10, def $pc, implicit killed $itstate
501
502  bb.1:
503    liveins: $r0, $r1, $r2, $r3
504
505    renamable $r12 = t2LDRi12 $sp, 32, 14 /* CC::al */, $noreg :: (load (s32) from %fixed-stack.0, align 8)
506    $r9 = tMOVr killed $r2, 14 /* CC::al */, $noreg
507    renamable $r8 = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
508    t2B %bb.2, 14 /* CC::al */, $noreg
509
510  bb.8:
511    successors: %bb.9(0x04000000), %bb.2(0x7c000000)
512    liveins: $r0, $r1, $r3, $r8, $r9, $r12
513
514    renamable $r8 = nuw nsw t2ADDri killed renamable $r8, 1, 14 /* CC::al */, $noreg, $noreg
515    renamable $r3, dead $cpsr = tADDi8 killed renamable $r3, 1, 14 /* CC::al */, $noreg
516    tCMPhir renamable $r8, renamable $r0, 14 /* CC::al */, $noreg, implicit-def $cpsr
517    renamable $r12 = t2ADDri killed renamable $r12, 1, 14 /* CC::al */, $noreg, $noreg
518    t2Bcc %bb.9, 0 /* CC::eq */, killed $cpsr
519
520  bb.2:
521    successors: %bb.3(0x50000000), %bb.8(0x30000000)
522    liveins: $r0, $r1, $r3, $r8, $r9, $r12
523
524    tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
525    t2Bcc %bb.8, 11 /* CC::lt */, killed $cpsr
526
527  bb.3:
528    liveins: $r0, $r1, $r3, $r8, $r9, $r12
529
530    renamable $r4, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
531    $r10 = tMOVr $r12, 14 /* CC::al */, $noreg
532    $r2 = tMOVr $r3, 14 /* CC::al */, $noreg
533    t2B %bb.4, 14 /* CC::al */, $noreg
534
535  bb.7:
536    successors: %bb.8(0x04000000), %bb.4(0x7c000000)
537    liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12
538
539    renamable $r4, dead $cpsr = nuw nsw tADDi8 killed renamable $r4, 1, 14 /* CC::al */, $noreg
540    renamable $r2, dead $cpsr = tADDi8 killed renamable $r2, 1, 14 /* CC::al */, $noreg
541    tCMPr renamable $r4, renamable $r1, 14 /* CC::al */, $noreg, implicit-def $cpsr
542    renamable $r10 = t2ADDri killed renamable $r10, 1, 14 /* CC::al */, $noreg, $noreg
543    t2Bcc %bb.8, 0 /* CC::eq */, killed $cpsr
544
545  bb.4:
546    successors: %bb.5(0x50000000), %bb.7(0x30000000)
547    liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12
548
549    renamable $lr = t2WhileLoopStartLR killed renamable $r9, %bb.7, implicit-def dead $cpsr
550
551  bb.5:
552    liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12
553
554    $r5 = tMOVr $r10, 14 /* CC::al */, $noreg
555    $r6 = tMOVr $r2, 14 /* CC::al */, $noreg
556    t2B %bb.6, 14 /* CC::al */, $noreg
557
558  bb.6:
559    successors: %bb.6(0x7c000000), %bb.7(0x04000000)
560    liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r8, $r9, $r10, $r12
561
562    tSTRi killed $r0, $r1, 0, 14 /* CC::al */, $noreg
563    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.6, implicit-def dead $cpsr
564    t2B %bb.7, 14 /* CC::al */, $noreg
565
566  bb.9:
567    $sp = frame-destroy t2LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r4, def $r5, def $r6, def $r7, def $r8, def $r9, def $r10, def $pc
568
569...
570---
571name:            backwards_branch_forwards_wls
572tracksRegLiveness: true
573body:             |
574  ; CHECK-LABEL: name: backwards_branch_forwards_wls
575  ; CHECK: bb.0:
576  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
577  ; CHECK-NEXT:   liveins: $r0, $r1, $r2, $lr
578  ; CHECK-NEXT: {{  $}}
579  ; CHECK-NEXT:   tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
580  ; CHECK-NEXT:   t2IT 11, 8, implicit-def $itstate
581  ; CHECK-NEXT:   frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
582  ; CHECK-NEXT: {{  $}}
583  ; CHECK-NEXT: bb.1:
584  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.5(0x40000000)
585  ; CHECK-NEXT:   liveins: $r0, $r1, $r2
586  ; CHECK-NEXT: {{  $}}
587  ; CHECK-NEXT:   $lr = t2WhileLoopStartLR killed renamable $r0, %bb.2, implicit-def dead $cpsr
588  ; CHECK-NEXT:   t2B %bb.5, 14 /* CC::al */, $noreg
589  ; CHECK-NEXT: {{  $}}
590  ; CHECK-NEXT: bb.2:
591  ; CHECK-NEXT:   successors: %bb.4(0x40000000), %bb.3(0x40000000)
592  ; CHECK-NEXT:   liveins: $lr, $r0, $r1, $r2
593  ; CHECK-NEXT: {{  $}}
594  ; CHECK-NEXT:   $lr = t2WhileLoopStartLR killed renamable $r0, %bb.3, implicit-def dead $cpsr
595  ; CHECK-NEXT:   t2B %bb.4, 14 /* CC::al */, $noreg
596  ; CHECK-NEXT: {{  $}}
597  ; CHECK-NEXT: bb.3:
598  ; CHECK-NEXT:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
599  ; CHECK-NEXT: {{  $}}
600  ; CHECK-NEXT: bb.4:
601  ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.4(0x40000000)
602  ; CHECK-NEXT:   liveins: $lr, $r1, $r2
603  ; CHECK-NEXT: {{  $}}
604  ; CHECK-NEXT:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr
605  ; CHECK-NEXT:   t2B %bb.3, 14 /* CC::al */, $noreg
606  ; CHECK-NEXT: {{  $}}
607  ; CHECK-NEXT: bb.5:
608  ; CHECK-NEXT:   successors: %bb.5(0x40000000), %bb.2(0x40000000)
609  ; CHECK-NEXT:   liveins: $lr, $r1, $r2
610  ; CHECK-NEXT: {{  $}}
611  ; CHECK-NEXT:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr
612  ; CHECK-NEXT:   t2B %bb.2, 14 /* CC::al */, $noreg
613  bb.0:
614    successors: %bb.2
615    liveins: $r0, $r1, $r2, $lr
616
617    tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
618    t2IT 11, 8, implicit-def $itstate
619    frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
620
621  bb.2:
622    successors: %bb.3, %bb.5
623    liveins: $r0, $r1, $r2
624
625    $lr = t2WhileLoopStartLR killed renamable $r0, %bb.3, implicit-def dead $cpsr
626    t2B %bb.5, 14 /* CC::al */, $noreg
627
628  bb.1:
629    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
630
631  bb.3:
632    successors: %bb.4, %bb.1
633    liveins: $lr, $r0, $r1, $r2
634
635    $lr = t2WhileLoopStartLR killed renamable $r0, %bb.1, implicit-def dead $cpsr
636    t2B %bb.4, 14 /* CC::al */, $noreg
637
638  bb.4:
639    successors: %bb.1, %bb.4
640    liveins: $lr, $r1, $r2
641
642    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr
643    t2B %bb.1, 14 /* CC::al */, $noreg
644
645  bb.5:
646    successors: %bb.5, %bb.3
647    liveins: $lr, $r1, $r2
648
649    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr
650    t2B %bb.3, 14 /* CC::al */, $noreg
651
652...
653---
654name:            multiple_predecessors
655tracksRegLiveness: true
656body:             |
657  ; CHECK-LABEL: name: multiple_predecessors
658  ; CHECK: bb.0:
659  ; CHECK-NEXT:   successors: %bb.3(0x55555555), %bb.2(0x2aaaaaab)
660  ; CHECK-NEXT:   liveins: $r0, $r1, $r2, $r7, $lr
661  ; CHECK-NEXT: {{  $}}
662  ; CHECK-NEXT:   frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
663  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 8
664  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $lr, -4
665  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION offset $r7, -8
666  ; CHECK-NEXT:   $sp = frame-setup tSUBspi $sp, 1, 14 /* CC::al */, $noreg
667  ; CHECK-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 12
668  ; CHECK-NEXT:   tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
669  ; CHECK-NEXT:   t2IT 0, 8, implicit-def $itstate
670  ; CHECK-NEXT:   tCMPi8 killed renamable $r1, 8, 0 /* CC::eq */, killed $cpsr, implicit-def $cpsr, implicit killed $itstate
671  ; CHECK-NEXT:   t2Bcc %bb.2, 0 /* CC::eq */, killed $cpsr
672  ; CHECK-NEXT:   t2B %bb.3, 14 /* CC::al */, $noreg
673  ; CHECK-NEXT: {{  $}}
674  ; CHECK-NEXT: bb.1:
675  ; CHECK-NEXT:   successors: %bb.6(0x40000000), %bb.3(0x40000000)
676  ; CHECK-NEXT:   liveins: $r0, $r1, $r2
677  ; CHECK-NEXT: {{  $}}
678  ; CHECK-NEXT:   renamable $lr = t2WhileLoopStartLR killed renamable $r2, %bb.3, implicit-def dead $cpsr
679  ; CHECK-NEXT:   t2B %bb.6, 14 /* CC::al */, $noreg
680  ; CHECK-NEXT: {{  $}}
681  ; CHECK-NEXT: bb.2:
682  ; CHECK-NEXT:   successors: %bb.4(0x40000000), %bb.3(0x40000000)
683  ; CHECK-NEXT:   liveins: $r2
684  ; CHECK-NEXT: {{  $}}
685  ; CHECK-NEXT:   renamable $lr = t2WhileLoopStartLR renamable $r2, %bb.3, implicit-def dead $cpsr
686  ; CHECK-NEXT:   t2B %bb.4, 14 /* CC::al */, $noreg
687  ; CHECK-NEXT: {{  $}}
688  ; CHECK-NEXT: bb.3:
689  ; CHECK-NEXT:   $sp = frame-destroy tADDspi $sp, 1, 14 /* CC::al */, $noreg
690  ; CHECK-NEXT:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit undef $r0
691  ; CHECK-NEXT: {{  $}}
692  ; CHECK-NEXT: bb.4:
693  ; CHECK-NEXT:   successors: %bb.5(0x80000000)
694  ; CHECK-NEXT:   liveins: $lr, $r2
695  ; CHECK-NEXT: {{  $}}
696  ; CHECK-NEXT:   renamable $r3, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
697  ; CHECK-NEXT:   renamable $r1 = t2ADDri $sp, 2, 14 /* CC::al */, $noreg, $noreg
698  ; CHECK-NEXT:   renamable $r0 = IMPLICIT_DEF
699  ; CHECK-NEXT: {{  $}}
700  ; CHECK-NEXT: bb.5:
701  ; CHECK-NEXT:   successors: %bb.5(0x7c000000), %bb.1(0x04000000)
702  ; CHECK-NEXT:   liveins: $lr, $r0, $r1, $r2, $r3
703  ; CHECK-NEXT: {{  $}}
704  ; CHECK-NEXT:   renamable $q0, renamable $r0 = MVE_VIWDUPu16 killed renamable $r0, renamable $r3, 1, 0, $noreg, $noreg, undef renamable $q0
705  ; CHECK-NEXT:   MVE_VSTRH16_rq undef renamable $q0, renamable $r1, killed renamable $q0, 0, $noreg, $noreg
706  ; CHECK-NEXT:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr
707  ; CHECK-NEXT:   t2B %bb.1, 14 /* CC::al */, $noreg
708  ; CHECK-NEXT: {{  $}}
709  ; CHECK-NEXT: bb.6:
710  ; CHECK-NEXT:   successors: %bb.7(0x80000000)
711  ; CHECK-NEXT:   liveins: $lr, $r0, $r1
712  ; CHECK-NEXT: {{  $}}
713  ; CHECK-NEXT:   renamable $r3, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
714  ; CHECK-NEXT: {{  $}}
715  ; CHECK-NEXT: bb.7:
716  ; CHECK-NEXT:   successors: %bb.7(0x7c000000), %bb.3(0x04000000)
717  ; CHECK-NEXT:   liveins: $lr, $r0, $r1, $r3
718  ; CHECK-NEXT: {{  $}}
719  ; CHECK-NEXT:   renamable $q0, renamable $r0 = MVE_VIWDUPu16 killed renamable $r0, renamable $r3, 2, 0, $noreg, $noreg, undef renamable $q0
720  ; CHECK-NEXT:   MVE_VSTRH16_rq undef renamable $q0, renamable $r1, killed renamable $q0, 0, $noreg, $noreg
721  ; CHECK-NEXT:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.7, implicit-def dead $cpsr
722  ; CHECK-NEXT:   t2B %bb.3, 14 /* CC::al */, $noreg
723  bb.0:
724    successors: %bb.7(0x80000000), %bb.1(0x40000000)
725    liveins: $r0, $r1, $r2, $r7, $lr
726
727    frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
728    frame-setup CFI_INSTRUCTION def_cfa_offset 8
729    frame-setup CFI_INSTRUCTION offset $lr, -4
730    frame-setup CFI_INSTRUCTION offset $r7, -8
731    $sp = frame-setup tSUBspi $sp, 1, 14 /* CC::al */, $noreg
732    frame-setup CFI_INSTRUCTION def_cfa_offset 12
733    tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
734    t2IT 0, 8, implicit-def $itstate
735    tCMPi8 killed renamable $r1, 8, 0 /* CC::eq */, killed $cpsr, implicit-def $cpsr, implicit killed $itstate
736    t2Bcc %bb.1, 0 /* CC::eq */, killed $cpsr
737
738  bb.7:
739    $sp = frame-destroy tADDspi $sp, 1, 14 /* CC::al */, $noreg
740    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit undef $r0
741
742  bb.1:
743    successors: %bb.3(0x40000000), %bb.7(0x40000000)
744    liveins: $r2
745
746    renamable $lr = t2WhileLoopStartLR renamable $r2, %bb.7, implicit-def dead $cpsr
747    t2B %bb.3, 14 /* CC::al */, $noreg
748
749  bb.3:
750    successors: %bb.4(0x80000000)
751    liveins: $lr, $r2
752
753    renamable $r3, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
754    renamable $r1 = t2ADDri $sp, 2, 14 /* CC::al */, $noreg, $noreg
755    renamable $r0 = IMPLICIT_DEF
756
757  bb.4:
758    successors: %bb.4(0x7c000000), %bb.2(0x04000000)
759    liveins: $lr, $r0, $r1, $r2, $r3
760
761    renamable $q0, renamable $r0 = MVE_VIWDUPu16 killed renamable $r0, renamable $r3, 1, 0, $noreg, $noreg, undef renamable $q0
762    MVE_VSTRH16_rq undef renamable $q0, renamable $r1, killed renamable $q0, 0, $noreg, $noreg
763    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr
764    t2B %bb.2, 14 /* CC::al */, $noreg
765
766  bb.2:
767    successors: %bb.5(0x40000000), %bb.7(0x40000000)
768    liveins: $r0, $r1, $r2
769
770    renamable $lr = t2WhileLoopStartLR killed renamable $r2, %bb.7, implicit-def dead $cpsr
771    t2B %bb.5, 14 /* CC::al */, $noreg
772
773  bb.5:
774    successors: %bb.6(0x80000000)
775    liveins: $lr, $r0, $r1
776
777    renamable $r3, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
778
779  bb.6:
780    successors: %bb.6(0x7c000000), %bb.7(0x04000000)
781    liveins: $lr, $r0, $r1, $r3
782
783    renamable $q0, renamable $r0 = MVE_VIWDUPu16 killed renamable $r0, renamable $r3, 2, 0, $noreg, $noreg, undef renamable $q0
784    MVE_VSTRH16_rq undef renamable $q0, renamable $r1, killed renamable $q0, 0, $noreg, $noreg
785    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.6, implicit-def dead $cpsr
786    t2B %bb.7, 14 /* CC::al */, $noreg
787
788...
789---
790name:            jump_table
791tracksRegLiveness: true
792jumpTable:
793  kind:            inline
794  entries:
795    - id:              0
796      blocks:          [ '%bb.3', '%bb.1' ]
797body:             |
798  ; CHECK-LABEL: name: jump_table
799  ; CHECK: bb.0:
800  ; CHECK-NEXT:   successors: %bb.3(0x80000000)
801  ; CHECK-NEXT:   liveins: $r0, $r1, $r2, $lr
802  ; CHECK-NEXT: {{  $}}
803  ; CHECK-NEXT:   tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
804  ; CHECK-NEXT:   t2IT 11, 8, implicit-def $itstate
805  ; CHECK-NEXT:   frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
806  ; CHECK-NEXT: {{  $}}
807  ; CHECK-NEXT: bb.1:
808  ; CHECK-NEXT:   successors: %bb.4(0x80000000)
809  ; CHECK-NEXT:   liveins: $r0, $r1, $r2
810  ; CHECK-NEXT: {{  $}}
811  ; CHECK-NEXT:   $lr = t2WhileLoopStartLR killed renamable $r0, %bb.2, implicit-def dead $cpsr
812  ; CHECK-NEXT:   t2B %bb.4, 14 /* CC::al */, $noreg
813  ; CHECK-NEXT: {{  $}}
814  ; CHECK-NEXT: bb.2:
815  ; CHECK-NEXT:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
816  ; CHECK-NEXT: {{  $}}
817  ; CHECK-NEXT: bb.3:
818  ; CHECK-NEXT:   successors: %bb.1(0x7c000000), %bb.2(0x04000000)
819  ; CHECK-NEXT:   liveins: $r0
820  ; CHECK-NEXT: {{  $}}
821  ; CHECK-NEXT:   renamable $r5 = t2LEApcrelJT %jump-table.0, 14 /* CC::al */, $noreg
822  ; CHECK-NEXT:   renamable $r5 = t2ADDrs killed renamable $r5, renamable $r0, 18, 14 /* CC::al */, $noreg, $noreg
823  ; CHECK-NEXT:   t2BR_JT killed renamable $r5, killed renamable $r0, %jump-table.0
824  ; CHECK-NEXT: {{  $}}
825  ; CHECK-NEXT: bb.4:
826  ; CHECK-NEXT:   successors: %bb.4(0x7c000000), %bb.2(0x04000000)
827  ; CHECK-NEXT:   liveins: $lr, $r1, $r2
828  ; CHECK-NEXT: {{  $}}
829  ; CHECK-NEXT:   renamable $r0 = tLDRi renamable $r2, 0, 14 /* CC::al */, $noreg
830  ; CHECK-NEXT:   tSTRi killed renamable $r0, renamable $r1, 0, 14 /* CC::al */, $noreg
831  ; CHECK-NEXT:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr
832  ; CHECK-NEXT:   t2B %bb.2, 14 /* CC::al */, $noreg
833  bb.0:
834    successors: %bb.2(0x80000000)
835    liveins: $r0, $r1, $r2, $lr
836
837    tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
838    t2IT 11, 8, implicit-def $itstate
839    frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
840
841  bb.1:
842    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
843
844  bb.2:
845    successors: %bb.3(0x7c000000), %bb.1(0x04000000)
846    liveins: $r0
847
848    renamable $r5 = t2LEApcrelJT %jump-table.0, 14 /* CC::al */, $noreg
849    renamable $r5 = t2ADDrs killed renamable $r5, renamable $r0, 18, 14 /* CC::al */, $noreg, $noreg
850    t2BR_JT killed renamable $r5, killed renamable $r0, %jump-table.0
851
852  bb.3:
853    successors: %bb.4(0x80000000)
854    liveins: $r0, $r1, $r2
855
856    $lr = t2WhileLoopStartLR killed renamable $r0, %bb.1, implicit-def dead $cpsr
857
858  bb.4:
859    successors: %bb.4(0x7c000000), %bb.1(0x04000000)
860    liveins: $lr, $r1, $r2
861
862    renamable $r0 = tLDRi renamable $r2, 0, 14 /* CC::al */, $noreg
863    tSTRi killed renamable $r0, renamable $r1, 0, 14 /* CC::al */, $noreg
864    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr
865    t2B %bb.1, 14 /* CC::al */, $noreg
866
867...
868