xref: /llvm-project/llvm/test/CodeGen/AArch64/tail-dup-redundant-phi.mir (revision 112fba974ce42a6e552f7391d20a858a128283a1)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -run-pass=early-tailduplication %s -o - | FileCheck %s
3--- |
4  target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
5  target triple = "aarch64-none-linux-gnu"
6
7  define void @ham() gc "statepoint-example" personality i32* ()* @baz {
8  bb:
9    switch i32 undef, label %bb4 [
10      i32 2050, label %bb1
11      i32 2282, label %bb2
12    ]
13
14  bb1:                                              ; preds = %bb
15    %tmp = call token (i64, i32, void (i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 2882400000, i32 0, void (i32)* nonnull elementtype(void (i32)) @wombat, i32 1, i32 0, i32 10, i32 0, i32 0) [ "deopt"(), "gc-live"() ]
16    unreachable
17
18  bb2:                                              ; preds = %bb
19    %tmp3 = call token (i64, i32, void (i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 2882400000, i32 0, void (i32)* nonnull elementtype(void (i32)) @wombat, i32 1, i32 0, i32 10, i32 0, i32 0) [ "deopt"(), "gc-live"() ]
20    unreachable
21
22  bb4:                                              ; preds = %bb
23    %tmp5 = call token (i64, i32, i8 addrspace(1)* (i8 addrspace(1)*)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_p1i8p1i8f(i64 2882400000, i32 0, i8 addrspace(1)* (i8 addrspace(1)*)* elementtype(i8 addrspace(1)* (i8 addrspace(1)*)) undef, i32 1, i32 0, i8 addrspace(1)* nonnull undef, i32 0, i32 0) [ "deopt"(), "gc-live"() ]
24    %tmp10 = call token (i64, i32, i8 addrspace(1)* (i8 addrspace(1)*)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_p1i8p1i8f(i64 2, i32 4, i8 addrspace(1)* (i8 addrspace(1)*)* nonnull elementtype(i8 addrspace(1)* (i8 addrspace(1)*)) @barney, i32 1, i32 0, i8 addrspace(1)* nonnull undef, i32 0, i32 0) [ "deopt"(), "gc-live"() ]
25    br i1 undef, label %bb40, label %bb24
26
27  bb24:                                             ; preds = %bb4
28    switch i32 undef, label %bb35 [
29      i32 1388, label %bb25
30      i32 2742, label %bb29
31      i32 2884, label %bb31
32    ]
33
34  bb25:                                             ; preds = %bb24
35    %tmp26 = call token (i64, i32, i8 addrspace(1)* (i8 addrspace(1)*)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_p1i8p1i8f(i64 2, i32 4, i8 addrspace(1)* (i8 addrspace(1)*)* nonnull elementtype(i8 addrspace(1)* (i8 addrspace(1)*)) @wobble, i32 1, i32 0, i8 addrspace(1)* nonnull undef, i32 0, i32 0) [ "deopt"(), "gc-live"(i8 addrspace(1)* null) ]
36    %tmp27 = call align 8 i8 addrspace(1)* @llvm.experimental.gc.result.p1i8(token %tmp26)
37    %tmp28 = call coldcc i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token %tmp26, i32 0, i32 0) ; (null, null)
38    br label %bb36
39
40  bb29:                                             ; preds = %bb24
41    %tmp30 = call token (i64, i32, i8 addrspace(1)* (i8 addrspace(1)*)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_p1i8p1i8f(i64 2, i32 4, i8 addrspace(1)* (i8 addrspace(1)*)* nonnull elementtype(i8 addrspace(1)* (i8 addrspace(1)*)) @bar, i32 1, i32 0, i8 addrspace(1)* nonnull undef, i32 0, i32 0) [ "deopt"(), "gc-live"() ]
42    br label %bb36
43
44  bb31:                                             ; preds = %bb24
45    %tmp32 = call token (i64, i32, void (i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 2882400000, i32 0, void (i32)* nonnull elementtype(void (i32)) @wombat, i32 1, i32 0, i32 10, i32 0, i32 0) [ "deopt"(), "gc-live"() ]
46    unreachable
47
48  bb35:                                             ; preds = %bb24
49    unreachable
50
51  bb36:                                             ; preds = %bb29, %bb25
52    %tmp37 = phi i8 addrspace(1)* [ undef, %bb29 ], [ %tmp28, %bb25 ]
53    %tmp38 = phi i8 addrspace(1)* [ undef, %bb29 ], [ %tmp27, %bb25 ]
54    %tmp39 = icmp eq i8 addrspace(1)* %tmp38, null
55    br i1 %tmp39, label %bb51, label %bb42
56
57  bb40:                                             ; preds = %bb4
58    %tmp41 = call token (i64, i32, void (i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 2882400000, i32 0, void (i32)* nonnull elementtype(void (i32)) @wombat, i32 1, i32 0, i32 10, i32 0, i32 0) [ "deopt"(), "gc-live"() ]
59    unreachable
60
61  bb42:                                             ; preds = %bb36
62    %tmp46 = icmp eq i32 undef, 1381
63    %or.cond = select i1 undef, i1 true, i1 %tmp46
64    br i1 %or.cond, label %bb49, label %bb47
65
66  bb47:                                             ; preds = %bb42
67    %tmp48 = call token (i64, i32, void (i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 2882400000, i32 0, void (i32)* nonnull elementtype(void (i32)) @wombat, i32 1, i32 0, i32 14, i32 0, i32 0) [ "deopt"(i8 addrspace(1)* %tmp37, i8 addrspace(1)* %tmp38), "gc-live"() ]
68    unreachable
69
70  bb49:                                             ; preds = %bb42
71    %tmp50 = call token (i64, i32, void (i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 2882400000, i32 0, void (i32)* nonnull elementtype(void (i32)) @wombat, i32 1, i32 0, i32 10, i32 0, i32 0) [ "deopt"(i8 addrspace(1)* %tmp37, i8 addrspace(1)* %tmp38, i8 addrspace(1)* %tmp38), "gc-live"() ]
72    unreachable
73
74  bb51:                                             ; preds = %bb36
75    %tmp52 = call token (i64, i32, void (i32)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 2882400000, i32 0, void (i32)* nonnull elementtype(void (i32)) @wombat, i32 1, i32 0, i32 24, i32 0, i32 0) [ "deopt"(i8 addrspace(1)* %tmp37), "gc-live"() ]
76    unreachable
77  }
78
79  declare i32* @baz()
80
81  declare i8 addrspace(1)* @barney(i8 addrspace(1)*)
82
83  declare i8 addrspace(1)* @wobble(i8 addrspace(1)*)
84
85  declare i8 addrspace(1)* @bar(i8 addrspace(1)*)
86
87  declare i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token, i32 immarg, i32 immarg) #0
88
89  declare i8 addrspace(1)* @llvm.experimental.gc.result.p1i8(token) #0
90
91  declare void @wombat(i32)
92
93  declare token @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 immarg, i32 immarg, void (i32)*, i32 immarg, i32 immarg, ...)
94
95  declare token @llvm.experimental.gc.statepoint.p0f_p1i8p1i8f(i64 immarg, i32 immarg, i8 addrspace(1)* (i8 addrspace(1)*)*, i32 immarg, i32 immarg, ...)
96
97  attributes #0 = { nounwind readnone }
98
99...
100---
101name:            ham
102alignment:       4
103exposesReturnsTwice: false
104legalized:       false
105regBankSelected: false
106selected:        false
107failedISel:      false
108tracksRegLiveness: true
109hasWinCFI:       false
110callsEHReturn:   false
111callsUnwindInit: false
112hasEHCatchret:   false
113hasEHScopes:     false
114hasEHFunclets:   false
115failsVerification: false
116tracksDebugUserValues: false
117registers:
118  - { id: 0, class: gpr64all, preferred-register: '' }
119  - { id: 1, class: gpr64all, preferred-register: '' }
120  - { id: 2, class: gpr64all, preferred-register: '' }
121  - { id: 3, class: gpr64, preferred-register: '' }
122  - { id: 4, class: gpr32, preferred-register: '' }
123  - { id: 5, class: gpr32, preferred-register: '' }
124  - { id: 6, class: gpr32, preferred-register: '' }
125  - { id: 7, class: gpr32, preferred-register: '' }
126  - { id: 8, class: gpr64all, preferred-register: '' }
127  - { id: 9, class: gpr64all, preferred-register: '' }
128  - { id: 10, class: gpr64all, preferred-register: '' }
129  - { id: 11, class: gpr64all, preferred-register: '' }
130  - { id: 12, class: gpr64all, preferred-register: '' }
131  - { id: 13, class: gpr64all, preferred-register: '' }
132  - { id: 14, class: gpr32, preferred-register: '' }
133  - { id: 15, class: gpr32, preferred-register: '' }
134  - { id: 16, class: gpr32, preferred-register: '' }
135  - { id: 17, class: gpr32, preferred-register: '' }
136  - { id: 18, class: gpr64all, preferred-register: '' }
137  - { id: 19, class: gpr64all, preferred-register: '' }
138  - { id: 20, class: gpr64all, preferred-register: '' }
139  - { id: 21, class: gpr64all, preferred-register: '' }
140  - { id: 22, class: gpr64all, preferred-register: '' }
141  - { id: 23, class: gpr64all, preferred-register: '' }
142  - { id: 24, class: gpr64all, preferred-register: '' }
143  - { id: 25, class: gpr64all, preferred-register: '' }
144  - { id: 26, class: gpr32, preferred-register: '' }
145  - { id: 27, class: gpr32, preferred-register: '' }
146  - { id: 28, class: gpr32, preferred-register: '' }
147  - { id: 29, class: gpr64all, preferred-register: '' }
148  - { id: 30, class: gpr64all, preferred-register: '' }
149  - { id: 31, class: gpr32, preferred-register: '' }
150  - { id: 32, class: gpr64all, preferred-register: '' }
151  - { id: 33, class: gpr64all, preferred-register: '' }
152  - { id: 34, class: gpr32, preferred-register: '' }
153  - { id: 35, class: gpr64all, preferred-register: '' }
154  - { id: 36, class: gpr32, preferred-register: '' }
155liveins:         []
156frameInfo:
157  isFrameAddressTaken: false
158  isReturnAddressTaken: false
159  hasStackMap:     false
160  hasPatchPoint:   false
161  stackSize:       0
162  offsetAdjustment: 0
163  maxAlignment:    1
164  adjustsStack:    true
165  hasCalls:        true
166  stackProtector:  ''
167  functionContext: ''
168  maxCallFrameSize: 0
169  cvBytesOfCalleeSavedRegisters: 0
170  hasOpaqueSPAdjustment: false
171  hasVAStart:      false
172  hasMustTailInVarArgFunc: false
173  hasTailCall:     false
174  localFrameSize:  0
175  savePoint:       ''
176  restorePoint:    ''
177fixedStack:      []
178stack:           []
179callSites:       []
180debugValueSubstitutions: []
181constants:       []
182machineFunctionInfo: {}
183body:             |
184  ; CHECK-LABEL: name: ham
185  ; CHECK: bb.0.bb:
186  ; CHECK-NEXT:   successors: %bb.3(0x2aaaaaab), %bb.1(0x55555555)
187  ; CHECK-NEXT: {{  $}}
188  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr32 = COPY $wzr
189  ; CHECK-NEXT:   CBNZW [[COPY]], %bb.3
190  ; CHECK-NEXT:   B %bb.1
191  ; CHECK-NEXT: {{  $}}
192  ; CHECK-NEXT: bb.1.bb:
193  ; CHECK-NEXT:   successors: %bb.2(0x40000001), %bb.4(0x3fffffff)
194  ; CHECK-NEXT: {{  $}}
195  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr32 = COPY $wzr
196  ; CHECK-NEXT:   CBNZW [[COPY1]], %bb.4
197  ; CHECK-NEXT:   B %bb.2
198  ; CHECK-NEXT: {{  $}}
199  ; CHECK-NEXT: bb.2.bb1:
200  ; CHECK-NEXT:   successors:
201  ; CHECK-NEXT: {{  $}}
202  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
203  ; CHECK-NEXT:   [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 10
204  ; CHECK-NEXT:   $w0 = COPY [[MOVi32imm]]
205  ; CHECK-NEXT:   STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr
206  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
207  ; CHECK-NEXT: {{  $}}
208  ; CHECK-NEXT: bb.3.bb2:
209  ; CHECK-NEXT:   successors:
210  ; CHECK-NEXT: {{  $}}
211  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
212  ; CHECK-NEXT:   [[MOVi32imm1:%[0-9]+]]:gpr32 = MOVi32imm 10
213  ; CHECK-NEXT:   $w0 = COPY [[MOVi32imm1]]
214  ; CHECK-NEXT:   STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr
215  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
216  ; CHECK-NEXT: {{  $}}
217  ; CHECK-NEXT: bb.4.bb4:
218  ; CHECK-NEXT:   successors: %bb.13(0x40000000), %bb.5(0x40000000)
219  ; CHECK-NEXT: {{  $}}
220  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
221  ; CHECK-NEXT:   [[DEF:%[0-9]+]]:gpr64all = IMPLICIT_DEF
222  ; CHECK-NEXT:   $x0 = COPY [[DEF]]
223  ; CHECK-NEXT:   [[DEF1:%[0-9]+]]:gpr64all = IMPLICIT_DEF
224  ; CHECK-NEXT:   STATEPOINT 2882400000, 0, 1, [[DEF1]], $x0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr
225  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
226  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gpr64all = COPY $x0
227  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
228  ; CHECK-NEXT:   [[DEF2:%[0-9]+]]:gpr64all = IMPLICIT_DEF
229  ; CHECK-NEXT:   $x0 = COPY [[DEF2]]
230  ; CHECK-NEXT:   [[DEF3:%[0-9]+]]:gpr64all = IMPLICIT_DEF
231  ; CHECK-NEXT:   STATEPOINT 2, 4, 1, [[DEF3]], $x0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr
232  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
233  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:gpr64all = COPY $x0
234  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
235  ; CHECK-NEXT:   CBNZW [[COPY4]], %bb.13
236  ; CHECK-NEXT:   B %bb.5
237  ; CHECK-NEXT: {{  $}}
238  ; CHECK-NEXT: bb.5.bb24:
239  ; CHECK-NEXT:   successors: %bb.10(0x20000000), %bb.6(0x60000000)
240  ; CHECK-NEXT: {{  $}}
241  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:gpr32 = COPY $wzr
242  ; CHECK-NEXT:   CBNZW [[COPY5]], %bb.10
243  ; CHECK-NEXT:   B %bb.6
244  ; CHECK-NEXT: {{  $}}
245  ; CHECK-NEXT: bb.6.bb24:
246  ; CHECK-NEXT:   successors: %bb.9(0x2aaaaaab), %bb.7(0x55555555)
247  ; CHECK-NEXT: {{  $}}
248  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:gpr32 = COPY $wzr
249  ; CHECK-NEXT:   CBNZW [[COPY6]], %bb.9
250  ; CHECK-NEXT:   B %bb.7
251  ; CHECK-NEXT: {{  $}}
252  ; CHECK-NEXT: bb.7.bb24:
253  ; CHECK-NEXT:   successors: %bb.8(0x80000000)
254  ; CHECK-NEXT: {{  $}}
255  ; CHECK-NEXT: bb.8.bb25:
256  ; CHECK-NEXT:   successors: %bb.18(0x30000000), %bb.14(0x50000000)
257  ; CHECK-NEXT: {{  $}}
258  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
259  ; CHECK-NEXT:   [[DEF4:%[0-9]+]]:gpr64all = IMPLICIT_DEF
260  ; CHECK-NEXT:   $x0 = COPY [[DEF4]]
261  ; CHECK-NEXT:   [[DEF5:%[0-9]+]]:gpr64all = IMPLICIT_DEF
262  ; CHECK-NEXT:   STATEPOINT 2, 4, 1, [[DEF5]], $x0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 2, 0, 2, 1, 0, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr
263  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
264  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:gpr64all = COPY $x0
265  ; CHECK-NEXT:   [[COPY8:%[0-9]+]]:gpr64 = COPY [[COPY7]]
266  ; CHECK-NEXT:   [[COPY9:%[0-9]+]]:gpr64all = COPY $xzr
267  ; CHECK-NEXT:   [[COPY10:%[0-9]+]]:gpr64all = COPY [[COPY9]]
268  ; CHECK-NEXT:   [[COPY11:%[0-9]+]]:gpr64 = COPY [[COPY8]]
269  ; CHECK-NEXT:   CBZX [[COPY8]], %bb.18
270  ; CHECK-NEXT:   B %bb.14
271  ; CHECK-NEXT: {{  $}}
272  ; CHECK-NEXT: bb.9.bb29:
273  ; CHECK-NEXT:   successors: %bb.18(0x30000000), %bb.14(0x50000000)
274  ; CHECK-NEXT: {{  $}}
275  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
276  ; CHECK-NEXT:   [[DEF6:%[0-9]+]]:gpr64all = IMPLICIT_DEF
277  ; CHECK-NEXT:   $x0 = COPY [[DEF6]]
278  ; CHECK-NEXT:   [[DEF7:%[0-9]+]]:gpr64all = IMPLICIT_DEF
279  ; CHECK-NEXT:   STATEPOINT 2, 4, 1, [[DEF7]], $x0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr
280  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
281  ; CHECK-NEXT:   [[COPY12:%[0-9]+]]:gpr64all = COPY $x0
282  ; CHECK-NEXT:   [[DEF8:%[0-9]+]]:gpr64 = IMPLICIT_DEF
283  ; CHECK-NEXT:   [[COPY13:%[0-9]+]]:gpr64all = COPY [[DEF8]]
284  ; CHECK-NEXT:   [[COPY14:%[0-9]+]]:gpr64 = COPY [[DEF8]]
285  ; CHECK-NEXT:   CBZX [[DEF8]], %bb.18
286  ; CHECK-NEXT:   B %bb.14
287  ; CHECK-NEXT: {{  $}}
288  ; CHECK-NEXT: bb.10.bb31:
289  ; CHECK-NEXT:   successors:
290  ; CHECK-NEXT: {{  $}}
291  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
292  ; CHECK-NEXT:   [[MOVi32imm2:%[0-9]+]]:gpr32 = MOVi32imm 10
293  ; CHECK-NEXT:   $w0 = COPY [[MOVi32imm2]]
294  ; CHECK-NEXT:   STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr
295  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
296  ; CHECK-NEXT: {{  $}}
297  ; CHECK-NEXT: bb.11.bb35:
298  ; CHECK-NEXT:   successors:
299  ; CHECK-NEXT: {{  $}}
300  ; CHECK-NEXT: bb.13.bb40:
301  ; CHECK-NEXT:   successors:
302  ; CHECK-NEXT: {{  $}}
303  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
304  ; CHECK-NEXT:   [[MOVi32imm3:%[0-9]+]]:gpr32 = MOVi32imm 10
305  ; CHECK-NEXT:   $w0 = COPY [[MOVi32imm3]]
306  ; CHECK-NEXT:   STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr
307  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
308  ; CHECK-NEXT: {{  $}}
309  ; CHECK-NEXT: bb.14.bb42:
310  ; CHECK-NEXT:   successors: %bb.17(0x20000000), %bb.15(0x60000000)
311  ; CHECK-NEXT: {{  $}}
312  ; CHECK-NEXT:   [[PHI:%[0-9]+]]:gpr64 = PHI [[COPY11]], %bb.8, [[COPY14]], %bb.9
313  ; CHECK-NEXT:   [[PHI1:%[0-9]+]]:gpr64all = PHI [[COPY10]], %bb.8, [[COPY13]], %bb.9
314  ; CHECK-NEXT:   [[COPY15:%[0-9]+]]:gpr32 = COPY $wzr
315  ; CHECK-NEXT:   CBNZW [[COPY15]], %bb.17
316  ; CHECK-NEXT:   B %bb.15
317  ; CHECK-NEXT: {{  $}}
318  ; CHECK-NEXT: bb.15.bb42:
319  ; CHECK-NEXT:   successors: %bb.17(0x2aaaaaab), %bb.16(0x55555555)
320  ; CHECK-NEXT: {{  $}}
321  ; CHECK-NEXT:   [[COPY16:%[0-9]+]]:gpr32 = COPY $wzr
322  ; CHECK-NEXT:   CBNZW [[COPY16]], %bb.17
323  ; CHECK-NEXT:   B %bb.16
324  ; CHECK-NEXT: {{  $}}
325  ; CHECK-NEXT: bb.16.bb47:
326  ; CHECK-NEXT:   successors:
327  ; CHECK-NEXT: {{  $}}
328  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
329  ; CHECK-NEXT:   [[MOVi32imm4:%[0-9]+]]:gpr32 = MOVi32imm 14
330  ; CHECK-NEXT:   $w0 = COPY [[MOVi32imm4]]
331  ; CHECK-NEXT:   [[STATEPOINT:%[0-9]+]]:gpr64all, [[STATEPOINT1:%[0-9]+]]:gpr64all = STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 2, [[PHI1]], [[PHI]], 2, 2, [[PHI1]](tied-def 0), [[PHI]](tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr
332  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
333  ; CHECK-NEXT: {{  $}}
334  ; CHECK-NEXT: bb.17.bb49:
335  ; CHECK-NEXT:   successors:
336  ; CHECK-NEXT: {{  $}}
337  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
338  ; CHECK-NEXT:   [[MOVi32imm5:%[0-9]+]]:gpr32 = MOVi32imm 10
339  ; CHECK-NEXT:   $w0 = COPY [[MOVi32imm5]]
340  ; CHECK-NEXT:   [[STATEPOINT2:%[0-9]+]]:gpr64all, [[STATEPOINT3:%[0-9]+]]:gpr64all = STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 3, [[PHI1]], [[PHI]], [[PHI]], 2, 2, [[PHI1]](tied-def 0), [[PHI]](tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr
341  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
342  ; CHECK-NEXT: {{  $}}
343  ; CHECK-NEXT: bb.18.bb51:
344  ; CHECK-NEXT:   [[PHI2:%[0-9]+]]:gpr64all = PHI [[COPY10]], %bb.8, [[COPY13]], %bb.9
345  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
346  ; CHECK-NEXT:   [[MOVi32imm6:%[0-9]+]]:gpr32 = MOVi32imm 24
347  ; CHECK-NEXT:   $w0 = COPY [[MOVi32imm6]]
348  ; CHECK-NEXT:   [[STATEPOINT4:%[0-9]+]]:gpr64all = STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 1, [[PHI2]], 2, 1, [[PHI2]](tied-def 0), 2, 0, 2, 1, 0, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr
349  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
350  bb.0.bb:
351    successors: %bb.2(0x2aaaaaab), %bb.15(0x55555555)
352
353    %4:gpr32 = COPY $wzr
354    CBNZW %4, %bb.2
355    B %bb.15
356
357  bb.15.bb:
358    successors: %bb.1(0x40000001), %bb.3(0x3fffffff)
359
360    %5:gpr32 = COPY $wzr
361    CBNZW %5, %bb.3
362    B %bb.1
363
364  bb.1.bb1:
365    successors:
366
367    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
368    %7:gpr32 = MOVi32imm 10
369    $w0 = COPY %7
370    STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr
371    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
372
373  bb.2.bb2:
374    successors:
375
376    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
377    %6:gpr32 = MOVi32imm 10
378    $w0 = COPY %6
379    STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr
380    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
381
382  bb.3.bb4:
383    successors: %bb.10(0x40000000), %bb.4(0x40000000)
384
385    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
386    %8:gpr64all = IMPLICIT_DEF
387    $x0 = COPY %8
388    %9:gpr64all = IMPLICIT_DEF
389    STATEPOINT 2882400000, 0, 1, %9, $x0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr
390    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
391    %10:gpr64all = COPY $x0
392    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
393    %11:gpr64all = IMPLICIT_DEF
394    $x0 = COPY %11
395    %12:gpr64all = IMPLICIT_DEF
396    STATEPOINT 2, 4, 1, %12, $x0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr
397    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
398    %13:gpr64all = COPY $x0
399    %14:gpr32 = COPY $wzr
400    CBNZW %14, %bb.10
401    B %bb.4
402
403  bb.4.bb24:
404    successors: %bb.7(0x20000000), %bb.16(0x60000000)
405
406    %15:gpr32 = COPY $wzr
407    CBNZW %15, %bb.7
408    B %bb.16
409
410  bb.16.bb24:
411    successors: %bb.6(0x2aaaaaab), %bb.17(0x55555555)
412
413    %16:gpr32 = COPY $wzr
414    CBNZW %16, %bb.6
415    B %bb.17
416
417  bb.17.bb24:
418    successors: %bb.5(0x80000000)
419
420
421  bb.5.bb25:
422    successors: %bb.9(0x80000000)
423
424    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
425    %22:gpr64all = IMPLICIT_DEF
426    $x0 = COPY %22
427    %23:gpr64all = IMPLICIT_DEF
428    STATEPOINT 2, 4, 1, %23, $x0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 2, 0, 2, 1, 0, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr
429    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
430    %24:gpr64all = COPY $x0
431    %0:gpr64all = COPY %24
432    %25:gpr64all = COPY $xzr
433    %1:gpr64all = COPY %25
434    B %bb.9
435
436  bb.6.bb29:
437    successors: %bb.9(0x80000000)
438
439    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
440    %19:gpr64all = IMPLICIT_DEF
441    $x0 = COPY %19
442    %20:gpr64all = IMPLICIT_DEF
443    STATEPOINT 2, 4, 1, %20, $x0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr
444    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
445    %21:gpr64all = COPY $x0
446    %18:gpr64all = IMPLICIT_DEF
447    B %bb.9
448
449  bb.7.bb31:
450    successors:
451
452    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
453    %17:gpr32 = MOVi32imm 10
454    $w0 = COPY %17
455    STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr
456    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
457
458  bb.8.bb35:
459    successors:
460
461
462  bb.9.bb36:
463    successors: %bb.14(0x30000000), %bb.11(0x50000000)
464
465    %2:gpr64all = PHI %18, %bb.6, %1, %bb.5
466    %3:gpr64 = PHI %18, %bb.6, %0, %bb.5
467    CBZX %3, %bb.14
468    B %bb.11
469
470  bb.10.bb40:
471    successors:
472
473    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
474    %36:gpr32 = MOVi32imm 10
475    $w0 = COPY %36
476    STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr
477    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
478
479  bb.11.bb42:
480    successors: %bb.13(0x20000000), %bb.18(0x60000000)
481
482    %26:gpr32 = COPY $wzr
483    CBNZW %26, %bb.13
484    B %bb.18
485
486  bb.18.bb42:
487    successors: %bb.13(0x2aaaaaab), %bb.12(0x55555555)
488
489    %27:gpr32 = COPY $wzr
490    CBNZW %27, %bb.13
491    B %bb.12
492
493  bb.12.bb47:
494    successors:
495
496    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
497    %28:gpr32 = MOVi32imm 14
498    $w0 = COPY %28
499    %29:gpr64all, %30:gpr64all = STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 2, %2, %3, 2, 2, %2(tied-def 0), %3(tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr
500    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
501
502  bb.13.bb49:
503    successors:
504
505    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
506    %31:gpr32 = MOVi32imm 10
507    $w0 = COPY %31
508    %32:gpr64all, %33:gpr64all = STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 3, %2, %3, %3, 2, 2, %2(tied-def 0), %3(tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr
509    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
510
511  bb.14.bb51:
512    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
513    %34:gpr32 = MOVi32imm 24
514    $w0 = COPY %34
515    %35:gpr64all = STATEPOINT 2882400000, 0, 1, @wombat, $w0, 2, 0, 2, 0, 2, 1, %2, 2, 1, %2(tied-def 0), 2, 0, 2, 1, 0, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr
516    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
517
518...
519