Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AArch64 / store-swift-async-context-clobber-live-reg.ll
blob1f7584b57e4aaff71128289ed4df572b16a9c291
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2 ; RUN: llc -o - -mtriple=arm64e-apple-macosx %s | FileCheck %s
4 target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
6 ; x16 is not available, shrink-wrapping cannot happen because
7 ; StoreSwiftAsyncContext needs it.
8 define swifttailcc void @test_async_with_jumptable_x16_clobbered(ptr %src, ptr swiftasync %as) #0 {
9 ; CHECK-LABEL: test_async_with_jumptable_x16_clobbered:
10 ; CHECK:       ; %bb.0: ; %entry
11 ; CHECK-NEXT:    orr x29, x29, #0x1000000000000000
12 ; CHECK-NEXT:    sub sp, sp, #32
13 ; CHECK-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
14 ; CHECK-NEXT:    add x16, sp, #8
15 ; CHECK-NEXT:    movk x16, #49946, lsl #48
16 ; CHECK-NEXT:    mov x17, x22
17 ; CHECK-NEXT:    pacdb x17, x16
18 ; CHECK-NEXT:    str x17, [sp, #8]
19 ; CHECK-NEXT:    add x29, sp, #16
20 ; CHECK-NEXT:    .cfi_def_cfa w29, 16
21 ; CHECK-NEXT:    .cfi_offset w30, -8
22 ; CHECK-NEXT:    .cfi_offset w29, -16
23 ; CHECK-NEXT:    mov x20, x22
24 ; CHECK-NEXT:    mov x22, x0
25 ; CHECK-NEXT:    ; InlineAsm Start
26 ; CHECK-NEXT:    ; InlineAsm End
27 ; CHECK-NEXT:    ldr x8, [x0]
28 ; CHECK-NEXT:    mov x0, x20
29 ; CHECK-NEXT:    cbnz x8, LBB0_2
30 ; CHECK-NEXT:  ; %bb.1: ; %then.1
31 ; CHECK-NEXT:    str xzr, [x22]
32 ; CHECK-NEXT:    mov x0, x22
33 ; CHECK-NEXT:  LBB0_2: ; %exit
34 ; CHECK-NEXT:    ; InlineAsm Start
35 ; CHECK-NEXT:    ; InlineAsm End
36 ; CHECK-NEXT:    bl _foo
37 ; CHECK-NEXT:    mov x1, x0
38 ; CHECK-NEXT:    mov x0, x20
39 ; CHECK-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
40 ; CHECK-NEXT:    and x29, x29, #0xefffffffffffffff
41 ; CHECK-NEXT:    add sp, sp, #32
42 ; CHECK-NEXT:    br x1
43 entry:
44   %x16 = tail call i64 asm "", "={x16}"()
45   %l = load i64, ptr %src, align 8
46   %c = icmp eq i64 %l, 0
47   br i1 %c, label %then.1, label %exit
49 then.1:
50   store i64 0, ptr %src
51   br label %exit
53 exit:
54   %p = phi ptr [ %src, %then.1 ], [ %as, %entry ]
55   tail call void asm sideeffect "", "{x16}"(i64 %x16)
56   %r = call i64 @foo(ptr %p)
57   %fn = inttoptr i64 %r to ptr
58   musttail call swifttailcc void %fn(ptr swiftasync %src, ptr %as)
59   ret void
62 ; x17 is not available, shrink-wrapping cannot happen because
63 ; StoreSwiftAsyncContext needs it.
64 define swifttailcc void @test_async_with_jumptable_x17_clobbered(ptr %src, ptr swiftasync %as) #0 {
65 ; CHECK-LABEL: test_async_with_jumptable_x17_clobbered:
66 ; CHECK:       ; %bb.0: ; %entry
67 ; CHECK-NEXT:    orr x29, x29, #0x1000000000000000
68 ; CHECK-NEXT:    sub sp, sp, #32
69 ; CHECK-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
70 ; CHECK-NEXT:    add x16, sp, #8
71 ; CHECK-NEXT:    movk x16, #49946, lsl #48
72 ; CHECK-NEXT:    mov x17, x22
73 ; CHECK-NEXT:    pacdb x17, x16
74 ; CHECK-NEXT:    str x17, [sp, #8]
75 ; CHECK-NEXT:    add x29, sp, #16
76 ; CHECK-NEXT:    .cfi_def_cfa w29, 16
77 ; CHECK-NEXT:    .cfi_offset w30, -8
78 ; CHECK-NEXT:    .cfi_offset w29, -16
79 ; CHECK-NEXT:    mov x20, x22
80 ; CHECK-NEXT:    mov x22, x0
81 ; CHECK-NEXT:    ; InlineAsm Start
82 ; CHECK-NEXT:    ; InlineAsm End
83 ; CHECK-NEXT:    ldr x8, [x0]
84 ; CHECK-NEXT:    mov x0, x20
85 ; CHECK-NEXT:    cbnz x8, LBB1_2
86 ; CHECK-NEXT:  ; %bb.1: ; %then.1
87 ; CHECK-NEXT:    str xzr, [x22]
88 ; CHECK-NEXT:    mov x0, x22
89 ; CHECK-NEXT:  LBB1_2: ; %exit
90 ; CHECK-NEXT:    ; InlineAsm Start
91 ; CHECK-NEXT:    ; InlineAsm End
92 ; CHECK-NEXT:    bl _foo
93 ; CHECK-NEXT:    mov x1, x0
94 ; CHECK-NEXT:    mov x0, x20
95 ; CHECK-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
96 ; CHECK-NEXT:    and x29, x29, #0xefffffffffffffff
97 ; CHECK-NEXT:    add sp, sp, #32
98 ; CHECK-NEXT:    br x1
99 entry:
100   %x17 = tail call i64 asm "", "={x17}"()
101   %l = load i64, ptr %src, align 8
102   %c = icmp eq i64 %l, 0
103   br i1 %c, label %then.1, label %exit
105 then.1:
106   store i64 0, ptr %src
107   br label %exit
109 exit:
110   %p = phi ptr [ %src, %then.1 ], [ %as, %entry ]
111   tail call void asm sideeffect "", "{x17}"(i64 %x17)
112   %r = call i64 @foo(ptr %p)
113   %fn = inttoptr i64 %r to ptr
114   musttail call swifttailcc void %fn(ptr swiftasync %src, ptr %as)
115   ret void
118 define swifttailcc void @test_async_with_jumptable_x1_clobbered(ptr %src, ptr swiftasync %as) #0 {
119 ; CHECK-LABEL: test_async_with_jumptable_x1_clobbered:
120 ; CHECK:       ; %bb.0: ; %entry
121 ; CHECK-NEXT:    mov x20, x22
122 ; CHECK-NEXT:    mov x22, x0
123 ; CHECK-NEXT:    ; InlineAsm Start
124 ; CHECK-NEXT:    ; InlineAsm End
125 ; CHECK-NEXT:    ldr x8, [x0]
126 ; CHECK-NEXT:    mov x0, x20
127 ; CHECK-NEXT:    cbnz x8, LBB2_2
128 ; CHECK-NEXT:  ; %bb.1: ; %then.1
129 ; CHECK-NEXT:    str xzr, [x22]
130 ; CHECK-NEXT:    mov x0, x22
131 ; CHECK-NEXT:  LBB2_2: ; %exit
132 ; CHECK-NEXT:    orr x29, x29, #0x1000000000000000
133 ; CHECK-NEXT:    sub sp, sp, #32
134 ; CHECK-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
135 ; CHECK-NEXT:    add x16, sp, #8
136 ; CHECK-NEXT:    movk x16, #49946, lsl #48
137 ; CHECK-NEXT:    mov x17, x22
138 ; CHECK-NEXT:    pacdb x17, x16
139 ; CHECK-NEXT:    str x17, [sp, #8]
140 ; CHECK-NEXT:    add x29, sp, #16
141 ; CHECK-NEXT:    .cfi_def_cfa w29, 16
142 ; CHECK-NEXT:    .cfi_offset w30, -8
143 ; CHECK-NEXT:    .cfi_offset w29, -16
144 ; CHECK-NEXT:    ; InlineAsm Start
145 ; CHECK-NEXT:    ; InlineAsm End
146 ; CHECK-NEXT:    bl _foo
147 ; CHECK-NEXT:    mov x1, x0
148 ; CHECK-NEXT:    mov x0, x20
149 ; CHECK-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
150 ; CHECK-NEXT:    and x29, x29, #0xefffffffffffffff
151 ; CHECK-NEXT:    add sp, sp, #32
152 ; CHECK-NEXT:    br x1
153 entry:
154   %x1 = tail call i64 asm "", "={x1}"()
155   %l = load i64, ptr %src, align 8
156   %c = icmp eq i64 %l, 0
157   br i1 %c, label %then.1, label %exit
159 then.1:
160   store i64 0, ptr %src
161   br label %exit
163 exit:
164   %p = phi ptr [ %src, %then.1 ], [ %as, %entry ]
165   tail call void asm sideeffect "", "{x1}"(i64 %x1)
166   %r = call i64 @foo(ptr %p)
167   %fn = inttoptr i64 %r to ptr
168   musttail call swifttailcc void %fn(ptr swiftasync %src, ptr %as)
169   ret void
172 define swifttailcc void @test_async_with_jumptable_x1_x9_clobbered(ptr %src, ptr swiftasync %as) #0 {
173 ; CHECK-LABEL: test_async_with_jumptable_x1_x9_clobbered:
174 ; CHECK:       ; %bb.0: ; %entry
175 ; CHECK-NEXT:    mov x20, x22
176 ; CHECK-NEXT:    mov x22, x0
177 ; CHECK-NEXT:    ; InlineAsm Start
178 ; CHECK-NEXT:    ; InlineAsm End
179 ; CHECK-NEXT:    ; InlineAsm Start
180 ; CHECK-NEXT:    ; InlineAsm End
181 ; CHECK-NEXT:    ldr x8, [x0]
182 ; CHECK-NEXT:    mov x0, x20
183 ; CHECK-NEXT:    cbnz x8, LBB3_2
184 ; CHECK-NEXT:  ; %bb.1: ; %then.1
185 ; CHECK-NEXT:    str xzr, [x22]
186 ; CHECK-NEXT:    mov x0, x22
187 ; CHECK-NEXT:  LBB3_2: ; %exit
188 ; CHECK-NEXT:    orr x29, x29, #0x1000000000000000
189 ; CHECK-NEXT:    sub sp, sp, #32
190 ; CHECK-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
191 ; CHECK-NEXT:    add x16, sp, #8
192 ; CHECK-NEXT:    movk x16, #49946, lsl #48
193 ; CHECK-NEXT:    mov x17, x22
194 ; CHECK-NEXT:    pacdb x17, x16
195 ; CHECK-NEXT:    str x17, [sp, #8]
196 ; CHECK-NEXT:    add x29, sp, #16
197 ; CHECK-NEXT:    .cfi_def_cfa w29, 16
198 ; CHECK-NEXT:    .cfi_offset w30, -8
199 ; CHECK-NEXT:    .cfi_offset w29, -16
200 ; CHECK-NEXT:    ; InlineAsm Start
201 ; CHECK-NEXT:    ; InlineAsm End
202 ; CHECK-NEXT:    ; InlineAsm Start
203 ; CHECK-NEXT:    ; InlineAsm End
204 ; CHECK-NEXT:    bl _foo
205 ; CHECK-NEXT:    mov x1, x0
206 ; CHECK-NEXT:    mov x0, x20
207 ; CHECK-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
208 ; CHECK-NEXT:    and x29, x29, #0xefffffffffffffff
209 ; CHECK-NEXT:    add sp, sp, #32
210 ; CHECK-NEXT:    br x1
211 entry:
212   %x1 = tail call i64 asm "", "={x1}"()
213   %x9 = tail call i64 asm "", "={x9}"()
214   %l = load i64, ptr %src, align 8
215   %c = icmp eq i64 %l, 0
216   br i1 %c, label %then.1, label %exit
218 then.1:
219   store i64 0, ptr %src
220   br label %exit
222 exit:
223   %p = phi ptr [ %src, %then.1 ], [ %as, %entry ]
224   tail call void asm sideeffect "", "{x1}"(i64 %x1)
225   tail call void asm sideeffect "", "{x9}"(i64 %x9)
226   %r = call i64 @foo(ptr %p)
227   %fn = inttoptr i64 %r to ptr
228   musttail call swifttailcc void %fn(ptr swiftasync %src, ptr %as)
229   ret void
232 ; There are 2 available scratch registers left, shrink-wrapping can happen.
233 define swifttailcc void @test_async_with_jumptable_2_available_regs_left(ptr %src, ptr swiftasync %as) #0 {
234 ; CHECK-LABEL: test_async_with_jumptable_2_available_regs_left:
235 ; CHECK:       ; %bb.0: ; %entry
236 ; CHECK-NEXT:    mov x20, x22
237 ; CHECK-NEXT:    mov x22, x0
238 ; CHECK-NEXT:    ; InlineAsm Start
239 ; CHECK-NEXT:    ; InlineAsm End
240 ; CHECK-NEXT:    ; InlineAsm Start
241 ; CHECK-NEXT:    ; InlineAsm End
242 ; CHECK-NEXT:    ; InlineAsm Start
243 ; CHECK-NEXT:    ; InlineAsm End
244 ; CHECK-NEXT:    ; InlineAsm Start
245 ; CHECK-NEXT:    ; InlineAsm End
246 ; CHECK-NEXT:    ; InlineAsm Start
247 ; CHECK-NEXT:    ; InlineAsm End
248 ; CHECK-NEXT:    ; InlineAsm Start
249 ; CHECK-NEXT:    ; InlineAsm End
250 ; CHECK-NEXT:    ; InlineAsm Start
251 ; CHECK-NEXT:    ; InlineAsm End
252 ; CHECK-NEXT:    ; InlineAsm Start
253 ; CHECK-NEXT:    ; InlineAsm End
254 ; CHECK-NEXT:    ; InlineAsm Start
255 ; CHECK-NEXT:    ; InlineAsm End
256 ; CHECK-NEXT:    ; InlineAsm Start
257 ; CHECK-NEXT:    ; InlineAsm End
258 ; CHECK-NEXT:    ; InlineAsm Start
259 ; CHECK-NEXT:    ; InlineAsm End
260 ; CHECK-NEXT:    ; InlineAsm Start
261 ; CHECK-NEXT:    ; InlineAsm End
262 ; CHECK-NEXT:    ; InlineAsm Start
263 ; CHECK-NEXT:    ; InlineAsm End
264 ; CHECK-NEXT:    ; InlineAsm Start
265 ; CHECK-NEXT:    ; InlineAsm End
266 ; CHECK-NEXT:    mov x0, x20
267 ; CHECK-NEXT:    ldr x10, [x22]
268 ; CHECK-NEXT:    cbnz x10, LBB4_2
269 ; CHECK-NEXT:  ; %bb.1: ; %then.1
270 ; CHECK-NEXT:    str xzr, [x22]
271 ; CHECK-NEXT:    mov x0, x22
272 ; CHECK-NEXT:  LBB4_2: ; %exit
273 ; CHECK-NEXT:    orr x29, x29, #0x1000000000000000
274 ; CHECK-NEXT:    sub sp, sp, #32
275 ; CHECK-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
276 ; CHECK-NEXT:    add x16, sp, #8
277 ; CHECK-NEXT:    movk x16, #49946, lsl #48
278 ; CHECK-NEXT:    mov x17, x22
279 ; CHECK-NEXT:    pacdb x17, x16
280 ; CHECK-NEXT:    str x17, [sp, #8]
281 ; CHECK-NEXT:    add x29, sp, #16
282 ; CHECK-NEXT:    .cfi_def_cfa w29, 16
283 ; CHECK-NEXT:    .cfi_offset w30, -8
284 ; CHECK-NEXT:    .cfi_offset w29, -16
285 ; CHECK-NEXT:    ; InlineAsm Start
286 ; CHECK-NEXT:    ; InlineAsm End
287 ; CHECK-NEXT:    ; InlineAsm Start
288 ; CHECK-NEXT:    ; InlineAsm End
289 ; CHECK-NEXT:    ; InlineAsm Start
290 ; CHECK-NEXT:    ; InlineAsm End
291 ; CHECK-NEXT:    ; InlineAsm Start
292 ; CHECK-NEXT:    ; InlineAsm End
293 ; CHECK-NEXT:    ; InlineAsm Start
294 ; CHECK-NEXT:    ; InlineAsm End
295 ; CHECK-NEXT:    ; InlineAsm Start
296 ; CHECK-NEXT:    ; InlineAsm End
297 ; CHECK-NEXT:    ; InlineAsm Start
298 ; CHECK-NEXT:    ; InlineAsm End
299 ; CHECK-NEXT:    ; InlineAsm Start
300 ; CHECK-NEXT:    ; InlineAsm End
301 ; CHECK-NEXT:    ; InlineAsm Start
302 ; CHECK-NEXT:    ; InlineAsm End
303 ; CHECK-NEXT:    ; InlineAsm Start
304 ; CHECK-NEXT:    ; InlineAsm End
305 ; CHECK-NEXT:    ; InlineAsm Start
306 ; CHECK-NEXT:    ; InlineAsm End
307 ; CHECK-NEXT:    ; InlineAsm Start
308 ; CHECK-NEXT:    ; InlineAsm End
309 ; CHECK-NEXT:    ; InlineAsm Start
310 ; CHECK-NEXT:    ; InlineAsm End
311 ; CHECK-NEXT:    ; InlineAsm Start
312 ; CHECK-NEXT:    ; InlineAsm End
313 ; CHECK-NEXT:    bl _foo
314 ; CHECK-NEXT:    mov x1, x0
315 ; CHECK-NEXT:    mov x0, x20
316 ; CHECK-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
317 ; CHECK-NEXT:    and x29, x29, #0xefffffffffffffff
318 ; CHECK-NEXT:    add sp, sp, #32
319 ; CHECK-NEXT:    br x1
320 entry:
321   %x1 = tail call i64 asm "", "={x1}"()
322   %x2 = tail call i64 asm "", "={x2}"()
323   %x3 = tail call i64 asm "", "={x3}"()
324   %x4 = tail call i64 asm "", "={x4}"()
325   %x5 = tail call i64 asm "", "={x5}"()
326   %x6 = tail call i64 asm "", "={x6}"()
327   %x7 = tail call i64 asm "", "={x7}"()
328   %x8 = tail call i64 asm "", "={x8}"()
329   %x9 = tail call i64 asm "", "={x9}"()
330   %x11 = tail call i64 asm "", "={x11}"()
331   %x12 = tail call i64 asm "", "={x12}"()
332   %x13 = tail call i64 asm "", "={x13}"()
333   %x14 = tail call i64 asm "", "={x14}"()
334   %x15 = tail call i64 asm "", "={x15}"()
335   %l = load i64, ptr %src, align 8
336   %c = icmp eq i64 %l, 0
337   br i1 %c, label %then.1, label %exit
339 then.1:
340   store i64 0, ptr %src
341   br label %exit
343 exit:
344   %p = phi ptr [ %src, %then.1 ], [ %as, %entry ]
345   tail call void asm sideeffect "", "{x1}"(i64 %x1)
346   tail call void asm sideeffect "", "{x2}"(i64 %x2)
347   tail call void asm sideeffect "", "{x3}"(i64 %x3)
348   tail call void asm sideeffect "", "{x4}"(i64 %x4)
349   tail call void asm sideeffect "", "{x5}"(i64 %x5)
350   tail call void asm sideeffect "", "{x6}"(i64 %x6)
351   tail call void asm sideeffect "", "{x7}"(i64 %x7)
352   tail call void asm sideeffect "", "{x8}"(i64 %x8)
353   tail call void asm sideeffect "", "{x9}"(i64 %x9)
354   tail call void asm sideeffect "", "{x11}"(i64 %x11)
355   tail call void asm sideeffect "", "{x12}"(i64 %x12)
356   tail call void asm sideeffect "", "{x13}"(i64 %x13)
357   tail call void asm sideeffect "", "{x14}"(i64 %x14)
358   tail call void asm sideeffect "", "{x15}"(i64 %x15)
359   %r = call i64 @foo(ptr %p)
360   %fn = inttoptr i64 %r to ptr
361   musttail call swifttailcc void %fn(ptr swiftasync %src, ptr %as)
362   ret void
366 ; There is only 1 available scratch registers left, shrink-wrapping cannot
367 ; happen because StoreSwiftAsyncContext needs 2 free scratch registers.
368 define swifttailcc void @test_async_with_jumptable_1_available_reg_left(ptr %src, ptr swiftasync %as) #0 {
369 ; CHECK-LABEL: test_async_with_jumptable_1_available_reg_left:
370 ; CHECK:       ; %bb.0: ; %entry
371 ; CHECK-NEXT:    orr x29, x29, #0x1000000000000000
372 ; CHECK-NEXT:    sub sp, sp, #32
373 ; CHECK-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
374 ; CHECK-NEXT:    add x16, sp, #8
375 ; CHECK-NEXT:    movk x16, #49946, lsl #48
376 ; CHECK-NEXT:    mov x17, x22
377 ; CHECK-NEXT:    pacdb x17, x16
378 ; CHECK-NEXT:    str x17, [sp, #8]
379 ; CHECK-NEXT:    add x29, sp, #16
380 ; CHECK-NEXT:    .cfi_def_cfa w29, 16
381 ; CHECK-NEXT:    .cfi_offset w30, -8
382 ; CHECK-NEXT:    .cfi_offset w29, -16
383 ; CHECK-NEXT:    mov x20, x22
384 ; CHECK-NEXT:    mov x22, x0
385 ; CHECK-NEXT:    ; InlineAsm Start
386 ; CHECK-NEXT:    ; InlineAsm End
387 ; CHECK-NEXT:    ; InlineAsm Start
388 ; CHECK-NEXT:    ; InlineAsm End
389 ; CHECK-NEXT:    ; InlineAsm Start
390 ; CHECK-NEXT:    ; InlineAsm End
391 ; CHECK-NEXT:    ; InlineAsm Start
392 ; CHECK-NEXT:    ; InlineAsm End
393 ; CHECK-NEXT:    ; InlineAsm Start
394 ; CHECK-NEXT:    ; InlineAsm End
395 ; CHECK-NEXT:    ; InlineAsm Start
396 ; CHECK-NEXT:    ; InlineAsm End
397 ; CHECK-NEXT:    ; InlineAsm Start
398 ; CHECK-NEXT:    ; InlineAsm End
399 ; CHECK-NEXT:    ; InlineAsm Start
400 ; CHECK-NEXT:    ; InlineAsm End
401 ; CHECK-NEXT:    ; InlineAsm Start
402 ; CHECK-NEXT:    ; InlineAsm End
403 ; CHECK-NEXT:    ; InlineAsm Start
404 ; CHECK-NEXT:    ; InlineAsm End
405 ; CHECK-NEXT:    ; InlineAsm Start
406 ; CHECK-NEXT:    ; InlineAsm End
407 ; CHECK-NEXT:    ; InlineAsm Start
408 ; CHECK-NEXT:    ; InlineAsm End
409 ; CHECK-NEXT:    ; InlineAsm Start
410 ; CHECK-NEXT:    ; InlineAsm End
411 ; CHECK-NEXT:    ; InlineAsm Start
412 ; CHECK-NEXT:    ; InlineAsm End
413 ; CHECK-NEXT:    ; InlineAsm Start
414 ; CHECK-NEXT:    ; InlineAsm End
415 ; CHECK-NEXT:    mov x0, x20
416 ; CHECK-NEXT:    ldr x10, [x22]
417 ; CHECK-NEXT:    cbnz x10, LBB5_2
418 ; CHECK-NEXT:  ; %bb.1: ; %then.1
419 ; CHECK-NEXT:    str xzr, [x22]
420 ; CHECK-NEXT:    mov x0, x22
421 ; CHECK-NEXT:  LBB5_2: ; %exit
422 ; CHECK-NEXT:    ; InlineAsm Start
423 ; CHECK-NEXT:    ; InlineAsm End
424 ; CHECK-NEXT:    ; InlineAsm Start
425 ; CHECK-NEXT:    ; InlineAsm End
426 ; CHECK-NEXT:    ; InlineAsm Start
427 ; CHECK-NEXT:    ; InlineAsm End
428 ; CHECK-NEXT:    ; InlineAsm Start
429 ; CHECK-NEXT:    ; InlineAsm End
430 ; CHECK-NEXT:    ; InlineAsm Start
431 ; CHECK-NEXT:    ; InlineAsm End
432 ; CHECK-NEXT:    ; InlineAsm Start
433 ; CHECK-NEXT:    ; InlineAsm End
434 ; CHECK-NEXT:    ; InlineAsm Start
435 ; CHECK-NEXT:    ; InlineAsm End
436 ; CHECK-NEXT:    ; InlineAsm Start
437 ; CHECK-NEXT:    ; InlineAsm End
438 ; CHECK-NEXT:    ; InlineAsm Start
439 ; CHECK-NEXT:    ; InlineAsm End
440 ; CHECK-NEXT:    ; InlineAsm Start
441 ; CHECK-NEXT:    ; InlineAsm End
442 ; CHECK-NEXT:    ; InlineAsm Start
443 ; CHECK-NEXT:    ; InlineAsm End
444 ; CHECK-NEXT:    ; InlineAsm Start
445 ; CHECK-NEXT:    ; InlineAsm End
446 ; CHECK-NEXT:    ; InlineAsm Start
447 ; CHECK-NEXT:    ; InlineAsm End
448 ; CHECK-NEXT:    ; InlineAsm Start
449 ; CHECK-NEXT:    ; InlineAsm End
450 ; CHECK-NEXT:    ; InlineAsm Start
451 ; CHECK-NEXT:    ; InlineAsm End
452 ; CHECK-NEXT:    bl _foo
453 ; CHECK-NEXT:    mov x1, x0
454 ; CHECK-NEXT:    mov x0, x20
455 ; CHECK-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
456 ; CHECK-NEXT:    and x29, x29, #0xefffffffffffffff
457 ; CHECK-NEXT:    add sp, sp, #32
458 ; CHECK-NEXT:    br x1
459 entry:
460   %x1 = tail call i64 asm "", "={x1}"()
461   %x2 = tail call i64 asm "", "={x2}"()
462   %x3 = tail call i64 asm "", "={x3}"()
463   %x4 = tail call i64 asm "", "={x4}"()
464   %x5 = tail call i64 asm "", "={x5}"()
465   %x6 = tail call i64 asm "", "={x6}"()
466   %x7 = tail call i64 asm "", "={x7}"()
467   %x8 = tail call i64 asm "", "={x8}"()
468   %x9 = tail call i64 asm "", "={x9}"()
469   %x11 = tail call i64 asm "", "={x11}"()
470   %x12 = tail call i64 asm "", "={x12}"()
471   %x13 = tail call i64 asm "", "={x13}"()
472   %x14 = tail call i64 asm "", "={x14}"()
473   %x15 = tail call i64 asm "", "={x15}"()
474   %x16 = tail call i64 asm "", "={x16}"()
475   %l = load i64, ptr %src, align 8
476   %c = icmp eq i64 %l, 0
477   br i1 %c, label %then.1, label %exit
479 then.1:
480   store i64 0, ptr %src
481   br label %exit
483 exit:
484   %p = phi ptr [ %src, %then.1 ], [ %as, %entry ]
485   tail call void asm sideeffect "", "{x1}"(i64 %x1)
486   tail call void asm sideeffect "", "{x2}"(i64 %x2)
487   tail call void asm sideeffect "", "{x3}"(i64 %x3)
488   tail call void asm sideeffect "", "{x4}"(i64 %x4)
489   tail call void asm sideeffect "", "{x5}"(i64 %x5)
490   tail call void asm sideeffect "", "{x6}"(i64 %x6)
491   tail call void asm sideeffect "", "{x7}"(i64 %x7)
492   tail call void asm sideeffect "", "{x8}"(i64 %x8)
493   tail call void asm sideeffect "", "{x9}"(i64 %x9)
494   tail call void asm sideeffect "", "{x11}"(i64 %x11)
495   tail call void asm sideeffect "", "{x12}"(i64 %x12)
496   tail call void asm sideeffect "", "{x13}"(i64 %x13)
497   tail call void asm sideeffect "", "{x14}"(i64 %x14)
498   tail call void asm sideeffect "", "{x15}"(i64 %x15)
499   tail call void asm sideeffect "", "{x16}"(i64 %x16)
500   %r = call i64 @foo(ptr %p)
501   %fn = inttoptr i64 %r to ptr
502   musttail call swifttailcc void %fn(ptr swiftasync %src, ptr %as)
503   ret void
506 declare i64 @foo(ptr)
508 attributes #0 = { "frame-pointer"="non-leaf" }