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  declare dso_local i32 @g(...)
50
51  declare dso_local i32 @h(...)
52
53...
54---
55name:            backwards_branch
56body:             |
57  ; CHECK-LABEL: name: backwards_branch
58  ; CHECK: bb.0:
59  ; CHECK:   successors: %bb.1(0x80000000)
60  ; CHECK:   tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
61  ; CHECK:   t2IT 11, 8, implicit-def $itstate
62  ; CHECK:   frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
63  ; CHECK: bb.1:
64  ; CHECK:   successors: %bb.3(0x80000000)
65  ; CHECK:   $lr = t2WhileLoopStartLR killed renamable $r0, %bb.2, implicit-def dead $cpsr
66  ; CHECK:   t2B %bb.3, 14 /* CC::al */, $noreg
67  ; CHECK: bb.2:
68  ; CHECK:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
69  ; CHECK: bb.3:
70  ; CHECK:   successors: %bb.3(0x7c000000), %bb.2(0x04000000)
71  ; CHECK:   renamable $r0 = tLDRi renamable $r2, 0, 14 /* CC::al */, $noreg
72  ; CHECK:   tSTRi killed renamable $r0, renamable $r1, 0, 14 /* CC::al */, $noreg
73  ; CHECK:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.3, implicit-def dead $cpsr
74  ; CHECK:   t2B %bb.2, 14 /* CC::al */, $noreg
75  bb.0:
76    successors: %bb.2(0x80000000)
77    liveins: $r0, $r1, $r2, $lr
78
79    tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
80    t2IT 11, 8, implicit-def $itstate
81    frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
82
83  bb.1:
84    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
85
86  bb.2:
87    successors: %bb.3(0x80000000)
88    liveins: $r0, $r1, $r2
89
90    $lr = t2WhileLoopStartLR killed renamable $r0, %bb.1, implicit-def dead $cpsr
91
92  bb.3:
93    successors: %bb.3(0x7c000000), %bb.1(0x04000000)
94    liveins: $lr, $r1, $r2
95
96    renamable $r0 = tLDRi renamable $r2, 0, 14 /* CC::al */, $noreg
97    tSTRi killed renamable $r0, renamable $r1, 0, 14 /* CC::al */, $noreg
98    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.3, implicit-def dead $cpsr
99    t2B %bb.1, 14 /* CC::al */, $noreg
100
101...
102---
103name:            backwards_branch_entry_block
104body:             |
105  ; CHECK-LABEL: name: backwards_branch_entry_block
106  ; CHECK: bb.0:
107  ; CHECK:   successors: %bb.2(0x80000000)
108  ; CHECK:   tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
109  ; CHECK:   t2IT 11, 8, implicit-def $itstate
110  ; CHECK:   frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
111  ; CHECK: bb.1:
112  ; CHECK:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
113  ; CHECK: bb.2:
114  ; CHECK:   successors: %bb.3(0x80000000)
115  ; CHECK:   $lr = t2WhileLoopStartLR killed renamable $r0, %bb.0, implicit-def dead $cpsr
116  ; CHECK: bb.3:
117  ; CHECK:   successors: %bb.3(0x7c000000), %bb.1(0x04000000)
118  ; CHECK:   renamable $r0 = tLDRi renamable $r2, 0, 14 /* CC::al */, $noreg
119  ; CHECK:   tSTRi killed renamable $r0, renamable $r1, 0, 14 /* CC::al */, $noreg
120  ; CHECK:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.3, implicit-def dead $cpsr
121  ; CHECK:   t2B %bb.1, 14 /* CC::al */, $noreg
122  bb.0:
123    successors: %bb.2(0x80000000)
124    liveins: $r0, $r1, $r2, $lr
125
126    tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
127    t2IT 11, 8, implicit-def $itstate
128    frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
129
130  bb.1:
131    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
132
133  bb.2:
134    successors: %bb.3(0x80000000)
135    liveins: $r0, $r1, $r2
136
137    $lr = t2WhileLoopStartLR killed renamable $r0, %bb.0, implicit-def dead $cpsr
138
139  bb.3:
140    successors: %bb.3(0x7c000000), %bb.1(0x04000000)
141    liveins: $lr, $r1, $r2
142
143    renamable $r0 = tLDRi renamable $r2, 0, 14 /* CC::al */, $noreg
144    tSTRi killed renamable $r0, renamable $r1, 0, 14 /* CC::al */, $noreg
145    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.3, implicit-def dead $cpsr
146    t2B %bb.1, 14 /* CC::al */, $noreg
147
148...
149---
150name:            backwards_branch_backwards_wls
151body:             |
152  ; CHECK-LABEL: name: backwards_branch_backwards_wls
153  ; CHECK: bb.0:
154  ; CHECK:   successors: %bb.2(0x80000000)
155  ; CHECK:   tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
156  ; CHECK:   t2IT 11, 8, implicit-def $itstate
157  ; CHECK:   frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
158  ; CHECK: bb.1:
159  ; CHECK:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
160  ; CHECK: bb.2:
161  ; CHECK:   successors: %bb.3(0x40000000), %bb.5(0x40000000)
162  ; CHECK:   $lr = t2WhileLoopStartLR killed renamable $r0, %bb.3, implicit-def dead $cpsr
163  ; CHECK:   t2B %bb.5, 14 /* CC::al */, $noreg
164  ; CHECK: bb.3:
165  ; CHECK:   successors: %bb.1(0x7c000000), %bb.4(0x04000000)
166  ; CHECK:   $lr = t2WhileLoopStartLR killed renamable $r0, %bb.1, implicit-def dead $cpsr
167  ; CHECK:   t2B %bb.4, 14 /* CC::al */, $noreg
168  ; CHECK: bb.4:
169  ; CHECK:   successors: %bb.1(0x40000000), %bb.4(0x40000000)
170  ; CHECK:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr
171  ; CHECK:   t2B %bb.1, 14 /* CC::al */, $noreg
172  ; CHECK: bb.5:
173  ; CHECK:   successors: %bb.5(0x40000000), %bb.3(0x40000000)
174  ; CHECK:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr
175  ; CHECK:   t2B %bb.3, 14 /* CC::al */, $noreg
176  bb.0:
177    successors: %bb.2(0x80000000)
178    liveins: $r0, $r1, $r2, $lr
179
180    tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
181    t2IT 11, 8, implicit-def $itstate
182    frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
183
184  bb.1:
185    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
186
187  bb.2:
188    successors: %bb.3(0x80000000), %bb.5(0x80000000)
189    liveins: $r0, $r1, $r2
190
191    $lr = t2WhileLoopStartLR killed renamable $r0, %bb.3, implicit-def dead $cpsr
192    t2B %bb.5, 14 /* CC::al */, $noreg
193
194  bb.3:
195    successors: %bb.1(0x7c000000), %bb.4(0x04000000)
196    liveins: $lr, $r1, $r2
197
198    $lr = t2WhileLoopStartLR killed renamable $r0, %bb.1, implicit-def dead $cpsr
199    t2B %bb.4, 14 /* CC::al */, $noreg
200
201  bb.4:
202    successors: %bb.1, %bb.4
203    liveins: $lr, $r1, $r2
204
205    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr
206    t2B %bb.1, 14 /* CC::al */, $noreg
207
208  bb.5:
209    successors: %bb.5, %bb.3
210    liveins: $lr, $r1, $r2
211
212    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr
213    t2B %bb.3, 14 /* CC::al */, $noreg
214...
215---
216name:            no_predecessor
217body:             |
218  ; CHECK-LABEL: name: no_predecessor
219  ; CHECK: bb.0:
220  ; CHECK:   successors: %bb.2(0x30000000), %bb.1(0x50000000)
221  ; CHECK:   frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r4, killed $r5, $r7, killed $lr, implicit-def $sp, implicit $sp
222  ; CHECK:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
223  ; CHECK:   frame-setup CFI_INSTRUCTION offset $lr, -4
224  ; CHECK:   frame-setup CFI_INSTRUCTION offset $r7, -8
225  ; CHECK:   frame-setup CFI_INSTRUCTION offset $r5, -12
226  ; CHECK:   frame-setup CFI_INSTRUCTION offset $r4, -16
227  ; CHECK:   $r7 = frame-setup tADDrSPi $sp, 2, 14 /* CC::al */, $noreg
228  ; CHECK:   frame-setup CFI_INSTRUCTION def_cfa $r7, 8
229  ; CHECK:   $r4 = tMOVr killed $r0, 14 /* CC::al */, $noreg
230  ; CHECK:   tBL 14 /* CC::al */, $noreg, @g, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $r0
231  ; CHECK:   tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
232  ; CHECK:   t2Bcc %bb.2, 0 /* CC::eq */, killed $cpsr
233  ; CHECK: bb.1:
234  ; CHECK:   successors: %bb.4(0x80000000)
235  ; CHECK:   renamable $r0, dead $cpsr = tMOVi8 4, 14 /* CC::al */, $noreg
236  ; CHECK:   renamable $r5 = t2LDRSHi12 killed renamable $r0, 0, 14 /* CC::al */, $noreg
237  ; CHECK:   t2B %bb.4, 14 /* CC::al */, $noreg
238  ; CHECK: bb.2:
239  ; CHECK:   successors: %bb.4(0x80000000)
240  ; CHECK:   renamable $r5, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
241  ; CHECK:   t2B %bb.4, 14 /* CC::al */, $noreg
242  ; CHECK: bb.3:
243  ; CHECK:   successors: %bb.4(0x80000000)
244  ; CHECK:   $r0 = tMOVr $r5, 14 /* CC::al */, $noreg
245  ; CHECK:   tBL 14 /* CC::al */, $noreg, @h, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $r0, implicit-def $sp, implicit-def dead $r0
246  ; CHECK: bb.4:
247  ; CHECK:   successors: %bb.5(0x04000000), %bb.3(0x7c000000)
248  ; CHECK:   renamable $r0 = tLDRi renamable $r4, 0, 14 /* CC::al */, $noreg
249  ; CHECK:   tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
250  ; CHECK:   t2Bcc %bb.3, 1 /* CC::ne */, killed $cpsr
251  ; CHECK: bb.5:
252  ; CHECK:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r4, def $r5, def $r7, def $pc
253  bb.0:
254    successors: %bb.1(0x30000000), %bb.2(0x50000000)
255    liveins: $r0, $r4, $r5, $lr
256
257    frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r4, killed $r5, $r7, killed $lr, implicit-def $sp, implicit $sp
258    frame-setup CFI_INSTRUCTION def_cfa_offset 16
259    frame-setup CFI_INSTRUCTION offset $lr, -4
260    frame-setup CFI_INSTRUCTION offset $r7, -8
261    frame-setup CFI_INSTRUCTION offset $r5, -12
262    frame-setup CFI_INSTRUCTION offset $r4, -16
263    $r7 = frame-setup tADDrSPi $sp, 2, 14 /* CC::al */, $noreg
264    frame-setup CFI_INSTRUCTION def_cfa $r7, 8
265    $r4 = tMOVr killed $r0, 14 /* CC::al */, $noreg
266    tBL 14 /* CC::al */, $noreg, @g, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $r0
267    tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
268    t2Bcc %bb.1, 0 /* CC::eq */, killed $cpsr
269
270  bb.2:
271    successors: %bb.3(0x80000000)
272    liveins: $r4
273
274    renamable $r0, dead $cpsr = tMOVi8 4, 14 /* CC::al */, $noreg
275    renamable $r5 = t2LDRSHi12 killed renamable $r0, 0, 14 /* CC::al */, $noreg
276    t2B %bb.3, 14 /* CC::al */, $noreg
277
278  bb.1:
279    successors: %bb.3(0x80000000)
280    liveins: $r4
281
282    renamable $r5, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
283    t2B %bb.3, 14 /* CC::al */, $noreg
284
285  bb.4:
286    successors: %bb.3(0x80000000)
287    liveins: $r4, $r5
288
289    $r0 = tMOVr $r5, 14 /* CC::al */, $noreg
290    tBL 14 /* CC::al */, $noreg, @h, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $r0, implicit-def $sp, implicit-def dead $r0
291
292  bb.3:
293    successors: %bb.5(0x04000000), %bb.4(0x7c000000)
294    liveins: $r4, $r5
295
296    renamable $r0 = tLDRi renamable $r4, 0, 14 /* CC::al */, $noreg
297    tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
298    t2Bcc %bb.4, 1 /* CC::ne */, killed $cpsr
299
300  bb.5:
301    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r4, def $r5, def $r7, def $pc
302...
303---
304name:            nested_loops
305alignment:       4
306tracksRegLiveness: true
307liveins:
308  - { reg: '$r0' }
309  - { reg: '$r1' }
310  - { reg: '$r2' }
311  - { reg: '$r3' }
312frameInfo:
313  stackSize:       32
314  maxAlignment:    4
315  maxCallFrameSize: 0
316fixedStack:
317  - { id: 0, size: 4, alignment: 8, isImmutable: true }
318stack:
319  - { id: 0, type: spill-slot, offset: -4, size: 4, alignment: 4, callee-saved-register: '$lr',
320      callee-saved-restored: false }
321  - { id: 1, type: spill-slot, offset: -8, size: 4, alignment: 4, callee-saved-register: '$r10' }
322  - { id: 2, type: spill-slot, offset: -12, size: 4, alignment: 4, callee-saved-register: '$r9' }
323  - { id: 3, type: spill-slot, offset: -16, size: 4, alignment: 4, callee-saved-register: '$r8' }
324  - { id: 4, type: spill-slot, offset: -20, size: 4, alignment: 4, callee-saved-register: '$r7' }
325  - { id: 5, type: spill-slot, offset: -24, size: 4, alignment: 4, callee-saved-register: '$r6' }
326  - { id: 6, type: spill-slot, offset: -28, size: 4, alignment: 4, callee-saved-register: '$r5' }
327  - { id: 7, type: spill-slot, offset: -32, size: 4, alignment: 4, callee-saved-register: '$r4' }
328machineFunctionInfo: {}
329body:             |
330  ; CHECK-LABEL: name: nested_loops
331  ; CHECK: bb.0:
332  ; CHECK:   successors: %bb.1(0x80000000)
333  ; CHECK:   liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $lr
334  ; CHECK:   $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
335  ; CHECK:   frame-setup CFI_INSTRUCTION def_cfa_offset 32
336  ; CHECK:   frame-setup CFI_INSTRUCTION offset $lr, -4
337  ; CHECK:   frame-setup CFI_INSTRUCTION offset $r10, -8
338  ; CHECK:   frame-setup CFI_INSTRUCTION offset $r9, -12
339  ; CHECK:   frame-setup CFI_INSTRUCTION offset $r8, -16
340  ; CHECK:   frame-setup CFI_INSTRUCTION offset $r7, -20
341  ; CHECK:   frame-setup CFI_INSTRUCTION offset $r6, -24
342  ; CHECK:   frame-setup CFI_INSTRUCTION offset $r5, -28
343  ; CHECK:   frame-setup CFI_INSTRUCTION offset $r4, -32
344  ; CHECK:   tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
345  ; CHECK:   t2IT 11, 8, implicit-def $itstate
346  ; CHECK:   $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
347  ; CHECK: bb.1:
348  ; CHECK:   successors: %bb.3(0x80000000)
349  ; CHECK:   liveins: $r0, $r1, $r2, $r3
350  ; CHECK:   renamable $r12 = t2LDRi12 $sp, 32, 14 /* CC::al */, $noreg :: (load (s32) from %fixed-stack.0, align 8)
351  ; CHECK:   $r9 = tMOVr killed $r2, 14 /* CC::al */, $noreg
352  ; CHECK:   renamable $r8 = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
353  ; CHECK:   t2B %bb.3, 14 /* CC::al */, $noreg
354  ; CHECK: bb.2:
355  ; CHECK:   successors: %bb.9(0x04000000), %bb.3(0x7c000000)
356  ; CHECK:   liveins: $r0, $r1, $r3, $r8, $r9, $r12
357  ; CHECK:   renamable $r8 = nuw nsw t2ADDri killed renamable $r8, 1, 14 /* CC::al */, $noreg, $noreg
358  ; CHECK:   renamable $r3, dead $cpsr = tADDi8 killed renamable $r3, 1, 14 /* CC::al */, $noreg
359  ; CHECK:   tCMPhir renamable $r8, renamable $r0, 14 /* CC::al */, $noreg, implicit-def $cpsr
360  ; CHECK:   renamable $r12 = t2ADDri killed renamable $r12, 1, 14 /* CC::al */, $noreg, $noreg
361  ; CHECK:   t2Bcc %bb.9, 0 /* CC::eq */, killed $cpsr
362  ; CHECK: bb.3:
363  ; CHECK:   successors: %bb.4(0x50000000), %bb.2(0x30000000)
364  ; CHECK:   liveins: $r0, $r1, $r3, $r8, $r9, $r12
365  ; CHECK:   tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
366  ; CHECK:   t2Bcc %bb.2, 11 /* CC::lt */, killed $cpsr
367  ; CHECK: bb.4:
368  ; CHECK:   successors: %bb.5(0x80000000)
369  ; CHECK:   liveins: $r0, $r1, $r3, $r8, $r9, $r12
370  ; CHECK:   renamable $r4, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
371  ; CHECK:   $r10 = tMOVr $r12, 14 /* CC::al */, $noreg
372  ; CHECK:   $r2 = tMOVr $r3, 14 /* CC::al */, $noreg
373  ; CHECK:   t2B %bb.5, 14 /* CC::al */, $noreg
374  ; CHECK: bb.5:
375  ; CHECK:   successors: %bb.7(0x50000000), %bb.6(0x30000000)
376  ; CHECK:   liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12
377  ; CHECK:   renamable $lr = t2WhileLoopStartLR killed renamable $r9, %bb.6, implicit-def dead $cpsr
378  ; CHECK:   t2B %bb.7, 14 /* CC::al */, $noreg
379  ; CHECK: bb.6:
380  ; CHECK:   successors: %bb.2(0x04000000), %bb.5(0x7c000000)
381  ; CHECK:   liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12
382  ; CHECK:   renamable $r4, dead $cpsr = nuw nsw tADDi8 killed renamable $r4, 1, 14 /* CC::al */, $noreg
383  ; CHECK:   renamable $r2, dead $cpsr = tADDi8 killed renamable $r2, 1, 14 /* CC::al */, $noreg
384  ; CHECK:   tCMPr renamable $r4, renamable $r1, 14 /* CC::al */, $noreg, implicit-def $cpsr
385  ; CHECK:   renamable $r10 = t2ADDri killed renamable $r10, 1, 14 /* CC::al */, $noreg, $noreg
386  ; CHECK:   t2Bcc %bb.2, 0 /* CC::eq */, killed $cpsr
387  ; CHECK:   t2B %bb.5, 14 /* CC::al */, $noreg
388  ; CHECK: bb.7:
389  ; CHECK:   successors: %bb.8(0x80000000)
390  ; CHECK:   liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12
391  ; CHECK:   $r5 = tMOVr $r10, 14 /* CC::al */, $noreg
392  ; CHECK:   $r6 = tMOVr $r2, 14 /* CC::al */, $noreg
393  ; CHECK:   t2B %bb.8, 14 /* CC::al */, $noreg
394  ; CHECK: bb.8:
395  ; CHECK:   successors: %bb.8(0x7c000000), %bb.6(0x04000000)
396  ; CHECK:   liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r8, $r9, $r10, $r12
397  ; CHECK:   tSTRi killed $r0, $r1, 0, 14 /* CC::al */, $noreg
398  ; CHECK:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.8, implicit-def dead $cpsr
399  ; CHECK:   t2B %bb.6, 14 /* CC::al */, $noreg
400  ; CHECK: bb.9:
401  ; CHECK:   $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
402  bb.0:
403    successors: %bb.1
404    liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $lr
405
406    $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
407    frame-setup CFI_INSTRUCTION def_cfa_offset 32
408    frame-setup CFI_INSTRUCTION offset $lr, -4
409    frame-setup CFI_INSTRUCTION offset $r10, -8
410    frame-setup CFI_INSTRUCTION offset $r9, -12
411    frame-setup CFI_INSTRUCTION offset $r8, -16
412    frame-setup CFI_INSTRUCTION offset $r7, -20
413    frame-setup CFI_INSTRUCTION offset $r6, -24
414    frame-setup CFI_INSTRUCTION offset $r5, -28
415    frame-setup CFI_INSTRUCTION offset $r4, -32
416    tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
417    t2IT 11, 8, implicit-def $itstate
418    $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
419
420  bb.1:
421    liveins: $r0, $r1, $r2, $r3
422
423    renamable $r12 = t2LDRi12 $sp, 32, 14 /* CC::al */, $noreg :: (load (s32) from %fixed-stack.0, align 8)
424    $r9 = tMOVr killed $r2, 14 /* CC::al */, $noreg
425    renamable $r8 = t2MOVi 0, 14 /* CC::al */, $noreg, $noreg
426    t2B %bb.2, 14 /* CC::al */, $noreg
427
428  bb.8:
429    successors: %bb.9(0x04000000), %bb.2(0x7c000000)
430    liveins: $r0, $r1, $r3, $r8, $r9, $r12
431
432    renamable $r8 = nuw nsw t2ADDri killed renamable $r8, 1, 14 /* CC::al */, $noreg, $noreg
433    renamable $r3, dead $cpsr = tADDi8 killed renamable $r3, 1, 14 /* CC::al */, $noreg
434    tCMPhir renamable $r8, renamable $r0, 14 /* CC::al */, $noreg, implicit-def $cpsr
435    renamable $r12 = t2ADDri killed renamable $r12, 1, 14 /* CC::al */, $noreg, $noreg
436    t2Bcc %bb.9, 0 /* CC::eq */, killed $cpsr
437
438  bb.2:
439    successors: %bb.3(0x50000000), %bb.8(0x30000000)
440    liveins: $r0, $r1, $r3, $r8, $r9, $r12
441
442    tCMPi8 renamable $r1, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
443    t2Bcc %bb.8, 11 /* CC::lt */, killed $cpsr
444
445  bb.3:
446    liveins: $r0, $r1, $r3, $r8, $r9, $r12
447
448    renamable $r4, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
449    $r10 = tMOVr $r12, 14 /* CC::al */, $noreg
450    $r2 = tMOVr $r3, 14 /* CC::al */, $noreg
451    t2B %bb.4, 14 /* CC::al */, $noreg
452
453  bb.7:
454    successors: %bb.8(0x04000000), %bb.4(0x7c000000)
455    liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12
456
457    renamable $r4, dead $cpsr = nuw nsw tADDi8 killed renamable $r4, 1, 14 /* CC::al */, $noreg
458    renamable $r2, dead $cpsr = tADDi8 killed renamable $r2, 1, 14 /* CC::al */, $noreg
459    tCMPr renamable $r4, renamable $r1, 14 /* CC::al */, $noreg, implicit-def $cpsr
460    renamable $r10 = t2ADDri killed renamable $r10, 1, 14 /* CC::al */, $noreg, $noreg
461    t2Bcc %bb.8, 0 /* CC::eq */, killed $cpsr
462
463  bb.4:
464    successors: %bb.5(0x50000000), %bb.7(0x30000000)
465    liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12
466
467    renamable $lr = t2WhileLoopStartLR killed renamable $r9, %bb.7, implicit-def dead $cpsr
468
469  bb.5:
470    liveins: $r0, $r1, $r2, $r3, $r4, $r8, $r9, $r10, $r12
471
472    $r5 = tMOVr $r10, 14 /* CC::al */, $noreg
473    $r6 = tMOVr $r2, 14 /* CC::al */, $noreg
474    t2B %bb.6, 14 /* CC::al */, $noreg
475
476  bb.6:
477    successors: %bb.6(0x7c000000), %bb.7(0x04000000)
478    liveins: $lr, $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r8, $r9, $r10, $r12
479
480    tSTRi killed $r0, $r1, 0, 14 /* CC::al */, $noreg
481    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.6, implicit-def dead $cpsr
482    t2B %bb.7, 14 /* CC::al */, $noreg
483
484  bb.9:
485    $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
486
487...
488---
489name:            backwards_branch_forwards_wls
490body:             |
491  ; CHECK-LABEL: name: backwards_branch_forwards_wls
492  ; CHECK: bb.0:
493  ; CHECK:   successors: %bb.1(0x80000000)
494  ; CHECK:   tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
495  ; CHECK:   t2IT 11, 8, implicit-def $itstate
496  ; CHECK:   frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
497  ; CHECK: bb.1:
498  ; CHECK:   successors: %bb.2(0x40000000), %bb.5(0x40000000)
499  ; CHECK:   $lr = t2WhileLoopStartLR killed renamable $r0, %bb.2, implicit-def dead $cpsr
500  ; CHECK:   t2B %bb.5, 14 /* CC::al */, $noreg
501  ; CHECK: bb.2:
502  ; CHECK:   successors: %bb.4(0x40000000), %bb.3(0x40000000)
503  ; CHECK:   $lr = t2WhileLoopStartLR killed renamable $r0, %bb.3, implicit-def dead $cpsr
504  ; CHECK:   t2B %bb.4, 14 /* CC::al */, $noreg
505  ; CHECK: bb.3:
506  ; CHECK:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
507  ; CHECK: bb.4:
508  ; CHECK:   successors: %bb.3(0x40000000), %bb.4(0x40000000)
509  ; CHECK:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr
510  ; CHECK:   t2B %bb.3, 14 /* CC::al */, $noreg
511  ; CHECK: bb.5:
512  ; CHECK:   successors: %bb.5(0x40000000), %bb.2(0x40000000)
513  ; CHECK:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr
514  ; CHECK:   t2B %bb.2, 14 /* CC::al */, $noreg
515  bb.0:
516    successors: %bb.2
517    liveins: $r0, $r1, $r2, $lr
518
519    tCMPi8 renamable $r0, 1, 14 /* CC::al */, $noreg, implicit-def $cpsr
520    t2IT 11, 8, implicit-def $itstate
521    frame-destroy tPOP_RET 11 /* CC::lt */, killed $cpsr, def $r7, def $pc, implicit killed $itstate
522
523  bb.2:
524    successors: %bb.3, %bb.5
525    liveins: $r0, $r1, $r2
526
527    $lr = t2WhileLoopStartLR killed renamable $r0, %bb.3, implicit-def dead $cpsr
528    t2B %bb.5, 14 /* CC::al */, $noreg
529
530  bb.1:
531    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
532
533  bb.3:
534    successors: %bb.4, %bb.1
535    liveins: $lr, $r1, $r2
536
537    $lr = t2WhileLoopStartLR killed renamable $r0, %bb.1, implicit-def dead $cpsr
538    t2B %bb.4, 14 /* CC::al */, $noreg
539
540  bb.4:
541    successors: %bb.1, %bb.4
542    liveins: $lr, $r1, $r2
543
544    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr
545    t2B %bb.1, 14 /* CC::al */, $noreg
546
547  bb.5:
548    successors: %bb.5, %bb.3
549    liveins: $lr, $r1, $r2
550
551    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr
552    t2B %bb.3, 14 /* CC::al */, $noreg
553
554...
555---
556name:            multiple_predecessors
557body:             |
558  ; CHECK-LABEL: name: multiple_predecessors
559  ; CHECK: bb.0:
560  ; CHECK:   successors: %bb.3(0x55555555), %bb.2(0x2aaaaaab)
561  ; CHECK:   frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
562  ; CHECK:   frame-setup CFI_INSTRUCTION def_cfa_offset 8
563  ; CHECK:   frame-setup CFI_INSTRUCTION offset $lr, -4
564  ; CHECK:   frame-setup CFI_INSTRUCTION offset $r7, -8
565  ; CHECK:   $sp = frame-setup tSUBspi $sp, 1, 14 /* CC::al */, $noreg
566  ; CHECK:   frame-setup CFI_INSTRUCTION def_cfa_offset 12
567  ; CHECK:   tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
568  ; CHECK:   t2IT 0, 8, implicit-def $itstate
569  ; CHECK:   tCMPi8 killed renamable $r1, 8, 0 /* CC::eq */, killed $cpsr, implicit-def $cpsr, implicit killed $itstate
570  ; CHECK:   t2Bcc %bb.2, 0 /* CC::eq */, killed $cpsr
571  ; CHECK:   t2B %bb.3, 14 /* CC::al */, $noreg
572  ; CHECK: bb.1:
573  ; CHECK:   successors: %bb.6(0x40000000), %bb.3(0x40000000)
574  ; CHECK:   renamable $lr = t2WhileLoopStartLR killed renamable $r2, %bb.3, implicit-def dead $cpsr
575  ; CHECK:   t2B %bb.6, 14 /* CC::al */, $noreg
576  ; CHECK: bb.2:
577  ; CHECK:   successors: %bb.4(0x40000000), %bb.3(0x40000000)
578  ; CHECK:   renamable $lr = t2WhileLoopStartLR renamable $r2, %bb.3, implicit-def dead $cpsr
579  ; CHECK:   t2B %bb.4, 14 /* CC::al */, $noreg
580  ; CHECK: bb.3:
581  ; CHECK:   $sp = frame-destroy tADDspi $sp, 1, 14 /* CC::al */, $noreg
582  ; CHECK:   frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit undef $r0
583  ; CHECK: bb.4:
584  ; CHECK:   successors: %bb.5(0x80000000)
585  ; CHECK:   renamable $r3, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
586  ; CHECK:   renamable $r1 = t2ADDri $sp, 2, 14 /* CC::al */, $noreg, $noreg
587  ; CHECK:   renamable $r0 = IMPLICIT_DEF
588  ; CHECK: bb.5:
589  ; CHECK:   successors: %bb.5(0x7c000000), %bb.1(0x04000000)
590  ; CHECK:   renamable $q0, renamable $r0 = MVE_VIWDUPu16 killed renamable $r0, renamable $r3, 1, 0, $noreg, undef renamable $q0
591  ; CHECK:   MVE_VSTRH16_rq undef renamable $q0, renamable $r1, killed renamable $q0, 0, $noreg
592  ; CHECK:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.5, implicit-def dead $cpsr
593  ; CHECK:   t2B %bb.1, 14 /* CC::al */, $noreg
594  ; CHECK: bb.6:
595  ; CHECK:   successors: %bb.7(0x80000000)
596  ; CHECK:   renamable $r3, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
597  ; CHECK: bb.7:
598  ; CHECK:   successors: %bb.7(0x7c000000), %bb.3(0x04000000)
599  ; CHECK:   renamable $q0, renamable $r0 = MVE_VIWDUPu16 killed renamable $r0, renamable $r3, 2, 0, $noreg, undef renamable $q0
600  ; CHECK:   MVE_VSTRH16_rq undef renamable $q0, renamable $r1, killed renamable $q0, 0, $noreg
601  ; CHECK:   renamable $lr = t2LoopEndDec killed renamable $lr, %bb.7, implicit-def dead $cpsr
602  ; CHECK:   t2B %bb.3, 14 /* CC::al */, $noreg
603  bb.0:
604    successors: %bb.7(0x80000000), %bb.1(0x40000000)
605    liveins: $r0, $r1, $r2, $r7, $lr
606
607    frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp
608    frame-setup CFI_INSTRUCTION def_cfa_offset 8
609    frame-setup CFI_INSTRUCTION offset $lr, -4
610    frame-setup CFI_INSTRUCTION offset $r7, -8
611    $sp = frame-setup tSUBspi $sp, 1, 14 /* CC::al */, $noreg
612    frame-setup CFI_INSTRUCTION def_cfa_offset 12
613    tCMPi8 killed renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr
614    t2IT 0, 8, implicit-def $itstate
615    tCMPi8 killed renamable $r1, 8, 0 /* CC::eq */, killed $cpsr, implicit-def $cpsr, implicit killed $itstate
616    t2Bcc %bb.1, 0 /* CC::eq */, killed $cpsr
617
618  bb.7:
619    $sp = frame-destroy tADDspi $sp, 1, 14 /* CC::al */, $noreg
620    frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc, implicit undef $r0
621
622  bb.1:
623    successors: %bb.3(0x40000000), %bb.7(0x40000000)
624    liveins: $r2
625
626    renamable $lr = t2WhileLoopStartLR renamable $r2, %bb.7, implicit-def dead $cpsr
627    t2B %bb.3, 14 /* CC::al */, $noreg
628
629  bb.3:
630    successors: %bb.4(0x80000000)
631    liveins: $lr, $r2
632
633    renamable $r3, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
634    renamable $r1 = t2ADDri $sp, 2, 14 /* CC::al */, $noreg, $noreg
635    renamable $r0 = IMPLICIT_DEF
636
637  bb.4:
638    successors: %bb.4(0x7c000000), %bb.2(0x04000000)
639    liveins: $lr, $r0, $r1, $r2, $r3
640
641    renamable $q0, renamable $r0 = MVE_VIWDUPu16 killed renamable $r0, renamable $r3, 1, 0, $noreg, undef renamable $q0
642    MVE_VSTRH16_rq undef renamable $q0, renamable $r1, killed renamable $q0, 0, $noreg
643    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.4, implicit-def dead $cpsr
644    t2B %bb.2, 14 /* CC::al */, $noreg
645
646  bb.2:
647    successors: %bb.5(0x40000000), %bb.7(0x40000000)
648    liveins: $r0, $r1, $r2
649
650    renamable $lr = t2WhileLoopStartLR killed renamable $r2, %bb.7, implicit-def dead $cpsr
651    t2B %bb.5, 14 /* CC::al */, $noreg
652
653  bb.5:
654    successors: %bb.6(0x80000000)
655    liveins: $lr, $r0, $r1
656
657    renamable $r3, dead $cpsr = tMOVi8 0, 14 /* CC::al */, $noreg
658
659  bb.6:
660    successors: %bb.6(0x7c000000), %bb.7(0x04000000)
661    liveins: $lr, $r0, $r1, $r3
662
663    renamable $q0, renamable $r0 = MVE_VIWDUPu16 killed renamable $r0, renamable $r3, 2, 0, $noreg, undef renamable $q0
664    MVE_VSTRH16_rq undef renamable $q0, renamable $r1, killed renamable $q0, 0, $noreg
665    renamable $lr = t2LoopEndDec killed renamable $lr, %bb.6, implicit-def dead $cpsr
666    t2B %bb.7, 14 /* CC::al */, $noreg
667
668...
669