[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / tail-dup-redundant-phi.mir
blobeb620b9743cb359c6d434fded02f921355818181
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"
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     ]
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
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
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
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     ]
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
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
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
48   bb35:                                             ; preds = %bb24
49     unreachable
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
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
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
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
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
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   }
79   declare i32* @baz()
81   declare i8 addrspace(1)* @barney(i8 addrspace(1)*)
83   declare i8 addrspace(1)* @wobble(i8 addrspace(1)*)
85   declare i8 addrspace(1)* @bar(i8 addrspace(1)*)
87   ; Function Attrs: nounwind readnone
88   declare i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token, i32 immarg, i32 immarg) #0
90   ; Function Attrs: nounwind readnone
91   declare i8 addrspace(1)* @llvm.experimental.gc.result.p1i8(token) #0
93   declare void @wombat(i32)
95   declare token @llvm.experimental.gc.statepoint.p0f_isVoidi32f(i64 immarg, i32 immarg, void (i32)*, i32 immarg, i32 immarg, ...)
97   declare token @llvm.experimental.gc.statepoint.p0f_p1i8p1i8f(i64 immarg, i32 immarg, i8 addrspace(1)* (i8 addrspace(1)*)*, i32 immarg, i32 immarg, ...)
99   attributes #0 = { nounwind readnone }
103 name:            ham
104 alignment:       4
105 exposesReturnsTwice: false
106 legalized:       false
107 regBankSelected: false
108 selected:        false
109 failedISel:      false
110 tracksRegLiveness: true
111 hasWinCFI:       false
112 callsEHReturn:   false
113 callsUnwindInit: false
114 hasEHCatchret:   false
115 hasEHScopes:     false
116 hasEHFunclets:   false
117 failsVerification: false
118 tracksDebugUserValues: false
119 registers:
120   - { id: 0, class: gpr64all, preferred-register: '' }
121   - { id: 1, class: gpr64all, preferred-register: '' }
122   - { id: 2, class: gpr64all, preferred-register: '' }
123   - { id: 3, class: gpr64, preferred-register: '' }
124   - { id: 4, class: gpr32, preferred-register: '' }
125   - { id: 5, class: gpr32, preferred-register: '' }
126   - { id: 6, class: gpr32, preferred-register: '' }
127   - { id: 7, class: gpr32, preferred-register: '' }
128   - { id: 8, class: gpr64all, preferred-register: '' }
129   - { id: 9, class: gpr64all, preferred-register: '' }
130   - { id: 10, class: gpr64all, preferred-register: '' }
131   - { id: 11, class: gpr64all, preferred-register: '' }
132   - { id: 12, class: gpr64all, preferred-register: '' }
133   - { id: 13, class: gpr64all, preferred-register: '' }
134   - { id: 14, class: gpr32, preferred-register: '' }
135   - { id: 15, class: gpr32, preferred-register: '' }
136   - { id: 16, class: gpr32, preferred-register: '' }
137   - { id: 17, class: gpr32, preferred-register: '' }
138   - { id: 18, class: gpr64all, preferred-register: '' }
139   - { id: 19, class: gpr64all, preferred-register: '' }
140   - { id: 20, class: gpr64all, preferred-register: '' }
141   - { id: 21, class: gpr64all, preferred-register: '' }
142   - { id: 22, class: gpr64all, preferred-register: '' }
143   - { id: 23, class: gpr64all, preferred-register: '' }
144   - { id: 24, class: gpr64all, preferred-register: '' }
145   - { id: 25, class: gpr64all, preferred-register: '' }
146   - { id: 26, class: gpr32, preferred-register: '' }
147   - { id: 27, class: gpr32, preferred-register: '' }
148   - { id: 28, class: gpr32, preferred-register: '' }
149   - { id: 29, class: gpr64all, preferred-register: '' }
150   - { id: 30, class: gpr64all, preferred-register: '' }
151   - { id: 31, class: gpr32, preferred-register: '' }
152   - { id: 32, class: gpr64all, preferred-register: '' }
153   - { id: 33, class: gpr64all, preferred-register: '' }
154   - { id: 34, class: gpr32, preferred-register: '' }
155   - { id: 35, class: gpr64all, preferred-register: '' }
156   - { id: 36, class: gpr32, preferred-register: '' }
157 liveins:         []
158 frameInfo:
159   isFrameAddressTaken: false
160   isReturnAddressTaken: false
161   hasStackMap:     false
162   hasPatchPoint:   false
163   stackSize:       0
164   offsetAdjustment: 0
165   maxAlignment:    1
166   adjustsStack:    true
167   hasCalls:        true
168   stackProtector:  ''
169   functionContext: ''
170   maxCallFrameSize: 0
171   cvBytesOfCalleeSavedRegisters: 0
172   hasOpaqueSPAdjustment: false
173   hasVAStart:      false
174   hasMustTailInVarArgFunc: false
175   hasTailCall:     false
176   localFrameSize:  0
177   savePoint:       ''
178   restorePoint:    ''
179 fixedStack:      []
180 stack:           []
181 callSites:       []
182 debugValueSubstitutions: []
183 constants:       []
184 machineFunctionInfo: {}
185 body:             |
186   ; CHECK-LABEL: name: ham
187   ; CHECK: bb.0.bb:
188   ; CHECK-NEXT:   successors: %bb.3(0x2aaaaaab), %bb.1(0x55555555)
189   ; CHECK-NEXT: {{  $}}
190   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr32 = COPY $wzr
191   ; CHECK-NEXT:   CBNZW [[COPY]], %bb.3
192   ; CHECK-NEXT:   B %bb.1
193   ; CHECK-NEXT: {{  $}}
194   ; CHECK-NEXT: bb.1.bb:
195   ; CHECK-NEXT:   successors: %bb.2(0x40000001), %bb.4(0x3fffffff)
196   ; CHECK-NEXT: {{  $}}
197   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr32 = COPY $wzr
198   ; CHECK-NEXT:   CBNZW [[COPY1]], %bb.4
199   ; CHECK-NEXT:   B %bb.2
200   ; CHECK-NEXT: {{  $}}
201   ; CHECK-NEXT: bb.2.bb1:
202   ; CHECK-NEXT:   successors:{{ $}}
203   ; CHECK-NEXT: {{  $}}
204   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
205   ; CHECK-NEXT:   [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 10
206   ; CHECK-NEXT:   $w0 = COPY [[MOVi32imm]]
207   ; 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
208   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
209   ; CHECK-NEXT: {{  $}}
210   ; CHECK-NEXT: bb.3.bb2:
211   ; CHECK-NEXT:   successors:{{ $}}
212   ; CHECK-NEXT: {{  $}}
213   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
214   ; CHECK-NEXT:   [[MOVi32imm1:%[0-9]+]]:gpr32 = MOVi32imm 10
215   ; CHECK-NEXT:   $w0 = COPY [[MOVi32imm1]]
216   ; 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
217   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
218   ; CHECK-NEXT: {{  $}}
219   ; CHECK-NEXT: bb.4.bb4:
220   ; CHECK-NEXT:   successors: %bb.13(0x40000000), %bb.5(0x40000000)
221   ; CHECK-NEXT: {{  $}}
222   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
223   ; CHECK-NEXT:   [[DEF:%[0-9]+]]:gpr64all = IMPLICIT_DEF
224   ; CHECK-NEXT:   $x0 = COPY [[DEF]]
225   ; CHECK-NEXT:   [[DEF1:%[0-9]+]]:gpr64all = IMPLICIT_DEF
226   ; 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
227   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
228   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gpr64all = COPY $x0
229   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
230   ; CHECK-NEXT:   [[DEF2:%[0-9]+]]:gpr64all = IMPLICIT_DEF
231   ; CHECK-NEXT:   $x0 = COPY [[DEF2]]
232   ; CHECK-NEXT:   [[DEF3:%[0-9]+]]:gpr64all = IMPLICIT_DEF
233   ; 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
234   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
235   ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:gpr64all = COPY $x0
236   ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
237   ; CHECK-NEXT:   CBNZW [[COPY4]], %bb.13
238   ; CHECK-NEXT:   B %bb.5
239   ; CHECK-NEXT: {{  $}}
240   ; CHECK-NEXT: bb.5.bb24:
241   ; CHECK-NEXT:   successors: %bb.10(0x20000000), %bb.6(0x60000000)
242   ; CHECK-NEXT: {{  $}}
243   ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:gpr32 = COPY $wzr
244   ; CHECK-NEXT:   CBNZW [[COPY5]], %bb.10
245   ; CHECK-NEXT:   B %bb.6
246   ; CHECK-NEXT: {{  $}}
247   ; CHECK-NEXT: bb.6.bb24:
248   ; CHECK-NEXT:   successors: %bb.9(0x2aaaaaab), %bb.7(0x55555555)
249   ; CHECK-NEXT: {{  $}}
250   ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:gpr32 = COPY $wzr
251   ; CHECK-NEXT:   CBNZW [[COPY6]], %bb.9
252   ; CHECK-NEXT:   B %bb.7
253   ; CHECK-NEXT: {{  $}}
254   ; CHECK-NEXT: bb.7.bb24:
255   ; CHECK-NEXT:   successors: %bb.8(0x80000000)
256   ; CHECK-NEXT: {{  $}}
257   ; CHECK-NEXT: {{  $}}
258   ; CHECK-NEXT: bb.8.bb25:
259   ; CHECK-NEXT:   successors: %bb.18(0x30000000), %bb.14(0x50000000)
260   ; CHECK-NEXT: {{  $}}
261   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
262   ; CHECK-NEXT:   [[DEF4:%[0-9]+]]:gpr64all = IMPLICIT_DEF
263   ; CHECK-NEXT:   $x0 = COPY [[DEF4]]
264   ; CHECK-NEXT:   [[DEF5:%[0-9]+]]:gpr64all = IMPLICIT_DEF
265   ; 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
266   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
267   ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:gpr64all = COPY $x0
268   ; CHECK-NEXT:   [[COPY8:%[0-9]+]]:gpr64 = COPY [[COPY7]]
269   ; CHECK-NEXT:   [[COPY9:%[0-9]+]]:gpr64all = COPY $xzr
270   ; CHECK-NEXT:   [[COPY10:%[0-9]+]]:gpr64all = COPY [[COPY9]]
271   ; CHECK-NEXT:   [[COPY11:%[0-9]+]]:gpr64 = COPY [[COPY8]]
272   ; CHECK-NEXT:   CBZX [[COPY8]], %bb.18
273   ; CHECK-NEXT:   B %bb.14
274   ; CHECK-NEXT: {{  $}}
275   ; CHECK-NEXT: bb.9.bb29:
276   ; CHECK-NEXT:   successors: %bb.18(0x30000000), %bb.14(0x50000000)
277   ; CHECK-NEXT: {{  $}}
278   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
279   ; CHECK-NEXT:   [[DEF6:%[0-9]+]]:gpr64all = IMPLICIT_DEF
280   ; CHECK-NEXT:   $x0 = COPY [[DEF6]]
281   ; CHECK-NEXT:   [[DEF7:%[0-9]+]]:gpr64all = IMPLICIT_DEF
282   ; 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
283   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
284   ; CHECK-NEXT:   [[COPY12:%[0-9]+]]:gpr64all = COPY $x0
285   ; CHECK-NEXT:   [[DEF8:%[0-9]+]]:gpr64 = IMPLICIT_DEF
286   ; CHECK-NEXT:   [[COPY13:%[0-9]+]]:gpr64all = COPY [[DEF8]]
287   ; CHECK-NEXT:   [[COPY14:%[0-9]+]]:gpr64 = COPY [[DEF8]]
288   ; CHECK-NEXT:   CBZX [[DEF8]], %bb.18
289   ; CHECK-NEXT:   B %bb.14
290   ; CHECK-NEXT: {{  $}}
291   ; CHECK-NEXT: bb.10.bb31:
292   ; CHECK-NEXT:   successors:{{ $}}
293   ; CHECK-NEXT: {{  $}}
294   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
295   ; CHECK-NEXT:   [[MOVi32imm2:%[0-9]+]]:gpr32 = MOVi32imm 10
296   ; CHECK-NEXT:   $w0 = COPY [[MOVi32imm2]]
297   ; 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
298   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
299   ; CHECK-NEXT: {{  $}}
300   ; CHECK-NEXT: bb.11.bb35:
301   ; CHECK-NEXT:   successors:{{ $}}
302   ; CHECK-NEXT: {{  $}}
303   ; CHECK-NEXT: {{  $}}
304   ; CHECK-NEXT: bb.13.bb40:
305   ; CHECK-NEXT:   successors:{{ $}}
306   ; CHECK-NEXT: {{  $}}
307   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
308   ; CHECK-NEXT:   [[MOVi32imm3:%[0-9]+]]:gpr32 = MOVi32imm 10
309   ; CHECK-NEXT:   $w0 = COPY [[MOVi32imm3]]
310   ; 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
311   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
312   ; CHECK-NEXT: {{  $}}
313   ; CHECK-NEXT: bb.14.bb42:
314   ; CHECK-NEXT:   successors: %bb.17(0x20000000), %bb.15(0x60000000)
315   ; CHECK-NEXT: {{  $}}
316   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:gpr64 = PHI [[COPY11]], %bb.8, [[COPY14]], %bb.9
317   ; CHECK-NEXT:   [[PHI1:%[0-9]+]]:gpr64all = PHI [[COPY10]], %bb.8, [[COPY13]], %bb.9
318   ; CHECK-NEXT:   [[COPY15:%[0-9]+]]:gpr32 = COPY $wzr
319   ; CHECK-NEXT:   CBNZW [[COPY15]], %bb.17
320   ; CHECK-NEXT:   B %bb.15
321   ; CHECK-NEXT: {{  $}}
322   ; CHECK-NEXT: bb.15.bb42:
323   ; CHECK-NEXT:   successors: %bb.17(0x2aaaaaab), %bb.16(0x55555555)
324   ; CHECK-NEXT: {{  $}}
325   ; CHECK-NEXT:   [[COPY16:%[0-9]+]]:gpr32 = COPY $wzr
326   ; CHECK-NEXT:   CBNZW [[COPY16]], %bb.17
327   ; CHECK-NEXT:   B %bb.16
328   ; CHECK-NEXT: {{  $}}
329   ; CHECK-NEXT: bb.16.bb47:
330   ; CHECK-NEXT:   successors:{{ $}}
331   ; CHECK-NEXT: {{  $}}
332   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
333   ; CHECK-NEXT:   [[MOVi32imm4:%[0-9]+]]:gpr32 = MOVi32imm 14
334   ; CHECK-NEXT:   $w0 = COPY [[MOVi32imm4]]
335   ; 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
336   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
337   ; CHECK-NEXT: {{  $}}
338   ; CHECK-NEXT: bb.17.bb49:
339   ; CHECK-NEXT:   successors:{{ $}}
340   ; CHECK-NEXT: {{  $}}
341   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
342   ; CHECK-NEXT:   [[MOVi32imm5:%[0-9]+]]:gpr32 = MOVi32imm 10
343   ; CHECK-NEXT:   $w0 = COPY [[MOVi32imm5]]
344   ; 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
345   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
346   ; CHECK-NEXT: {{  $}}
347   ; CHECK-NEXT: bb.18.bb51:
348   ; CHECK-NEXT:   [[PHI2:%[0-9]+]]:gpr64all = PHI [[COPY10]], %bb.8, [[COPY13]], %bb.9
349   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
350   ; CHECK-NEXT:   [[MOVi32imm6:%[0-9]+]]:gpr32 = MOVi32imm 24
351   ; CHECK-NEXT:   $w0 = COPY [[MOVi32imm6]]
352   ; 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
353   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
354   bb.0.bb:
355     successors: %bb.2(0x2aaaaaab), %bb.15(0x55555555)
357     %4:gpr32 = COPY $wzr
358     CBNZW %4, %bb.2
359     B %bb.15
361   bb.15.bb:
362     successors: %bb.1(0x40000001), %bb.3(0x3fffffff)
364     %5:gpr32 = COPY $wzr
365     CBNZW %5, %bb.3
366     B %bb.1
368   bb.1.bb1:
369     successors:
371     ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
372     %7:gpr32 = MOVi32imm 10
373     $w0 = COPY %7
374     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
375     ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
377   bb.2.bb2:
378     successors:
380     ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
381     %6:gpr32 = MOVi32imm 10
382     $w0 = COPY %6
383     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
384     ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
386   bb.3.bb4:
387     successors: %bb.10(0x40000000), %bb.4(0x40000000)
389     ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
390     %8:gpr64all = IMPLICIT_DEF
391     $x0 = COPY %8
392     %9:gpr64all = IMPLICIT_DEF
393     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
394     ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
395     %10:gpr64all = COPY $x0
396     ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
397     %11:gpr64all = IMPLICIT_DEF
398     $x0 = COPY %11
399     %12:gpr64all = IMPLICIT_DEF
400     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
401     ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
402     %13:gpr64all = COPY $x0
403     %14:gpr32 = COPY $wzr
404     CBNZW %14, %bb.10
405     B %bb.4
407   bb.4.bb24:
408     successors: %bb.7(0x20000000), %bb.16(0x60000000)
410     %15:gpr32 = COPY $wzr
411     CBNZW %15, %bb.7
412     B %bb.16
414   bb.16.bb24:
415     successors: %bb.6(0x2aaaaaab), %bb.17(0x55555555)
417     %16:gpr32 = COPY $wzr
418     CBNZW %16, %bb.6
419     B %bb.17
421   bb.17.bb24:
422     successors: %bb.5(0x80000000)
425   bb.5.bb25:
426     successors: %bb.9(0x80000000)
428     ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
429     %22:gpr64all = IMPLICIT_DEF
430     $x0 = COPY %22
431     %23:gpr64all = IMPLICIT_DEF
432     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
433     ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
434     %24:gpr64all = COPY $x0
435     %0:gpr64all = COPY %24
436     %25:gpr64all = COPY $xzr
437     %1:gpr64all = COPY %25
438     B %bb.9
440   bb.6.bb29:
441     successors: %bb.9(0x80000000)
443     ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
444     %19:gpr64all = IMPLICIT_DEF
445     $x0 = COPY %19
446     %20:gpr64all = IMPLICIT_DEF
447     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
448     ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
449     %21:gpr64all = COPY $x0
450     %18:gpr64all = IMPLICIT_DEF
451     B %bb.9
453   bb.7.bb31:
454     successors:
456     ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
457     %17:gpr32 = MOVi32imm 10
458     $w0 = COPY %17
459     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
460     ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
462   bb.8.bb35:
463     successors:
466   bb.9.bb36:
467     successors: %bb.14(0x30000000), %bb.11(0x50000000)
469     %2:gpr64all = PHI %18, %bb.6, %1, %bb.5
470     %3:gpr64 = PHI %18, %bb.6, %0, %bb.5
471     CBZX %3, %bb.14
472     B %bb.11
474   bb.10.bb40:
475     successors:
477     ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
478     %36:gpr32 = MOVi32imm 10
479     $w0 = COPY %36
480     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
481     ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
483   bb.11.bb42:
484     successors: %bb.13(0x20000000), %bb.18(0x60000000)
486     %26:gpr32 = COPY $wzr
487     CBNZW %26, %bb.13
488     B %bb.18
490   bb.18.bb42:
491     successors: %bb.13(0x2aaaaaab), %bb.12(0x55555555)
493     %27:gpr32 = COPY $wzr
494     CBNZW %27, %bb.13
495     B %bb.12
497   bb.12.bb47:
498     successors:
500     ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
501     %28:gpr32 = MOVi32imm 14
502     $w0 = COPY %28
503     %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
504     ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
506   bb.13.bb49:
507     successors:
509     ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
510     %31:gpr32 = MOVi32imm 10
511     $w0 = COPY %31
512     %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
513     ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
515   bb.14.bb51:
516     ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
517     %34:gpr32 = MOVi32imm 24
518     $w0 = COPY %34
519     %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
520     ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp