[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / swifterror.ll
blobcd06f8dbfad84c597f2a3a6012b40c9832ef47f0
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs -frame-pointer=all -enable-shrink-wrap=false < %s -mtriple=aarch64-apple-ios -disable-post-ra | FileCheck -allow-deprecated-dag-overlap --check-prefix=CHECK-APPLE --check-prefix=CHECK-APPLE-AARCH64 %s
3 ; RUN: llc -verify-machineinstrs -frame-pointer=all -O0 -fast-isel < %s -mtriple=aarch64-apple-ios -disable-post-ra | FileCheck -allow-deprecated-dag-overlap --check-prefix=CHECK-O0-AARCH64 %s
4 ; RUN: llc -verify-machineinstrs -frame-pointer=all -enable-shrink-wrap=false < %s -mtriple=arm64_32-apple-ios -disable-post-ra | FileCheck -allow-deprecated-dag-overlap --check-prefix=CHECK-APPLE --check-prefix=CHECK-APPLE-ARM64_32 %s
5 ; RUN: llc -verify-machineinstrs -O0 -fast-isel < %s -mtriple=arm64_32-apple-ios -disable-post-ra | FileCheck -allow-deprecated-dag-overlap --check-prefix=CHECK-O0-ARM64_32 %s
7 declare ptr @malloc(i64)
8 declare void @free(ptr)
9 %swift_error = type {i64, i8}
11 ; This tests the basic usage of a swifterror parameter. "foo" is the function
12 ; that takes a swifterror parameter and "caller" is the caller of "foo".
13 define float @foo(ptr swifterror %error_ptr_ref) {
14 ; CHECK-APPLE-LABEL: foo:
15 ; CHECK-APPLE:       ; %bb.0: ; %entry
16 ; CHECK-APPLE-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
17 ; CHECK-APPLE-NEXT:    mov x29, sp
18 ; CHECK-APPLE-NEXT:    .cfi_def_cfa w29, 16
19 ; CHECK-APPLE-NEXT:    .cfi_offset w30, -8
20 ; CHECK-APPLE-NEXT:    .cfi_offset w29, -16
21 ; CHECK-APPLE-NEXT:    mov w0, #16 ; =0x10
22 ; CHECK-APPLE-NEXT:    bl _malloc
23 ; CHECK-APPLE-NEXT:    fmov s0, #1.00000000
24 ; CHECK-APPLE-NEXT:    mov w8, #1 ; =0x1
25 ; CHECK-APPLE-NEXT:    mov x21, x0
26 ; CHECK-APPLE-NEXT:    strb w8, [x0, #8]
27 ; CHECK-APPLE-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
28 ; CHECK-APPLE-NEXT:    ret
30 ; CHECK-O0-AARCH64-LABEL: foo:
31 ; CHECK-O0-AARCH64:       ; %bb.0: ; %entry
32 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
33 ; CHECK-O0-AARCH64-NEXT:    mov x29, sp
34 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
35 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
36 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
37 ; CHECK-O0-AARCH64-NEXT:    mov w8, #16 ; =0x10
38 ; CHECK-O0-AARCH64-NEXT:    mov w0, w8
39 ; CHECK-O0-AARCH64-NEXT:    bl _malloc
40 ; CHECK-O0-AARCH64-NEXT:    mov x21, x0
41 ; CHECK-O0-AARCH64-NEXT:    mov w8, #1 ; =0x1
42 ; CHECK-O0-AARCH64-NEXT:    strb w8, [x0, #8]
43 ; CHECK-O0-AARCH64-NEXT:    fmov s0, #1.00000000
44 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
45 ; CHECK-O0-AARCH64-NEXT:    ret
47 ; CHECK-O0-ARM64_32-LABEL: foo:
48 ; CHECK-O0-ARM64_32:       ; %bb.0: ; %entry
49 ; CHECK-O0-ARM64_32-NEXT:    str x30, [sp, #-16]! ; 8-byte Folded Spill
50 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 16
51 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -16
52 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #16 ; =0x10
53 ; CHECK-O0-ARM64_32-NEXT:    mov w0, w8
54 ; CHECK-O0-ARM64_32-NEXT:    bl _malloc
55 ; CHECK-O0-ARM64_32-NEXT:    mov x21, x0
56 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #1 ; =0x1
57 ; CHECK-O0-ARM64_32-NEXT:    strb w8, [x0, #8]
58 ; CHECK-O0-ARM64_32-NEXT:    fmov s0, #1.00000000
59 ; CHECK-O0-ARM64_32-NEXT:    ldr x30, [sp], #16 ; 8-byte Folded Reload
60 ; CHECK-O0-ARM64_32-NEXT:    ret
62 entry:
63   %call = call ptr @malloc(i64 16)
64   store ptr %call, ptr %error_ptr_ref
65   %tmp = getelementptr inbounds i8, ptr %call, i64 8
66   store i8 1, ptr %tmp
67   ret float 1.0
70 ; "caller" calls "foo" that takes a swifterror parameter.
71 define float @caller(ptr %error_ref) {
72 ; CHECK-APPLE-AARCH64-LABEL: caller:
73 ; CHECK-APPLE-AARCH64:       ; %bb.0: ; %entry
74 ; CHECK-APPLE-AARCH64-NEXT:    sub sp, sp, #64
75 ; CHECK-APPLE-AARCH64-NEXT:    stp x22, x21, [sp, #16] ; 16-byte Folded Spill
76 ; CHECK-APPLE-AARCH64-NEXT:    stp x20, x19, [sp, #32] ; 16-byte Folded Spill
77 ; CHECK-APPLE-AARCH64-NEXT:    stp x29, x30, [sp, #48] ; 16-byte Folded Spill
78 ; CHECK-APPLE-AARCH64-NEXT:    add x29, sp, #48
79 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_def_cfa w29, 16
80 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w30, -8
81 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w29, -16
82 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w19, -24
83 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w20, -32
84 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w21, -40
85 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w22, -48
86 ; CHECK-APPLE-AARCH64-NEXT:    mov x19, x0
87 ; CHECK-APPLE-AARCH64-NEXT:    mov x21, xzr
88 ; CHECK-APPLE-AARCH64-NEXT:    bl _foo
89 ; CHECK-APPLE-AARCH64-NEXT:    mov x0, x21
90 ; CHECK-APPLE-AARCH64-NEXT:    cbnz x21, LBB1_2
91 ; CHECK-APPLE-AARCH64-NEXT:  ; %bb.1: ; %cont
92 ; CHECK-APPLE-AARCH64-NEXT:    ldrb w8, [x0, #8]
93 ; CHECK-APPLE-AARCH64-NEXT:    strb w8, [x19]
94 ; CHECK-APPLE-AARCH64-NEXT:  LBB1_2: ; %handler
95 ; CHECK-APPLE-AARCH64-NEXT:    bl _free
96 ; CHECK-APPLE-AARCH64-NEXT:    fmov s0, #1.00000000
97 ; CHECK-APPLE-AARCH64-NEXT:    ldp x29, x30, [sp, #48] ; 16-byte Folded Reload
98 ; CHECK-APPLE-AARCH64-NEXT:    ldp x20, x19, [sp, #32] ; 16-byte Folded Reload
99 ; CHECK-APPLE-AARCH64-NEXT:    ldp x22, x21, [sp, #16] ; 16-byte Folded Reload
100 ; CHECK-APPLE-AARCH64-NEXT:    add sp, sp, #64
101 ; CHECK-APPLE-AARCH64-NEXT:    ret
103 ; CHECK-O0-AARCH64-LABEL: caller:
104 ; CHECK-O0-AARCH64:       ; %bb.0: ; %entry
105 ; CHECK-O0-AARCH64-NEXT:    sub sp, sp, #64
106 ; CHECK-O0-AARCH64-NEXT:    stp x22, x21, [sp, #32] ; 16-byte Folded Spill
107 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #48] ; 16-byte Folded Spill
108 ; CHECK-O0-AARCH64-NEXT:    add x29, sp, #48
109 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
110 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
111 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
112 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w21, -24
113 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w22, -32
114 ; CHECK-O0-AARCH64-NEXT:    ; implicit-def: $x1
115 ; CHECK-O0-AARCH64-NEXT:    str x0, [sp, #8] ; 8-byte Folded Spill
116 ; CHECK-O0-AARCH64-NEXT:    mov x21, xzr
117 ; CHECK-O0-AARCH64-NEXT:    bl _foo
118 ; CHECK-O0-AARCH64-NEXT:    str x21, [sp, #16] ; 8-byte Folded Spill
119 ; CHECK-O0-AARCH64-NEXT:    cbnz x21, LBB1_2
120 ; CHECK-O0-AARCH64-NEXT:  ; %bb.1: ; %cont
121 ; CHECK-O0-AARCH64-NEXT:    ldr x9, [sp, #8] ; 8-byte Folded Reload
122 ; CHECK-O0-AARCH64-NEXT:    ldr x8, [sp, #16] ; 8-byte Folded Reload
123 ; CHECK-O0-AARCH64-NEXT:    ldrb w8, [x8, #8]
124 ; CHECK-O0-AARCH64-NEXT:    strb w8, [x9]
125 ; CHECK-O0-AARCH64-NEXT:  LBB1_2: ; %handler
126 ; CHECK-O0-AARCH64-NEXT:    ldr x0, [sp, #16] ; 8-byte Folded Reload
127 ; CHECK-O0-AARCH64-NEXT:    bl _free
128 ; CHECK-O0-AARCH64-NEXT:    fmov s0, #1.00000000
129 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #48] ; 16-byte Folded Reload
130 ; CHECK-O0-AARCH64-NEXT:    ldp x22, x21, [sp, #32] ; 16-byte Folded Reload
131 ; CHECK-O0-AARCH64-NEXT:    add sp, sp, #64
132 ; CHECK-O0-AARCH64-NEXT:    ret
134 ; CHECK-APPLE-ARM64_32-LABEL: caller:
135 ; CHECK-APPLE-ARM64_32:       ; %bb.0: ; %entry
136 ; CHECK-APPLE-ARM64_32-NEXT:    sub sp, sp, #64
137 ; CHECK-APPLE-ARM64_32-NEXT:    stp x22, x21, [sp, #16] ; 16-byte Folded Spill
138 ; CHECK-APPLE-ARM64_32-NEXT:    stp x20, x19, [sp, #32] ; 16-byte Folded Spill
139 ; CHECK-APPLE-ARM64_32-NEXT:    stp x29, x30, [sp, #48] ; 16-byte Folded Spill
140 ; CHECK-APPLE-ARM64_32-NEXT:    add x29, sp, #48
141 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_def_cfa w29, 16
142 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w30, -8
143 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w29, -16
144 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w19, -24
145 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w20, -32
146 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w21, -40
147 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w22, -48
148 ; CHECK-APPLE-ARM64_32-NEXT:    mov x19, x0
149 ; CHECK-APPLE-ARM64_32-NEXT:    mov x21, xzr
150 ; CHECK-APPLE-ARM64_32-NEXT:    bl _foo
151 ; CHECK-APPLE-ARM64_32-NEXT:    mov x0, x21
152 ; CHECK-APPLE-ARM64_32-NEXT:    cbnz w0, LBB1_2
153 ; CHECK-APPLE-ARM64_32-NEXT:  ; %bb.1: ; %cont
154 ; CHECK-APPLE-ARM64_32-NEXT:    ldrb w8, [x0, #8]
155 ; CHECK-APPLE-ARM64_32-NEXT:    strb w8, [x19]
156 ; CHECK-APPLE-ARM64_32-NEXT:  LBB1_2: ; %handler
157 ; CHECK-APPLE-ARM64_32-NEXT:    bl _free
158 ; CHECK-APPLE-ARM64_32-NEXT:    fmov s0, #1.00000000
159 ; CHECK-APPLE-ARM64_32-NEXT:    ldp x29, x30, [sp, #48] ; 16-byte Folded Reload
160 ; CHECK-APPLE-ARM64_32-NEXT:    ldp x20, x19, [sp, #32] ; 16-byte Folded Reload
161 ; CHECK-APPLE-ARM64_32-NEXT:    ldp x22, x21, [sp, #16] ; 16-byte Folded Reload
162 ; CHECK-APPLE-ARM64_32-NEXT:    add sp, sp, #64
163 ; CHECK-APPLE-ARM64_32-NEXT:    ret
165 ; CHECK-O0-ARM64_32-LABEL: caller:
166 ; CHECK-O0-ARM64_32:       ; %bb.0: ; %entry
167 ; CHECK-O0-ARM64_32-NEXT:    sub sp, sp, #64
168 ; CHECK-O0-ARM64_32-NEXT:    stp x22, x21, [sp, #32] ; 16-byte Folded Spill
169 ; CHECK-O0-ARM64_32-NEXT:    stp x29, x30, [sp, #48] ; 16-byte Folded Spill
170 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 64
171 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -8
172 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w29, -16
173 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w21, -24
174 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w22, -32
175 ; CHECK-O0-ARM64_32-NEXT:    ; implicit-def: $x1
176 ; CHECK-O0-ARM64_32-NEXT:    str x0, [sp, #8] ; 8-byte Folded Spill
177 ; CHECK-O0-ARM64_32-NEXT:    mov x21, xzr
178 ; CHECK-O0-ARM64_32-NEXT:    bl _foo
179 ; CHECK-O0-ARM64_32-NEXT:    str x21, [sp, #16] ; 8-byte Folded Spill
180 ; CHECK-O0-ARM64_32-NEXT:    cmp x21, #0
181 ; CHECK-O0-ARM64_32-NEXT:    b.ne LBB1_2
182 ; CHECK-O0-ARM64_32-NEXT:  ; %bb.1: ; %cont
183 ; CHECK-O0-ARM64_32-NEXT:    ldr x9, [sp, #8] ; 8-byte Folded Reload
184 ; CHECK-O0-ARM64_32-NEXT:    ldr x8, [sp, #16] ; 8-byte Folded Reload
185 ; CHECK-O0-ARM64_32-NEXT:    ldrb w8, [x8, #8]
186 ; CHECK-O0-ARM64_32-NEXT:    ; kill: def $w0 killed $w8
187 ; CHECK-O0-ARM64_32-NEXT:    strb w8, [x9]
188 ; CHECK-O0-ARM64_32-NEXT:  LBB1_2: ; %handler
189 ; CHECK-O0-ARM64_32-NEXT:    ldr x0, [sp, #16] ; 8-byte Folded Reload
190 ; CHECK-O0-ARM64_32-NEXT:    bl _free
191 ; CHECK-O0-ARM64_32-NEXT:    fmov s0, #1.00000000
192 ; CHECK-O0-ARM64_32-NEXT:    ldp x29, x30, [sp, #48] ; 16-byte Folded Reload
193 ; CHECK-O0-ARM64_32-NEXT:    ldp x22, x21, [sp, #32] ; 16-byte Folded Reload
194 ; CHECK-O0-ARM64_32-NEXT:    add sp, sp, #64
195 ; CHECK-O0-ARM64_32-NEXT:    ret
196 ; Access part of the error object and save it to error_ref
198 entry:
199   %error_ptr_ref = alloca swifterror ptr
200   store ptr null, ptr %error_ptr_ref
201   %call = call float @foo(ptr swifterror %error_ptr_ref)
202   %error_from_foo = load ptr, ptr %error_ptr_ref
203   %had_error_from_foo = icmp ne ptr %error_from_foo, null
204   br i1 %had_error_from_foo, label %handler, label %cont
205 cont:
206   %v1 = getelementptr inbounds %swift_error, ptr %error_from_foo, i64 0, i32 1
207   %t = load i8, ptr %v1
208   store i8 %t, ptr %error_ref
209   br label %handler
210 handler:
211   call void @free(ptr %error_from_foo)
212   ret float 1.0
215 ; "caller2" is the caller of "foo", it calls "foo" inside a loop.
216 define float @caller2(ptr %error_ref) {
217 ; CHECK-APPLE-AARCH64-LABEL: caller2:
218 ; CHECK-APPLE-AARCH64:       ; %bb.0: ; %entry
219 ; CHECK-APPLE-AARCH64-NEXT:    sub sp, sp, #80
220 ; CHECK-APPLE-AARCH64-NEXT:    stp d9, d8, [sp, #16] ; 16-byte Folded Spill
221 ; CHECK-APPLE-AARCH64-NEXT:    stp x22, x21, [sp, #32] ; 16-byte Folded Spill
222 ; CHECK-APPLE-AARCH64-NEXT:    stp x20, x19, [sp, #48] ; 16-byte Folded Spill
223 ; CHECK-APPLE-AARCH64-NEXT:    stp x29, x30, [sp, #64] ; 16-byte Folded Spill
224 ; CHECK-APPLE-AARCH64-NEXT:    add x29, sp, #64
225 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_def_cfa w29, 16
226 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w30, -8
227 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w29, -16
228 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w19, -24
229 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w20, -32
230 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w21, -40
231 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w22, -48
232 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset b8, -56
233 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset b9, -64
234 ; CHECK-APPLE-AARCH64-NEXT:    fmov s8, #1.00000000
235 ; CHECK-APPLE-AARCH64-NEXT:    mov x19, x0
236 ; CHECK-APPLE-AARCH64-NEXT:  LBB2_1: ; %bb_loop
237 ; CHECK-APPLE-AARCH64-NEXT:    ; =>This Inner Loop Header: Depth=1
238 ; CHECK-APPLE-AARCH64-NEXT:    mov x21, xzr
239 ; CHECK-APPLE-AARCH64-NEXT:    bl _foo
240 ; CHECK-APPLE-AARCH64-NEXT:    cbnz x21, LBB2_4
241 ; CHECK-APPLE-AARCH64-NEXT:  ; %bb.2: ; %cont
242 ; CHECK-APPLE-AARCH64-NEXT:    ; in Loop: Header=BB2_1 Depth=1
243 ; CHECK-APPLE-AARCH64-NEXT:    fcmp s0, s8
244 ; CHECK-APPLE-AARCH64-NEXT:    b.le LBB2_1
245 ; CHECK-APPLE-AARCH64-NEXT:  ; %bb.3: ; %bb_end
246 ; CHECK-APPLE-AARCH64-NEXT:    ldrb w8, [x21, #8]
247 ; CHECK-APPLE-AARCH64-NEXT:    strb w8, [x19]
248 ; CHECK-APPLE-AARCH64-NEXT:  LBB2_4: ; %handler
249 ; CHECK-APPLE-AARCH64-NEXT:    mov x0, x21
250 ; CHECK-APPLE-AARCH64-NEXT:    bl _free
251 ; CHECK-APPLE-AARCH64-NEXT:    fmov s0, #1.00000000
252 ; CHECK-APPLE-AARCH64-NEXT:    ldp x29, x30, [sp, #64] ; 16-byte Folded Reload
253 ; CHECK-APPLE-AARCH64-NEXT:    ldp x20, x19, [sp, #48] ; 16-byte Folded Reload
254 ; CHECK-APPLE-AARCH64-NEXT:    ldp x22, x21, [sp, #32] ; 16-byte Folded Reload
255 ; CHECK-APPLE-AARCH64-NEXT:    ldp d9, d8, [sp, #16] ; 16-byte Folded Reload
256 ; CHECK-APPLE-AARCH64-NEXT:    add sp, sp, #80
257 ; CHECK-APPLE-AARCH64-NEXT:    ret
259 ; CHECK-O0-AARCH64-LABEL: caller2:
260 ; CHECK-O0-AARCH64:       ; %bb.0: ; %entry
261 ; CHECK-O0-AARCH64-NEXT:    sub sp, sp, #64
262 ; CHECK-O0-AARCH64-NEXT:    stp x22, x21, [sp, #32] ; 16-byte Folded Spill
263 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #48] ; 16-byte Folded Spill
264 ; CHECK-O0-AARCH64-NEXT:    add x29, sp, #48
265 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
266 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
267 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
268 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w21, -24
269 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w22, -32
270 ; CHECK-O0-AARCH64-NEXT:    ; implicit-def: $x1
271 ; CHECK-O0-AARCH64-NEXT:    str x0, [sp, #16] ; 8-byte Folded Spill
272 ; CHECK-O0-AARCH64-NEXT:  LBB2_1: ; %bb_loop
273 ; CHECK-O0-AARCH64-NEXT:    ; =>This Inner Loop Header: Depth=1
274 ; CHECK-O0-AARCH64-NEXT:    mov x21, xzr
275 ; CHECK-O0-AARCH64-NEXT:    bl _foo
276 ; CHECK-O0-AARCH64-NEXT:    str s0, [sp, #4] ; 4-byte Folded Spill
277 ; CHECK-O0-AARCH64-NEXT:    str x21, [sp, #8] ; 8-byte Folded Spill
278 ; CHECK-O0-AARCH64-NEXT:    cbnz x21, LBB2_4
279 ; CHECK-O0-AARCH64-NEXT:  ; %bb.2: ; %cont
280 ; CHECK-O0-AARCH64-NEXT:    ; in Loop: Header=BB2_1 Depth=1
281 ; CHECK-O0-AARCH64-NEXT:    ldr s0, [sp, #4] ; 4-byte Folded Reload
282 ; CHECK-O0-AARCH64-NEXT:    fmov s1, #1.00000000
283 ; CHECK-O0-AARCH64-NEXT:    fcmp s0, s1
284 ; CHECK-O0-AARCH64-NEXT:    b.le LBB2_1
285 ; CHECK-O0-AARCH64-NEXT:  ; %bb.3: ; %bb_end
286 ; CHECK-O0-AARCH64-NEXT:    ldr x9, [sp, #16] ; 8-byte Folded Reload
287 ; CHECK-O0-AARCH64-NEXT:    ldr x8, [sp, #8] ; 8-byte Folded Reload
288 ; CHECK-O0-AARCH64-NEXT:    ldrb w8, [x8, #8]
289 ; CHECK-O0-AARCH64-NEXT:    strb w8, [x9]
290 ; CHECK-O0-AARCH64-NEXT:  LBB2_4: ; %handler
291 ; CHECK-O0-AARCH64-NEXT:    ldr x0, [sp, #8] ; 8-byte Folded Reload
292 ; CHECK-O0-AARCH64-NEXT:    bl _free
293 ; CHECK-O0-AARCH64-NEXT:    fmov s0, #1.00000000
294 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #48] ; 16-byte Folded Reload
295 ; CHECK-O0-AARCH64-NEXT:    ldp x22, x21, [sp, #32] ; 16-byte Folded Reload
296 ; CHECK-O0-AARCH64-NEXT:    add sp, sp, #64
297 ; CHECK-O0-AARCH64-NEXT:    ret
299 ; CHECK-APPLE-ARM64_32-LABEL: caller2:
300 ; CHECK-APPLE-ARM64_32:       ; %bb.0: ; %entry
301 ; CHECK-APPLE-ARM64_32-NEXT:    sub sp, sp, #80
302 ; CHECK-APPLE-ARM64_32-NEXT:    stp d9, d8, [sp, #16] ; 16-byte Folded Spill
303 ; CHECK-APPLE-ARM64_32-NEXT:    stp x22, x21, [sp, #32] ; 16-byte Folded Spill
304 ; CHECK-APPLE-ARM64_32-NEXT:    stp x20, x19, [sp, #48] ; 16-byte Folded Spill
305 ; CHECK-APPLE-ARM64_32-NEXT:    stp x29, x30, [sp, #64] ; 16-byte Folded Spill
306 ; CHECK-APPLE-ARM64_32-NEXT:    add x29, sp, #64
307 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_def_cfa w29, 16
308 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w30, -8
309 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w29, -16
310 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w19, -24
311 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w20, -32
312 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w21, -40
313 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w22, -48
314 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset b8, -56
315 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset b9, -64
316 ; CHECK-APPLE-ARM64_32-NEXT:    fmov s8, #1.00000000
317 ; CHECK-APPLE-ARM64_32-NEXT:    mov x19, x0
318 ; CHECK-APPLE-ARM64_32-NEXT:  LBB2_1: ; %bb_loop
319 ; CHECK-APPLE-ARM64_32-NEXT:    ; =>This Inner Loop Header: Depth=1
320 ; CHECK-APPLE-ARM64_32-NEXT:    mov x21, xzr
321 ; CHECK-APPLE-ARM64_32-NEXT:    bl _foo
322 ; CHECK-APPLE-ARM64_32-NEXT:    cbnz w21, LBB2_4
323 ; CHECK-APPLE-ARM64_32-NEXT:  ; %bb.2: ; %cont
324 ; CHECK-APPLE-ARM64_32-NEXT:    ; in Loop: Header=BB2_1 Depth=1
325 ; CHECK-APPLE-ARM64_32-NEXT:    fcmp s0, s8
326 ; CHECK-APPLE-ARM64_32-NEXT:    b.le LBB2_1
327 ; CHECK-APPLE-ARM64_32-NEXT:  ; %bb.3: ; %bb_end
328 ; CHECK-APPLE-ARM64_32-NEXT:    ldrb w8, [x21, #8]
329 ; CHECK-APPLE-ARM64_32-NEXT:    strb w8, [x19]
330 ; CHECK-APPLE-ARM64_32-NEXT:  LBB2_4: ; %handler
331 ; CHECK-APPLE-ARM64_32-NEXT:    mov x0, x21
332 ; CHECK-APPLE-ARM64_32-NEXT:    bl _free
333 ; CHECK-APPLE-ARM64_32-NEXT:    fmov s0, #1.00000000
334 ; CHECK-APPLE-ARM64_32-NEXT:    ldp x29, x30, [sp, #64] ; 16-byte Folded Reload
335 ; CHECK-APPLE-ARM64_32-NEXT:    ldp x20, x19, [sp, #48] ; 16-byte Folded Reload
336 ; CHECK-APPLE-ARM64_32-NEXT:    ldp x22, x21, [sp, #32] ; 16-byte Folded Reload
337 ; CHECK-APPLE-ARM64_32-NEXT:    ldp d9, d8, [sp, #16] ; 16-byte Folded Reload
338 ; CHECK-APPLE-ARM64_32-NEXT:    add sp, sp, #80
339 ; CHECK-APPLE-ARM64_32-NEXT:    ret
341 ; CHECK-O0-ARM64_32-LABEL: caller2:
342 ; CHECK-O0-ARM64_32:       ; %bb.0: ; %entry
343 ; CHECK-O0-ARM64_32-NEXT:    sub sp, sp, #64
344 ; CHECK-O0-ARM64_32-NEXT:    stp x22, x21, [sp, #32] ; 16-byte Folded Spill
345 ; CHECK-O0-ARM64_32-NEXT:    stp x29, x30, [sp, #48] ; 16-byte Folded Spill
346 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 64
347 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -8
348 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w29, -16
349 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w21, -24
350 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w22, -32
351 ; CHECK-O0-ARM64_32-NEXT:    ; implicit-def: $x1
352 ; CHECK-O0-ARM64_32-NEXT:    str x0, [sp, #16] ; 8-byte Folded Spill
353 ; CHECK-O0-ARM64_32-NEXT:  LBB2_1: ; %bb_loop
354 ; CHECK-O0-ARM64_32-NEXT:    ; =>This Inner Loop Header: Depth=1
355 ; CHECK-O0-ARM64_32-NEXT:    mov x21, xzr
356 ; CHECK-O0-ARM64_32-NEXT:    bl _foo
357 ; CHECK-O0-ARM64_32-NEXT:    str s0, [sp, #4] ; 4-byte Folded Spill
358 ; CHECK-O0-ARM64_32-NEXT:    str x21, [sp, #8] ; 8-byte Folded Spill
359 ; CHECK-O0-ARM64_32-NEXT:    cmp x21, #0
360 ; CHECK-O0-ARM64_32-NEXT:    b.ne LBB2_4
361 ; CHECK-O0-ARM64_32-NEXT:  ; %bb.2: ; %cont
362 ; CHECK-O0-ARM64_32-NEXT:    ; in Loop: Header=BB2_1 Depth=1
363 ; CHECK-O0-ARM64_32-NEXT:    ldr s0, [sp, #4] ; 4-byte Folded Reload
364 ; CHECK-O0-ARM64_32-NEXT:    fmov s1, #1.00000000
365 ; CHECK-O0-ARM64_32-NEXT:    fcmp s0, s1
366 ; CHECK-O0-ARM64_32-NEXT:    b.le LBB2_1
367 ; CHECK-O0-ARM64_32-NEXT:  ; %bb.3: ; %bb_end
368 ; CHECK-O0-ARM64_32-NEXT:    ldr x9, [sp, #16] ; 8-byte Folded Reload
369 ; CHECK-O0-ARM64_32-NEXT:    ldr x8, [sp, #8] ; 8-byte Folded Reload
370 ; CHECK-O0-ARM64_32-NEXT:    ldrb w8, [x8, #8]
371 ; CHECK-O0-ARM64_32-NEXT:    ; kill: def $w0 killed $w8
372 ; CHECK-O0-ARM64_32-NEXT:    strb w8, [x9]
373 ; CHECK-O0-ARM64_32-NEXT:  LBB2_4: ; %handler
374 ; CHECK-O0-ARM64_32-NEXT:    ldr x0, [sp, #8] ; 8-byte Folded Reload
375 ; CHECK-O0-ARM64_32-NEXT:    bl _free
376 ; CHECK-O0-ARM64_32-NEXT:    fmov s0, #1.00000000
377 ; CHECK-O0-ARM64_32-NEXT:    ldp x29, x30, [sp, #48] ; 16-byte Folded Reload
378 ; CHECK-O0-ARM64_32-NEXT:    ldp x22, x21, [sp, #32] ; 16-byte Folded Reload
379 ; CHECK-O0-ARM64_32-NEXT:    add sp, sp, #64
380 ; CHECK-O0-ARM64_32-NEXT:    ret
381 ; Access part of the error object and save it to error_ref
383 entry:
384   %error_ptr_ref = alloca swifterror ptr
385   br label %bb_loop
386 bb_loop:
387   store ptr null, ptr %error_ptr_ref
388   %call = call float @foo(ptr swifterror %error_ptr_ref)
389   %error_from_foo = load ptr, ptr %error_ptr_ref
390   %had_error_from_foo = icmp ne ptr %error_from_foo, null
391   br i1 %had_error_from_foo, label %handler, label %cont
392 cont:
393   %cmp = fcmp ogt float %call, 1.000000e+00
394   br i1 %cmp, label %bb_end, label %bb_loop
395 bb_end:
396   %v1 = getelementptr inbounds %swift_error, ptr %error_from_foo, i64 0, i32 1
397   %t = load i8, ptr %v1
398   store i8 %t, ptr %error_ref
399   br label %handler
400 handler:
401   call void @free(ptr %error_from_foo)
402   ret float 1.0
405 ; "foo_if" is a function that takes a swifterror parameter, it sets swifterror
406 ; under a certain condition.
407 define float @foo_if(ptr swifterror %error_ptr_ref, i32 %cc) {
408 ; CHECK-APPLE-LABEL: foo_if:
409 ; CHECK-APPLE:       ; %bb.0: ; %entry
410 ; CHECK-APPLE-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
411 ; CHECK-APPLE-NEXT:    mov x29, sp
412 ; CHECK-APPLE-NEXT:    .cfi_def_cfa w29, 16
413 ; CHECK-APPLE-NEXT:    .cfi_offset w30, -8
414 ; CHECK-APPLE-NEXT:    .cfi_offset w29, -16
415 ; CHECK-APPLE-NEXT:    cbz w0, LBB3_2
416 ; CHECK-APPLE-NEXT:  ; %bb.1: ; %gen_error
417 ; CHECK-APPLE-NEXT:    mov w0, #16 ; =0x10
418 ; CHECK-APPLE-NEXT:    bl _malloc
419 ; CHECK-APPLE-NEXT:    mov x21, x0
420 ; CHECK-APPLE-NEXT:    fmov s0, #1.00000000
421 ; CHECK-APPLE-NEXT:    mov w8, #1 ; =0x1
422 ; CHECK-APPLE-NEXT:    strb w8, [x0, #8]
423 ; CHECK-APPLE-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
424 ; CHECK-APPLE-NEXT:    ret
425 ; CHECK-APPLE-NEXT:  LBB3_2:
426 ; CHECK-APPLE-NEXT:    movi d0, #0000000000000000
427 ; CHECK-APPLE-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
428 ; CHECK-APPLE-NEXT:    ret
430 ; CHECK-O0-AARCH64-LABEL: foo_if:
431 ; CHECK-O0-AARCH64:       ; %bb.0: ; %entry
432 ; CHECK-O0-AARCH64-NEXT:    sub sp, sp, #32
433 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
434 ; CHECK-O0-AARCH64-NEXT:    add x29, sp, #16
435 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
436 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
437 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
438 ; CHECK-O0-AARCH64-NEXT:    str x21, [sp, #8] ; 8-byte Folded Spill
439 ; CHECK-O0-AARCH64-NEXT:    cbz w0, LBB3_2
440 ; CHECK-O0-AARCH64-NEXT:  ; %bb.1: ; %gen_error
441 ; CHECK-O0-AARCH64-NEXT:    mov w8, #16 ; =0x10
442 ; CHECK-O0-AARCH64-NEXT:    mov w0, w8
443 ; CHECK-O0-AARCH64-NEXT:    bl _malloc
444 ; CHECK-O0-AARCH64-NEXT:    mov x21, x0
445 ; CHECK-O0-AARCH64-NEXT:    mov w8, #1 ; =0x1
446 ; CHECK-O0-AARCH64-NEXT:    strb w8, [x0, #8]
447 ; CHECK-O0-AARCH64-NEXT:    fmov s0, #1.00000000
448 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
449 ; CHECK-O0-AARCH64-NEXT:    add sp, sp, #32
450 ; CHECK-O0-AARCH64-NEXT:    ret
451 ; CHECK-O0-AARCH64-NEXT:  LBB3_2: ; %normal
452 ; CHECK-O0-AARCH64-NEXT:    ldr x21, [sp, #8] ; 8-byte Folded Reload
453 ; CHECK-O0-AARCH64-NEXT:    movi d0, #0000000000000000
454 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
455 ; CHECK-O0-AARCH64-NEXT:    add sp, sp, #32
456 ; CHECK-O0-AARCH64-NEXT:    ret
458 ; CHECK-O0-ARM64_32-LABEL: foo_if:
459 ; CHECK-O0-ARM64_32:       ; %bb.0: ; %entry
460 ; CHECK-O0-ARM64_32-NEXT:    sub sp, sp, #32
461 ; CHECK-O0-ARM64_32-NEXT:    str x30, [sp, #16] ; 8-byte Folded Spill
462 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 32
463 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -16
464 ; CHECK-O0-ARM64_32-NEXT:    str x21, [sp, #8] ; 8-byte Folded Spill
465 ; CHECK-O0-ARM64_32-NEXT:    cbz w0, LBB3_2
466 ; CHECK-O0-ARM64_32-NEXT:  ; %bb.1: ; %gen_error
467 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #16 ; =0x10
468 ; CHECK-O0-ARM64_32-NEXT:    mov w0, w8
469 ; CHECK-O0-ARM64_32-NEXT:    bl _malloc
470 ; CHECK-O0-ARM64_32-NEXT:    mov x21, x0
471 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #1 ; =0x1
472 ; CHECK-O0-ARM64_32-NEXT:    strb w8, [x0, #8]
473 ; CHECK-O0-ARM64_32-NEXT:    fmov s0, #1.00000000
474 ; CHECK-O0-ARM64_32-NEXT:    ldr x30, [sp, #16] ; 8-byte Folded Reload
475 ; CHECK-O0-ARM64_32-NEXT:    add sp, sp, #32
476 ; CHECK-O0-ARM64_32-NEXT:    ret
477 ; CHECK-O0-ARM64_32-NEXT:  LBB3_2: ; %normal
478 ; CHECK-O0-ARM64_32-NEXT:    ldr x21, [sp, #8] ; 8-byte Folded Reload
479 ; CHECK-O0-ARM64_32-NEXT:    movi d0, #0000000000000000
480 ; CHECK-O0-ARM64_32-NEXT:    ldr x30, [sp, #16] ; 8-byte Folded Reload
481 ; CHECK-O0-ARM64_32-NEXT:    add sp, sp, #32
482 ; CHECK-O0-ARM64_32-NEXT:    ret
484 ; spill x21
485 ; reload from stack
486 entry:
487   %cond = icmp ne i32 %cc, 0
488   br i1 %cond, label %gen_error, label %normal
490 gen_error:
491   %call = call ptr @malloc(i64 16)
492   store ptr %call, ptr %error_ptr_ref
493   %tmp = getelementptr inbounds i8, ptr %call, i64 8
494   store i8 1, ptr %tmp
495   ret float 1.0
497 normal:
498   ret float 0.0
501 ; "foo_loop" is a function that takes a swifterror parameter, it sets swifterror
502 ; under a certain condition inside a loop.
503 define float @foo_loop(ptr swifterror %error_ptr_ref, i32 %cc, float %cc2) {
504 ; CHECK-APPLE-LABEL: foo_loop:
505 ; CHECK-APPLE:       ; %bb.0: ; %entry
506 ; CHECK-APPLE-NEXT:    stp d9, d8, [sp, #-48]! ; 16-byte Folded Spill
507 ; CHECK-APPLE-NEXT:    stp x20, x19, [sp, #16] ; 16-byte Folded Spill
508 ; CHECK-APPLE-NEXT:    stp x29, x30, [sp, #32] ; 16-byte Folded Spill
509 ; CHECK-APPLE-NEXT:    add x29, sp, #32
510 ; CHECK-APPLE-NEXT:    .cfi_def_cfa w29, 16
511 ; CHECK-APPLE-NEXT:    .cfi_offset w30, -8
512 ; CHECK-APPLE-NEXT:    .cfi_offset w29, -16
513 ; CHECK-APPLE-NEXT:    .cfi_offset w19, -24
514 ; CHECK-APPLE-NEXT:    .cfi_offset w20, -32
515 ; CHECK-APPLE-NEXT:    .cfi_offset b8, -40
516 ; CHECK-APPLE-NEXT:    .cfi_offset b9, -48
517 ; CHECK-APPLE-NEXT:    fmov s8, s0
518 ; CHECK-APPLE-NEXT:    mov w19, w0
519 ; CHECK-APPLE-NEXT:    mov x0, x21
520 ; CHECK-APPLE-NEXT:    fmov s9, #1.00000000
521 ; CHECK-APPLE-NEXT:    mov w20, #1 ; =0x1
522 ; CHECK-APPLE-NEXT:    b LBB4_2
523 ; CHECK-APPLE-NEXT:  LBB4_1: ; %bb_cont
524 ; CHECK-APPLE-NEXT:    ; in Loop: Header=BB4_2 Depth=1
525 ; CHECK-APPLE-NEXT:    fcmp s8, s9
526 ; CHECK-APPLE-NEXT:    b.gt LBB4_4
527 ; CHECK-APPLE-NEXT:  LBB4_2: ; %bb_loop
528 ; CHECK-APPLE-NEXT:    ; =>This Inner Loop Header: Depth=1
529 ; CHECK-APPLE-NEXT:    cbz w19, LBB4_1
530 ; CHECK-APPLE-NEXT:  ; %bb.3: ; %gen_error
531 ; CHECK-APPLE-NEXT:    ; in Loop: Header=BB4_2 Depth=1
532 ; CHECK-APPLE-NEXT:    mov w0, #16 ; =0x10
533 ; CHECK-APPLE-NEXT:    bl _malloc
534 ; CHECK-APPLE-NEXT:    strb w20, [x0, #8]
535 ; CHECK-APPLE-NEXT:    b LBB4_1
536 ; CHECK-APPLE-NEXT:  LBB4_4: ; %bb_end
537 ; CHECK-APPLE-NEXT:    movi d0, #0000000000000000
538 ; CHECK-APPLE-NEXT:    mov x21, x0
539 ; CHECK-APPLE-NEXT:    ldp x29, x30, [sp, #32] ; 16-byte Folded Reload
540 ; CHECK-APPLE-NEXT:    ldp x20, x19, [sp, #16] ; 16-byte Folded Reload
541 ; CHECK-APPLE-NEXT:    ldp d9, d8, [sp], #48 ; 16-byte Folded Reload
542 ; CHECK-APPLE-NEXT:    ret
544 ; CHECK-O0-AARCH64-LABEL: foo_loop:
545 ; CHECK-O0-AARCH64:       ; %bb.0: ; %entry
546 ; CHECK-O0-AARCH64-NEXT:    sub sp, sp, #48
547 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #32] ; 16-byte Folded Spill
548 ; CHECK-O0-AARCH64-NEXT:    add x29, sp, #32
549 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
550 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
551 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
552 ; CHECK-O0-AARCH64-NEXT:    str s0, [sp, #16] ; 4-byte Folded Spill
553 ; CHECK-O0-AARCH64-NEXT:    stur w0, [x29, #-12] ; 4-byte Folded Spill
554 ; CHECK-O0-AARCH64-NEXT:    stur x21, [x29, #-8] ; 8-byte Folded Spill
555 ; CHECK-O0-AARCH64-NEXT:    b LBB4_1
556 ; CHECK-O0-AARCH64-NEXT:  LBB4_1: ; %bb_loop
557 ; CHECK-O0-AARCH64-NEXT:    ; =>This Inner Loop Header: Depth=1
558 ; CHECK-O0-AARCH64-NEXT:    ldur w8, [x29, #-12] ; 4-byte Folded Reload
559 ; CHECK-O0-AARCH64-NEXT:    ldur x0, [x29, #-8] ; 8-byte Folded Reload
560 ; CHECK-O0-AARCH64-NEXT:    str x0, [sp, #8] ; 8-byte Folded Spill
561 ; CHECK-O0-AARCH64-NEXT:    cbz w8, LBB4_3
562 ; CHECK-O0-AARCH64-NEXT:  ; %bb.2: ; %gen_error
563 ; CHECK-O0-AARCH64-NEXT:    ; in Loop: Header=BB4_1 Depth=1
564 ; CHECK-O0-AARCH64-NEXT:    mov w8, #16 ; =0x10
565 ; CHECK-O0-AARCH64-NEXT:    mov w0, w8
566 ; CHECK-O0-AARCH64-NEXT:    bl _malloc
567 ; CHECK-O0-AARCH64-NEXT:    mov x9, x0
568 ; CHECK-O0-AARCH64-NEXT:    mov w8, #1 ; =0x1
569 ; CHECK-O0-AARCH64-NEXT:    strb w8, [x9, #8]
570 ; CHECK-O0-AARCH64-NEXT:    str x0, [sp, #8] ; 8-byte Folded Spill
571 ; CHECK-O0-AARCH64-NEXT:  LBB4_3: ; %bb_cont
572 ; CHECK-O0-AARCH64-NEXT:    ; in Loop: Header=BB4_1 Depth=1
573 ; CHECK-O0-AARCH64-NEXT:    ldr s0, [sp, #16] ; 4-byte Folded Reload
574 ; CHECK-O0-AARCH64-NEXT:    ldr x0, [sp, #8] ; 8-byte Folded Reload
575 ; CHECK-O0-AARCH64-NEXT:    str x0, [sp] ; 8-byte Folded Spill
576 ; CHECK-O0-AARCH64-NEXT:    fmov s1, #1.00000000
577 ; CHECK-O0-AARCH64-NEXT:    fcmp s0, s1
578 ; CHECK-O0-AARCH64-NEXT:    stur x0, [x29, #-8] ; 8-byte Folded Spill
579 ; CHECK-O0-AARCH64-NEXT:    b.le LBB4_1
580 ; CHECK-O0-AARCH64-NEXT:  ; %bb.4: ; %bb_end
581 ; CHECK-O0-AARCH64-NEXT:    ldr x21, [sp] ; 8-byte Folded Reload
582 ; CHECK-O0-AARCH64-NEXT:    movi d0, #0000000000000000
583 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #32] ; 16-byte Folded Reload
584 ; CHECK-O0-AARCH64-NEXT:    add sp, sp, #48
585 ; CHECK-O0-AARCH64-NEXT:    ret
587 ; CHECK-O0-ARM64_32-LABEL: foo_loop:
588 ; CHECK-O0-ARM64_32:       ; %bb.0: ; %entry
589 ; CHECK-O0-ARM64_32-NEXT:    sub sp, sp, #48
590 ; CHECK-O0-ARM64_32-NEXT:    str x30, [sp, #32] ; 8-byte Folded Spill
591 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 48
592 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -16
593 ; CHECK-O0-ARM64_32-NEXT:    str s0, [sp, #16] ; 4-byte Folded Spill
594 ; CHECK-O0-ARM64_32-NEXT:    str w0, [sp, #20] ; 4-byte Folded Spill
595 ; CHECK-O0-ARM64_32-NEXT:    str x21, [sp, #24] ; 8-byte Folded Spill
596 ; CHECK-O0-ARM64_32-NEXT:    b LBB4_1
597 ; CHECK-O0-ARM64_32-NEXT:  LBB4_1: ; %bb_loop
598 ; CHECK-O0-ARM64_32-NEXT:    ; =>This Inner Loop Header: Depth=1
599 ; CHECK-O0-ARM64_32-NEXT:    ldr w8, [sp, #20] ; 4-byte Folded Reload
600 ; CHECK-O0-ARM64_32-NEXT:    ldr x0, [sp, #24] ; 8-byte Folded Reload
601 ; CHECK-O0-ARM64_32-NEXT:    str x0, [sp, #8] ; 8-byte Folded Spill
602 ; CHECK-O0-ARM64_32-NEXT:    cbz w8, LBB4_3
603 ; CHECK-O0-ARM64_32-NEXT:  ; %bb.2: ; %gen_error
604 ; CHECK-O0-ARM64_32-NEXT:    ; in Loop: Header=BB4_1 Depth=1
605 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #16 ; =0x10
606 ; CHECK-O0-ARM64_32-NEXT:    mov w0, w8
607 ; CHECK-O0-ARM64_32-NEXT:    bl _malloc
608 ; CHECK-O0-ARM64_32-NEXT:    mov x9, x0
609 ; CHECK-O0-ARM64_32-NEXT:    ; kill: def $x0 killed $x9
610 ; CHECK-O0-ARM64_32-NEXT:    mov x0, x9
611 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #1 ; =0x1
612 ; CHECK-O0-ARM64_32-NEXT:    strb w8, [x9, #8]
613 ; CHECK-O0-ARM64_32-NEXT:    str x0, [sp, #8] ; 8-byte Folded Spill
614 ; CHECK-O0-ARM64_32-NEXT:  LBB4_3: ; %bb_cont
615 ; CHECK-O0-ARM64_32-NEXT:    ; in Loop: Header=BB4_1 Depth=1
616 ; CHECK-O0-ARM64_32-NEXT:    ldr s0, [sp, #16] ; 4-byte Folded Reload
617 ; CHECK-O0-ARM64_32-NEXT:    ldr x0, [sp, #8] ; 8-byte Folded Reload
618 ; CHECK-O0-ARM64_32-NEXT:    str x0, [sp] ; 8-byte Folded Spill
619 ; CHECK-O0-ARM64_32-NEXT:    fmov s1, #1.00000000
620 ; CHECK-O0-ARM64_32-NEXT:    fcmp s0, s1
621 ; CHECK-O0-ARM64_32-NEXT:    str x0, [sp, #24] ; 8-byte Folded Spill
622 ; CHECK-O0-ARM64_32-NEXT:    b.le LBB4_1
623 ; CHECK-O0-ARM64_32-NEXT:  ; %bb.4: ; %bb_end
624 ; CHECK-O0-ARM64_32-NEXT:    ldr x21, [sp] ; 8-byte Folded Reload
625 ; CHECK-O0-ARM64_32-NEXT:    movi d0, #0000000000000000
626 ; CHECK-O0-ARM64_32-NEXT:    ldr x30, [sp, #32] ; 8-byte Folded Reload
627 ; CHECK-O0-ARM64_32-NEXT:    add sp, sp, #48
628 ; CHECK-O0-ARM64_32-NEXT:    ret
630 ; spill x21
631 ; spill x0
632 ; reload from stack
634 ; spill x21
635 ; reload from stack
636 entry:
637   br label %bb_loop
639 bb_loop:
640   %cond = icmp ne i32 %cc, 0
641   br i1 %cond, label %gen_error, label %bb_cont
643 gen_error:
644   %call = call ptr @malloc(i64 16)
645   store ptr %call, ptr %error_ptr_ref
646   %tmp = getelementptr inbounds i8, ptr %call, i64 8
647   store i8 1, ptr %tmp
648   br label %bb_cont
650 bb_cont:
651   %cmp = fcmp ogt float %cc2, 1.000000e+00
652   br i1 %cmp, label %bb_end, label %bb_loop
653 bb_end:
654   ret float 0.0
657 %struct.S = type { i32, i32, i32, i32, i32, i32 }
659 ; "foo_sret" is a function that takes a swifterror parameter, it also has a sret
660 ; parameter.
661 define void @foo_sret(ptr sret(%struct.S) %agg.result, i32 %val1, ptr swifterror %error_ptr_ref) {
662 ; CHECK-APPLE-LABEL: foo_sret:
663 ; CHECK-APPLE:       ; %bb.0: ; %entry
664 ; CHECK-APPLE-NEXT:    stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill
665 ; CHECK-APPLE-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
666 ; CHECK-APPLE-NEXT:    add x29, sp, #16
667 ; CHECK-APPLE-NEXT:    .cfi_def_cfa w29, 16
668 ; CHECK-APPLE-NEXT:    .cfi_offset w30, -8
669 ; CHECK-APPLE-NEXT:    .cfi_offset w29, -16
670 ; CHECK-APPLE-NEXT:    .cfi_offset w19, -24
671 ; CHECK-APPLE-NEXT:    .cfi_offset w20, -32
672 ; CHECK-APPLE-NEXT:    mov w19, w0
673 ; CHECK-APPLE-NEXT:    mov x20, x8
674 ; CHECK-APPLE-NEXT:    mov w0, #16 ; =0x10
675 ; CHECK-APPLE-NEXT:    bl _malloc
676 ; CHECK-APPLE-NEXT:    mov w8, #1 ; =0x1
677 ; CHECK-APPLE-NEXT:    strb w8, [x0, #8]
678 ; CHECK-APPLE-NEXT:    mov x21, x0
679 ; CHECK-APPLE-NEXT:    str w19, [x20, #4]
680 ; CHECK-APPLE-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
681 ; CHECK-APPLE-NEXT:    ldp x20, x19, [sp], #32 ; 16-byte Folded Reload
682 ; CHECK-APPLE-NEXT:    ret
684 ; CHECK-O0-AARCH64-LABEL: foo_sret:
685 ; CHECK-O0-AARCH64:       ; %bb.0: ; %entry
686 ; CHECK-O0-AARCH64-NEXT:    sub sp, sp, #32
687 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
688 ; CHECK-O0-AARCH64-NEXT:    add x29, sp, #16
689 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
690 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
691 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
692 ; CHECK-O0-AARCH64-NEXT:    stur w0, [x29, #-4] ; 4-byte Folded Spill
693 ; CHECK-O0-AARCH64-NEXT:    str x8, [sp] ; 8-byte Folded Spill
694 ; CHECK-O0-AARCH64-NEXT:    mov w8, #16 ; =0x10
695 ; CHECK-O0-AARCH64-NEXT:    mov w0, w8
696 ; CHECK-O0-AARCH64-NEXT:    bl _malloc
697 ; CHECK-O0-AARCH64-NEXT:    ldr x8, [sp] ; 8-byte Folded Reload
698 ; CHECK-O0-AARCH64-NEXT:    mov x10, x0
699 ; CHECK-O0-AARCH64-NEXT:    ldur w0, [x29, #-4] ; 4-byte Folded Reload
700 ; CHECK-O0-AARCH64-NEXT:    mov x21, x10
701 ; CHECK-O0-AARCH64-NEXT:    mov w9, #1 ; =0x1
702 ; CHECK-O0-AARCH64-NEXT:    strb w9, [x10, #8]
703 ; CHECK-O0-AARCH64-NEXT:    str w0, [x8, #4]
704 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
705 ; CHECK-O0-AARCH64-NEXT:    add sp, sp, #32
706 ; CHECK-O0-AARCH64-NEXT:    ret
708 ; CHECK-O0-ARM64_32-LABEL: foo_sret:
709 ; CHECK-O0-ARM64_32:       ; %bb.0: ; %entry
710 ; CHECK-O0-ARM64_32-NEXT:    sub sp, sp, #32
711 ; CHECK-O0-ARM64_32-NEXT:    str x30, [sp, #16] ; 8-byte Folded Spill
712 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 32
713 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -16
714 ; CHECK-O0-ARM64_32-NEXT:    str w0, [sp, #12] ; 4-byte Folded Spill
715 ; CHECK-O0-ARM64_32-NEXT:    str x8, [sp] ; 8-byte Folded Spill
716 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #16 ; =0x10
717 ; CHECK-O0-ARM64_32-NEXT:    mov w0, w8
718 ; CHECK-O0-ARM64_32-NEXT:    bl _malloc
719 ; CHECK-O0-ARM64_32-NEXT:    ldr x8, [sp] ; 8-byte Folded Reload
720 ; CHECK-O0-ARM64_32-NEXT:    mov x10, x0
721 ; CHECK-O0-ARM64_32-NEXT:    ldr w0, [sp, #12] ; 4-byte Folded Reload
722 ; CHECK-O0-ARM64_32-NEXT:    mov x21, x10
723 ; CHECK-O0-ARM64_32-NEXT:    mov w9, #1 ; =0x1
724 ; CHECK-O0-ARM64_32-NEXT:    strb w9, [x10, #8]
725 ; CHECK-O0-ARM64_32-NEXT:    str w0, [x8, #4]
726 ; CHECK-O0-ARM64_32-NEXT:    ldr x30, [sp, #16] ; 8-byte Folded Reload
727 ; CHECK-O0-ARM64_32-NEXT:    add sp, sp, #32
728 ; CHECK-O0-ARM64_32-NEXT:    ret
730 ; spill x8
731 ; reload from stack
732 entry:
733   %call = call ptr @malloc(i64 16)
734   store ptr %call, ptr %error_ptr_ref
735   %tmp = getelementptr inbounds i8, ptr %call, i64 8
736   store i8 1, ptr %tmp
737   %v2 = getelementptr inbounds %struct.S, ptr %agg.result, i32 0, i32 1
738   store i32 %val1, ptr %v2
739   ret void
742 ; "caller3" calls "foo_sret" that takes a swifterror parameter.
743 define float @caller3(ptr %error_ref) {
744 ; CHECK-APPLE-AARCH64-LABEL: caller3:
745 ; CHECK-APPLE-AARCH64:       ; %bb.0: ; %entry
746 ; CHECK-APPLE-AARCH64-NEXT:    sub sp, sp, #80
747 ; CHECK-APPLE-AARCH64-NEXT:    stp x22, x21, [sp, #32] ; 16-byte Folded Spill
748 ; CHECK-APPLE-AARCH64-NEXT:    stp x20, x19, [sp, #48] ; 16-byte Folded Spill
749 ; CHECK-APPLE-AARCH64-NEXT:    stp x29, x30, [sp, #64] ; 16-byte Folded Spill
750 ; CHECK-APPLE-AARCH64-NEXT:    add x29, sp, #64
751 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_def_cfa w29, 16
752 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w30, -8
753 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w29, -16
754 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w19, -24
755 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w20, -32
756 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w21, -40
757 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w22, -48
758 ; CHECK-APPLE-AARCH64-NEXT:    mov x19, x0
759 ; CHECK-APPLE-AARCH64-NEXT:    add x8, sp, #8
760 ; CHECK-APPLE-AARCH64-NEXT:    mov w0, #1 ; =0x1
761 ; CHECK-APPLE-AARCH64-NEXT:    mov x21, xzr
762 ; CHECK-APPLE-AARCH64-NEXT:    bl _foo_sret
763 ; CHECK-APPLE-AARCH64-NEXT:    mov x0, x21
764 ; CHECK-APPLE-AARCH64-NEXT:    cbnz x21, LBB6_2
765 ; CHECK-APPLE-AARCH64-NEXT:  ; %bb.1: ; %cont
766 ; CHECK-APPLE-AARCH64-NEXT:    ldrb w8, [x0, #8]
767 ; CHECK-APPLE-AARCH64-NEXT:    strb w8, [x19]
768 ; CHECK-APPLE-AARCH64-NEXT:  LBB6_2: ; %handler
769 ; CHECK-APPLE-AARCH64-NEXT:    bl _free
770 ; CHECK-APPLE-AARCH64-NEXT:    fmov s0, #1.00000000
771 ; CHECK-APPLE-AARCH64-NEXT:    ldp x29, x30, [sp, #64] ; 16-byte Folded Reload
772 ; CHECK-APPLE-AARCH64-NEXT:    ldp x20, x19, [sp, #48] ; 16-byte Folded Reload
773 ; CHECK-APPLE-AARCH64-NEXT:    ldp x22, x21, [sp, #32] ; 16-byte Folded Reload
774 ; CHECK-APPLE-AARCH64-NEXT:    add sp, sp, #80
775 ; CHECK-APPLE-AARCH64-NEXT:    ret
777 ; CHECK-O0-AARCH64-LABEL: caller3:
778 ; CHECK-O0-AARCH64:       ; %bb.0: ; %entry
779 ; CHECK-O0-AARCH64-NEXT:    sub sp, sp, #80
780 ; CHECK-O0-AARCH64-NEXT:    stp x22, x21, [sp, #48] ; 16-byte Folded Spill
781 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #64] ; 16-byte Folded Spill
782 ; CHECK-O0-AARCH64-NEXT:    add x29, sp, #64
783 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
784 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
785 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
786 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w21, -24
787 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w22, -32
788 ; CHECK-O0-AARCH64-NEXT:    ; implicit-def: $x1
789 ; CHECK-O0-AARCH64-NEXT:    str x0, [sp] ; 8-byte Folded Spill
790 ; CHECK-O0-AARCH64-NEXT:    mov x21, xzr
791 ; CHECK-O0-AARCH64-NEXT:    add x8, sp, #24
792 ; CHECK-O0-AARCH64-NEXT:    mov w0, #1 ; =0x1
793 ; CHECK-O0-AARCH64-NEXT:    bl _foo_sret
794 ; CHECK-O0-AARCH64-NEXT:    str x21, [sp, #8] ; 8-byte Folded Spill
795 ; CHECK-O0-AARCH64-NEXT:    cbnz x21, LBB6_2
796 ; CHECK-O0-AARCH64-NEXT:  ; %bb.1: ; %cont
797 ; CHECK-O0-AARCH64-NEXT:    ldr x9, [sp] ; 8-byte Folded Reload
798 ; CHECK-O0-AARCH64-NEXT:    ldr x8, [sp, #8] ; 8-byte Folded Reload
799 ; CHECK-O0-AARCH64-NEXT:    ldrb w8, [x8, #8]
800 ; CHECK-O0-AARCH64-NEXT:    strb w8, [x9]
801 ; CHECK-O0-AARCH64-NEXT:  LBB6_2: ; %handler
802 ; CHECK-O0-AARCH64-NEXT:    ldr x0, [sp, #8] ; 8-byte Folded Reload
803 ; CHECK-O0-AARCH64-NEXT:    bl _free
804 ; CHECK-O0-AARCH64-NEXT:    fmov s0, #1.00000000
805 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #64] ; 16-byte Folded Reload
806 ; CHECK-O0-AARCH64-NEXT:    ldp x22, x21, [sp, #48] ; 16-byte Folded Reload
807 ; CHECK-O0-AARCH64-NEXT:    add sp, sp, #80
808 ; CHECK-O0-AARCH64-NEXT:    ret
810 ; CHECK-APPLE-ARM64_32-LABEL: caller3:
811 ; CHECK-APPLE-ARM64_32:       ; %bb.0: ; %entry
812 ; CHECK-APPLE-ARM64_32-NEXT:    sub sp, sp, #80
813 ; CHECK-APPLE-ARM64_32-NEXT:    stp x22, x21, [sp, #32] ; 16-byte Folded Spill
814 ; CHECK-APPLE-ARM64_32-NEXT:    stp x20, x19, [sp, #48] ; 16-byte Folded Spill
815 ; CHECK-APPLE-ARM64_32-NEXT:    stp x29, x30, [sp, #64] ; 16-byte Folded Spill
816 ; CHECK-APPLE-ARM64_32-NEXT:    add x29, sp, #64
817 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_def_cfa w29, 16
818 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w30, -8
819 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w29, -16
820 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w19, -24
821 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w20, -32
822 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w21, -40
823 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w22, -48
824 ; CHECK-APPLE-ARM64_32-NEXT:    mov x19, x0
825 ; CHECK-APPLE-ARM64_32-NEXT:    add x8, sp, #8
826 ; CHECK-APPLE-ARM64_32-NEXT:    mov w0, #1 ; =0x1
827 ; CHECK-APPLE-ARM64_32-NEXT:    mov x21, xzr
828 ; CHECK-APPLE-ARM64_32-NEXT:    bl _foo_sret
829 ; CHECK-APPLE-ARM64_32-NEXT:    mov x0, x21
830 ; CHECK-APPLE-ARM64_32-NEXT:    cbnz w0, LBB6_2
831 ; CHECK-APPLE-ARM64_32-NEXT:  ; %bb.1: ; %cont
832 ; CHECK-APPLE-ARM64_32-NEXT:    ldrb w8, [x0, #8]
833 ; CHECK-APPLE-ARM64_32-NEXT:    strb w8, [x19]
834 ; CHECK-APPLE-ARM64_32-NEXT:  LBB6_2: ; %handler
835 ; CHECK-APPLE-ARM64_32-NEXT:    bl _free
836 ; CHECK-APPLE-ARM64_32-NEXT:    fmov s0, #1.00000000
837 ; CHECK-APPLE-ARM64_32-NEXT:    ldp x29, x30, [sp, #64] ; 16-byte Folded Reload
838 ; CHECK-APPLE-ARM64_32-NEXT:    ldp x20, x19, [sp, #48] ; 16-byte Folded Reload
839 ; CHECK-APPLE-ARM64_32-NEXT:    ldp x22, x21, [sp, #32] ; 16-byte Folded Reload
840 ; CHECK-APPLE-ARM64_32-NEXT:    add sp, sp, #80
841 ; CHECK-APPLE-ARM64_32-NEXT:    ret
843 ; CHECK-O0-ARM64_32-LABEL: caller3:
844 ; CHECK-O0-ARM64_32:       ; %bb.0: ; %entry
845 ; CHECK-O0-ARM64_32-NEXT:    sub sp, sp, #80
846 ; CHECK-O0-ARM64_32-NEXT:    stp x22, x21, [sp, #48] ; 16-byte Folded Spill
847 ; CHECK-O0-ARM64_32-NEXT:    stp x29, x30, [sp, #64] ; 16-byte Folded Spill
848 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 80
849 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -8
850 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w29, -16
851 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w21, -24
852 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w22, -32
853 ; CHECK-O0-ARM64_32-NEXT:    ; implicit-def: $x1
854 ; CHECK-O0-ARM64_32-NEXT:    str x0, [sp] ; 8-byte Folded Spill
855 ; CHECK-O0-ARM64_32-NEXT:    mov x21, xzr
856 ; CHECK-O0-ARM64_32-NEXT:    add x8, sp, #24
857 ; CHECK-O0-ARM64_32-NEXT:    mov w0, #1 ; =0x1
858 ; CHECK-O0-ARM64_32-NEXT:    bl _foo_sret
859 ; CHECK-O0-ARM64_32-NEXT:    str x21, [sp, #8] ; 8-byte Folded Spill
860 ; CHECK-O0-ARM64_32-NEXT:    cmp x21, #0
861 ; CHECK-O0-ARM64_32-NEXT:    b.ne LBB6_2
862 ; CHECK-O0-ARM64_32-NEXT:  ; %bb.1: ; %cont
863 ; CHECK-O0-ARM64_32-NEXT:    ldr x9, [sp] ; 8-byte Folded Reload
864 ; CHECK-O0-ARM64_32-NEXT:    ldr x8, [sp, #8] ; 8-byte Folded Reload
865 ; CHECK-O0-ARM64_32-NEXT:    ldrb w8, [x8, #8]
866 ; CHECK-O0-ARM64_32-NEXT:    ; kill: def $w0 killed $w8
867 ; CHECK-O0-ARM64_32-NEXT:    strb w8, [x9]
868 ; CHECK-O0-ARM64_32-NEXT:  LBB6_2: ; %handler
869 ; CHECK-O0-ARM64_32-NEXT:    ldr x0, [sp, #8] ; 8-byte Folded Reload
870 ; CHECK-O0-ARM64_32-NEXT:    bl _free
871 ; CHECK-O0-ARM64_32-NEXT:    fmov s0, #1.00000000
872 ; CHECK-O0-ARM64_32-NEXT:    ldp x29, x30, [sp, #64] ; 16-byte Folded Reload
873 ; CHECK-O0-ARM64_32-NEXT:    ldp x22, x21, [sp, #48] ; 16-byte Folded Reload
874 ; CHECK-O0-ARM64_32-NEXT:    add sp, sp, #80
875 ; CHECK-O0-ARM64_32-NEXT:    ret
876 ; Access part of the error object and save it to error_ref
878 ; spill x0
879 ; Access part of the error object and save it to error_ref
880 ; reload from stack
881 entry:
882   %s = alloca %struct.S, align 8
883   %error_ptr_ref = alloca swifterror ptr
884   store ptr null, ptr %error_ptr_ref
885   call void @foo_sret(ptr sret(%struct.S) %s, i32 1, ptr swifterror %error_ptr_ref)
886   %error_from_foo = load ptr, ptr %error_ptr_ref
887   %had_error_from_foo = icmp ne ptr %error_from_foo, null
888   br i1 %had_error_from_foo, label %handler, label %cont
889 cont:
890   %v1 = getelementptr inbounds %swift_error, ptr %error_from_foo, i64 0, i32 1
891   %t = load i8, ptr %v1
892   store i8 %t, ptr %error_ref
893   br label %handler
894 handler:
895   call void @free(ptr %error_from_foo)
896   ret float 1.0
899 ; "foo_vararg" is a function that takes a swifterror parameter, it also has
900 ; variable number of arguments.
901 declare void @llvm.va_start(ptr) nounwind
902 define float @foo_vararg(ptr swifterror %error_ptr_ref, ...) {
903 ; CHECK-APPLE-AARCH64-LABEL: foo_vararg:
904 ; CHECK-APPLE-AARCH64:       ; %bb.0: ; %entry
905 ; CHECK-APPLE-AARCH64-NEXT:    sub sp, sp, #48
906 ; CHECK-APPLE-AARCH64-NEXT:    stp x29, x30, [sp, #32] ; 16-byte Folded Spill
907 ; CHECK-APPLE-AARCH64-NEXT:    add x29, sp, #32
908 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_def_cfa w29, 16
909 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w30, -8
910 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w29, -16
911 ; CHECK-APPLE-AARCH64-NEXT:    mov w0, #16 ; =0x10
912 ; CHECK-APPLE-AARCH64-NEXT:    bl _malloc
913 ; CHECK-APPLE-AARCH64-NEXT:    mov w8, #1 ; =0x1
914 ; CHECK-APPLE-AARCH64-NEXT:    ldr w9, [x29, #16]
915 ; CHECK-APPLE-AARCH64-NEXT:    strb w8, [x0, #8]
916 ; CHECK-APPLE-AARCH64-NEXT:    add x8, x29, #16
917 ; CHECK-APPLE-AARCH64-NEXT:    orr x8, x8, #0x8
918 ; CHECK-APPLE-AARCH64-NEXT:    stur w9, [x29, #-12]
919 ; CHECK-APPLE-AARCH64-NEXT:    ldr w9, [x8], #8
920 ; CHECK-APPLE-AARCH64-NEXT:    str w9, [sp, #16]
921 ; CHECK-APPLE-AARCH64-NEXT:    fmov s0, #1.00000000
922 ; CHECK-APPLE-AARCH64-NEXT:    ldr w9, [x8], #8
923 ; CHECK-APPLE-AARCH64-NEXT:    stur x8, [x29, #-8]
924 ; CHECK-APPLE-AARCH64-NEXT:    mov x21, x0
925 ; CHECK-APPLE-AARCH64-NEXT:    str w9, [sp, #12]
926 ; CHECK-APPLE-AARCH64-NEXT:    ldp x29, x30, [sp, #32] ; 16-byte Folded Reload
927 ; CHECK-APPLE-AARCH64-NEXT:    add sp, sp, #48
928 ; CHECK-APPLE-AARCH64-NEXT:    ret
930 ; CHECK-O0-AARCH64-LABEL: foo_vararg:
931 ; CHECK-O0-AARCH64:       ; %bb.0: ; %entry
932 ; CHECK-O0-AARCH64-NEXT:    sub sp, sp, #48
933 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #32] ; 16-byte Folded Spill
934 ; CHECK-O0-AARCH64-NEXT:    add x29, sp, #32
935 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
936 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
937 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
938 ; CHECK-O0-AARCH64-NEXT:    mov w8, #16 ; =0x10
939 ; CHECK-O0-AARCH64-NEXT:    mov w0, w8
940 ; CHECK-O0-AARCH64-NEXT:    bl _malloc
941 ; CHECK-O0-AARCH64-NEXT:    mov x21, x0
942 ; CHECK-O0-AARCH64-NEXT:    mov w8, #1 ; =0x1
943 ; CHECK-O0-AARCH64-NEXT:    strb w8, [x0, #8]
944 ; CHECK-O0-AARCH64-NEXT:    add x8, x29, #16
945 ; CHECK-O0-AARCH64-NEXT:    stur x8, [x29, #-8]
946 ; CHECK-O0-AARCH64-NEXT:    ldur x8, [x29, #-8]
947 ; CHECK-O0-AARCH64-NEXT:    add x9, x8, #8
948 ; CHECK-O0-AARCH64-NEXT:    stur x9, [x29, #-8]
949 ; CHECK-O0-AARCH64-NEXT:    ldr w8, [x8]
950 ; CHECK-O0-AARCH64-NEXT:    stur w8, [x29, #-12]
951 ; CHECK-O0-AARCH64-NEXT:    ldur x8, [x29, #-8]
952 ; CHECK-O0-AARCH64-NEXT:    add x9, x8, #8
953 ; CHECK-O0-AARCH64-NEXT:    stur x9, [x29, #-8]
954 ; CHECK-O0-AARCH64-NEXT:    ldr w8, [x8]
955 ; CHECK-O0-AARCH64-NEXT:    str w8, [sp, #16]
956 ; CHECK-O0-AARCH64-NEXT:    ldur x8, [x29, #-8]
957 ; CHECK-O0-AARCH64-NEXT:    add x9, x8, #8
958 ; CHECK-O0-AARCH64-NEXT:    stur x9, [x29, #-8]
959 ; CHECK-O0-AARCH64-NEXT:    ldr w8, [x8]
960 ; CHECK-O0-AARCH64-NEXT:    str w8, [sp, #12]
961 ; CHECK-O0-AARCH64-NEXT:    fmov s0, #1.00000000
962 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #32] ; 16-byte Folded Reload
963 ; CHECK-O0-AARCH64-NEXT:    add sp, sp, #48
964 ; CHECK-O0-AARCH64-NEXT:    ret
966 ; CHECK-APPLE-ARM64_32-LABEL: foo_vararg:
967 ; CHECK-APPLE-ARM64_32:       ; %bb.0: ; %entry
968 ; CHECK-APPLE-ARM64_32-NEXT:    sub sp, sp, #48
969 ; CHECK-APPLE-ARM64_32-NEXT:    stp x29, x30, [sp, #32] ; 16-byte Folded Spill
970 ; CHECK-APPLE-ARM64_32-NEXT:    add x29, sp, #32
971 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_def_cfa w29, 16
972 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w30, -8
973 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w29, -16
974 ; CHECK-APPLE-ARM64_32-NEXT:    mov w0, #16 ; =0x10
975 ; CHECK-APPLE-ARM64_32-NEXT:    bl _malloc
976 ; CHECK-APPLE-ARM64_32-NEXT:    mov w8, #1 ; =0x1
977 ; CHECK-APPLE-ARM64_32-NEXT:    add x9, x29, #16
978 ; CHECK-APPLE-ARM64_32-NEXT:    strb w8, [x0, #8]
979 ; CHECK-APPLE-ARM64_32-NEXT:    orr w8, w9, #0x4
980 ; CHECK-APPLE-ARM64_32-NEXT:    and x10, x9, #0xfffffff0
981 ; CHECK-APPLE-ARM64_32-NEXT:    stur w8, [x29, #-8]
982 ; CHECK-APPLE-ARM64_32-NEXT:    ldr w11, [x10]
983 ; CHECK-APPLE-ARM64_32-NEXT:    orr w10, w9, #0x8
984 ; CHECK-APPLE-ARM64_32-NEXT:    stp w11, w10, [x29, #-12]
985 ; CHECK-APPLE-ARM64_32-NEXT:    ldr w8, [x8]
986 ; CHECK-APPLE-ARM64_32-NEXT:    orr w9, w9, #0xc
987 ; CHECK-APPLE-ARM64_32-NEXT:    str w8, [sp, #16]
988 ; CHECK-APPLE-ARM64_32-NEXT:    stur w9, [x29, #-8]
989 ; CHECK-APPLE-ARM64_32-NEXT:    fmov s0, #1.00000000
990 ; CHECK-APPLE-ARM64_32-NEXT:    ldr w8, [x10]
991 ; CHECK-APPLE-ARM64_32-NEXT:    mov x21, x0
992 ; CHECK-APPLE-ARM64_32-NEXT:    str w8, [sp, #12]
993 ; CHECK-APPLE-ARM64_32-NEXT:    ldp x29, x30, [sp, #32] ; 16-byte Folded Reload
994 ; CHECK-APPLE-ARM64_32-NEXT:    add sp, sp, #48
995 ; CHECK-APPLE-ARM64_32-NEXT:    ret
997 ; CHECK-O0-ARM64_32-LABEL: foo_vararg:
998 ; CHECK-O0-ARM64_32:       ; %bb.0: ; %entry
999 ; CHECK-O0-ARM64_32-NEXT:    sub sp, sp, #48
1000 ; CHECK-O0-ARM64_32-NEXT:    str x30, [sp, #32] ; 8-byte Folded Spill
1001 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 48
1002 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -16
1003 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #16 ; =0x10
1004 ; CHECK-O0-ARM64_32-NEXT:    mov w0, w8
1005 ; CHECK-O0-ARM64_32-NEXT:    bl _malloc
1006 ; CHECK-O0-ARM64_32-NEXT:    mov x21, x0
1007 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #1 ; =0x1
1008 ; CHECK-O0-ARM64_32-NEXT:    strb w8, [x0, #8]
1009 ; CHECK-O0-ARM64_32-NEXT:    add x8, sp, #48
1010 ; CHECK-O0-ARM64_32-NEXT:    ; kill: def $w8 killed $w8 killed $x8
1011 ; CHECK-O0-ARM64_32-NEXT:    str w8, [sp, #24]
1012 ; CHECK-O0-ARM64_32-NEXT:    ldr w8, [sp, #24]
1013 ; CHECK-O0-ARM64_32-NEXT:    ; kill: def $x8 killed $w8
1014 ; CHECK-O0-ARM64_32-NEXT:    mov w9, w8
1015 ; CHECK-O0-ARM64_32-NEXT:    add w9, w9, #4
1016 ; CHECK-O0-ARM64_32-NEXT:    str w9, [sp, #24]
1017 ; CHECK-O0-ARM64_32-NEXT:    ldr w8, [x8]
1018 ; CHECK-O0-ARM64_32-NEXT:    str w8, [sp, #20]
1019 ; CHECK-O0-ARM64_32-NEXT:    ldr w8, [sp, #24]
1020 ; CHECK-O0-ARM64_32-NEXT:    ; kill: def $x8 killed $w8
1021 ; CHECK-O0-ARM64_32-NEXT:    mov w9, w8
1022 ; CHECK-O0-ARM64_32-NEXT:    add w9, w9, #4
1023 ; CHECK-O0-ARM64_32-NEXT:    str w9, [sp, #24]
1024 ; CHECK-O0-ARM64_32-NEXT:    ldr w8, [x8]
1025 ; CHECK-O0-ARM64_32-NEXT:    str w8, [sp, #16]
1026 ; CHECK-O0-ARM64_32-NEXT:    ldr w8, [sp, #24]
1027 ; CHECK-O0-ARM64_32-NEXT:    ; kill: def $x8 killed $w8
1028 ; CHECK-O0-ARM64_32-NEXT:    mov w9, w8
1029 ; CHECK-O0-ARM64_32-NEXT:    add w9, w9, #4
1030 ; CHECK-O0-ARM64_32-NEXT:    str w9, [sp, #24]
1031 ; CHECK-O0-ARM64_32-NEXT:    ldr w8, [x8]
1032 ; CHECK-O0-ARM64_32-NEXT:    str w8, [sp, #12]
1033 ; CHECK-O0-ARM64_32-NEXT:    fmov s0, #1.00000000
1034 ; CHECK-O0-ARM64_32-NEXT:    ldr x30, [sp, #32] ; 8-byte Folded Reload
1035 ; CHECK-O0-ARM64_32-NEXT:    add sp, sp, #48
1036 ; CHECK-O0-ARM64_32-NEXT:    ret
1038 ; First vararg
1039 ; Third vararg
1040 ; Second vararg
1044 entry:
1045   %call = call ptr @malloc(i64 16)
1046   store ptr %call, ptr %error_ptr_ref
1047   %tmp = getelementptr inbounds i8, ptr %call, i64 8
1048   store i8 1, ptr %tmp
1050   %args = alloca ptr, align 8
1051   %a10 = alloca i32, align 4
1052   %a11 = alloca i32, align 4
1053   %a12 = alloca i32, align 4
1054   call void @llvm.va_start(ptr %args)
1055   %v11 = va_arg ptr %args, i32
1056   store i32 %v11, ptr %a10, align 4
1057   %v12 = va_arg ptr %args, i32
1058   store i32 %v12, ptr %a11, align 4
1059   %v13 = va_arg ptr %args, i32
1060   store i32 %v13, ptr %a12, align 4
1062   ret float 1.0
1065 ; "caller4" calls "foo_vararg" that takes a swifterror parameter.
1066 define float @caller4(ptr %error_ref) {
1067 ; CHECK-APPLE-AARCH64-LABEL: caller4:
1068 ; CHECK-APPLE-AARCH64:       ; %bb.0: ; %entry
1069 ; CHECK-APPLE-AARCH64-NEXT:    sub sp, sp, #96
1070 ; CHECK-APPLE-AARCH64-NEXT:    stp x22, x21, [sp, #48] ; 16-byte Folded Spill
1071 ; CHECK-APPLE-AARCH64-NEXT:    stp x20, x19, [sp, #64] ; 16-byte Folded Spill
1072 ; CHECK-APPLE-AARCH64-NEXT:    stp x29, x30, [sp, #80] ; 16-byte Folded Spill
1073 ; CHECK-APPLE-AARCH64-NEXT:    add x29, sp, #80
1074 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_def_cfa w29, 16
1075 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w30, -8
1076 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w29, -16
1077 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w19, -24
1078 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w20, -32
1079 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w21, -40
1080 ; CHECK-APPLE-AARCH64-NEXT:    .cfi_offset w22, -48
1081 ; CHECK-APPLE-AARCH64-NEXT:    mov x19, x0
1082 ; CHECK-APPLE-AARCH64-NEXT:    mov w8, #10 ; =0xa
1083 ; CHECK-APPLE-AARCH64-NEXT:    mov w9, #11 ; =0xb
1084 ; CHECK-APPLE-AARCH64-NEXT:    stp w9, w8, [sp, #32]
1085 ; CHECK-APPLE-AARCH64-NEXT:    mov w10, #12 ; =0xc
1086 ; CHECK-APPLE-AARCH64-NEXT:    str w10, [sp, #28]
1087 ; CHECK-APPLE-AARCH64-NEXT:    mov x21, xzr
1088 ; CHECK-APPLE-AARCH64-NEXT:    stp x9, x10, [sp, #8]
1089 ; CHECK-APPLE-AARCH64-NEXT:    str x8, [sp]
1090 ; CHECK-APPLE-AARCH64-NEXT:    bl _foo_vararg
1091 ; CHECK-APPLE-AARCH64-NEXT:    mov x0, x21
1092 ; CHECK-APPLE-AARCH64-NEXT:    cbnz x21, LBB8_2
1093 ; CHECK-APPLE-AARCH64-NEXT:  ; %bb.1: ; %cont
1094 ; CHECK-APPLE-AARCH64-NEXT:    ldrb w8, [x0, #8]
1095 ; CHECK-APPLE-AARCH64-NEXT:    strb w8, [x19]
1096 ; CHECK-APPLE-AARCH64-NEXT:  LBB8_2: ; %handler
1097 ; CHECK-APPLE-AARCH64-NEXT:    bl _free
1098 ; CHECK-APPLE-AARCH64-NEXT:    fmov s0, #1.00000000
1099 ; CHECK-APPLE-AARCH64-NEXT:    ldp x29, x30, [sp, #80] ; 16-byte Folded Reload
1100 ; CHECK-APPLE-AARCH64-NEXT:    ldp x20, x19, [sp, #64] ; 16-byte Folded Reload
1101 ; CHECK-APPLE-AARCH64-NEXT:    ldp x22, x21, [sp, #48] ; 16-byte Folded Reload
1102 ; CHECK-APPLE-AARCH64-NEXT:    add sp, sp, #96
1103 ; CHECK-APPLE-AARCH64-NEXT:    ret
1105 ; CHECK-O0-AARCH64-LABEL: caller4:
1106 ; CHECK-O0-AARCH64:       ; %bb.0: ; %entry
1107 ; CHECK-O0-AARCH64-NEXT:    sub sp, sp, #96
1108 ; CHECK-O0-AARCH64-NEXT:    stp x22, x21, [sp, #64] ; 16-byte Folded Spill
1109 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #80] ; 16-byte Folded Spill
1110 ; CHECK-O0-AARCH64-NEXT:    add x29, sp, #80
1111 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
1112 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
1113 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
1114 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w21, -24
1115 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w22, -32
1116 ; CHECK-O0-AARCH64-NEXT:    ; implicit-def: $x1
1117 ; CHECK-O0-AARCH64-NEXT:    str x0, [sp, #24] ; 8-byte Folded Spill
1118 ; CHECK-O0-AARCH64-NEXT:    mov x21, xzr
1119 ; CHECK-O0-AARCH64-NEXT:    mov w8, #10 ; =0xa
1120 ; CHECK-O0-AARCH64-NEXT:    stur w8, [x29, #-28]
1121 ; CHECK-O0-AARCH64-NEXT:    mov w8, #11 ; =0xb
1122 ; CHECK-O0-AARCH64-NEXT:    stur w8, [x29, #-32]
1123 ; CHECK-O0-AARCH64-NEXT:    mov w8, #12 ; =0xc
1124 ; CHECK-O0-AARCH64-NEXT:    stur w8, [x29, #-36]
1125 ; CHECK-O0-AARCH64-NEXT:    ldur w8, [x29, #-28]
1126 ; CHECK-O0-AARCH64-NEXT:    ; kill: def $x8 killed $w8
1127 ; CHECK-O0-AARCH64-NEXT:    ldur w9, [x29, #-32]
1128 ; CHECK-O0-AARCH64-NEXT:    mov w10, w9
1129 ; CHECK-O0-AARCH64-NEXT:    ldur w9, [x29, #-36]
1130 ; CHECK-O0-AARCH64-NEXT:    mov w11, w9
1131 ; CHECK-O0-AARCH64-NEXT:    mov x9, sp
1132 ; CHECK-O0-AARCH64-NEXT:    str x11, [x9, #16]
1133 ; CHECK-O0-AARCH64-NEXT:    str x10, [x9, #8]
1134 ; CHECK-O0-AARCH64-NEXT:    str x8, [x9]
1135 ; CHECK-O0-AARCH64-NEXT:    bl _foo_vararg
1136 ; CHECK-O0-AARCH64-NEXT:    str x21, [sp, #32] ; 8-byte Folded Spill
1137 ; CHECK-O0-AARCH64-NEXT:    cbnz x21, LBB8_2
1138 ; CHECK-O0-AARCH64-NEXT:  ; %bb.1: ; %cont
1139 ; CHECK-O0-AARCH64-NEXT:    ldr x9, [sp, #24] ; 8-byte Folded Reload
1140 ; CHECK-O0-AARCH64-NEXT:    ldr x8, [sp, #32] ; 8-byte Folded Reload
1141 ; CHECK-O0-AARCH64-NEXT:    ldrb w8, [x8, #8]
1142 ; CHECK-O0-AARCH64-NEXT:    strb w8, [x9]
1143 ; CHECK-O0-AARCH64-NEXT:  LBB8_2: ; %handler
1144 ; CHECK-O0-AARCH64-NEXT:    ldr x0, [sp, #32] ; 8-byte Folded Reload
1145 ; CHECK-O0-AARCH64-NEXT:    bl _free
1146 ; CHECK-O0-AARCH64-NEXT:    fmov s0, #1.00000000
1147 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #80] ; 16-byte Folded Reload
1148 ; CHECK-O0-AARCH64-NEXT:    ldp x22, x21, [sp, #64] ; 16-byte Folded Reload
1149 ; CHECK-O0-AARCH64-NEXT:    add sp, sp, #96
1150 ; CHECK-O0-AARCH64-NEXT:    ret
1152 ; CHECK-APPLE-ARM64_32-LABEL: caller4:
1153 ; CHECK-APPLE-ARM64_32:       ; %bb.0: ; %entry
1154 ; CHECK-APPLE-ARM64_32-NEXT:    sub sp, sp, #80
1155 ; CHECK-APPLE-ARM64_32-NEXT:    stp x22, x21, [sp, #32] ; 16-byte Folded Spill
1156 ; CHECK-APPLE-ARM64_32-NEXT:    stp x20, x19, [sp, #48] ; 16-byte Folded Spill
1157 ; CHECK-APPLE-ARM64_32-NEXT:    stp x29, x30, [sp, #64] ; 16-byte Folded Spill
1158 ; CHECK-APPLE-ARM64_32-NEXT:    add x29, sp, #64
1159 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_def_cfa w29, 16
1160 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w30, -8
1161 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w29, -16
1162 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w19, -24
1163 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w20, -32
1164 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w21, -40
1165 ; CHECK-APPLE-ARM64_32-NEXT:    .cfi_offset w22, -48
1166 ; CHECK-APPLE-ARM64_32-NEXT:    mov x19, x0
1167 ; CHECK-APPLE-ARM64_32-NEXT:    mov w8, #10 ; =0xa
1168 ; CHECK-APPLE-ARM64_32-NEXT:    mov w9, #11 ; =0xb
1169 ; CHECK-APPLE-ARM64_32-NEXT:    stp w9, w8, [sp, #20]
1170 ; CHECK-APPLE-ARM64_32-NEXT:    mov w10, #12 ; =0xc
1171 ; CHECK-APPLE-ARM64_32-NEXT:    str w10, [sp, #16]
1172 ; CHECK-APPLE-ARM64_32-NEXT:    mov x21, xzr
1173 ; CHECK-APPLE-ARM64_32-NEXT:    mov x9, #11 ; =0xb
1174 ; CHECK-APPLE-ARM64_32-NEXT:    movk x9, #12, lsl #32
1175 ; CHECK-APPLE-ARM64_32-NEXT:    stur x9, [sp, #4]
1176 ; CHECK-APPLE-ARM64_32-NEXT:    str w8, [sp]
1177 ; CHECK-APPLE-ARM64_32-NEXT:    bl _foo_vararg
1178 ; CHECK-APPLE-ARM64_32-NEXT:    mov x0, x21
1179 ; CHECK-APPLE-ARM64_32-NEXT:    cbnz w0, LBB8_2
1180 ; CHECK-APPLE-ARM64_32-NEXT:  ; %bb.1: ; %cont
1181 ; CHECK-APPLE-ARM64_32-NEXT:    ldrb w8, [x0, #8]
1182 ; CHECK-APPLE-ARM64_32-NEXT:    strb w8, [x19]
1183 ; CHECK-APPLE-ARM64_32-NEXT:  LBB8_2: ; %handler
1184 ; CHECK-APPLE-ARM64_32-NEXT:    bl _free
1185 ; CHECK-APPLE-ARM64_32-NEXT:    fmov s0, #1.00000000
1186 ; CHECK-APPLE-ARM64_32-NEXT:    ldp x29, x30, [sp, #64] ; 16-byte Folded Reload
1187 ; CHECK-APPLE-ARM64_32-NEXT:    ldp x20, x19, [sp, #48] ; 16-byte Folded Reload
1188 ; CHECK-APPLE-ARM64_32-NEXT:    ldp x22, x21, [sp, #32] ; 16-byte Folded Reload
1189 ; CHECK-APPLE-ARM64_32-NEXT:    add sp, sp, #80
1190 ; CHECK-APPLE-ARM64_32-NEXT:    ret
1192 ; CHECK-O0-ARM64_32-LABEL: caller4:
1193 ; CHECK-O0-ARM64_32:       ; %bb.0: ; %entry
1194 ; CHECK-O0-ARM64_32-NEXT:    sub sp, sp, #80
1195 ; CHECK-O0-ARM64_32-NEXT:    stp x22, x21, [sp, #48] ; 16-byte Folded Spill
1196 ; CHECK-O0-ARM64_32-NEXT:    stp x29, x30, [sp, #64] ; 16-byte Folded Spill
1197 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 80
1198 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -8
1199 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w29, -16
1200 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w21, -24
1201 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w22, -32
1202 ; CHECK-O0-ARM64_32-NEXT:    ; implicit-def: $x1
1203 ; CHECK-O0-ARM64_32-NEXT:    str x0, [sp, #16] ; 8-byte Folded Spill
1204 ; CHECK-O0-ARM64_32-NEXT:    mov x21, xzr
1205 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #10 ; =0xa
1206 ; CHECK-O0-ARM64_32-NEXT:    str w8, [sp, #40]
1207 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #11 ; =0xb
1208 ; CHECK-O0-ARM64_32-NEXT:    str w8, [sp, #36]
1209 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #12 ; =0xc
1210 ; CHECK-O0-ARM64_32-NEXT:    str w8, [sp, #32]
1211 ; CHECK-O0-ARM64_32-NEXT:    ldr w8, [sp, #40]
1212 ; CHECK-O0-ARM64_32-NEXT:    ldr w10, [sp, #36]
1213 ; CHECK-O0-ARM64_32-NEXT:    ldr w11, [sp, #32]
1214 ; CHECK-O0-ARM64_32-NEXT:    mov x9, sp
1215 ; CHECK-O0-ARM64_32-NEXT:    str w11, [x9, #8]
1216 ; CHECK-O0-ARM64_32-NEXT:    str w10, [x9, #4]
1217 ; CHECK-O0-ARM64_32-NEXT:    str w8, [x9]
1218 ; CHECK-O0-ARM64_32-NEXT:    bl _foo_vararg
1219 ; CHECK-O0-ARM64_32-NEXT:    str x21, [sp, #24] ; 8-byte Folded Spill
1220 ; CHECK-O0-ARM64_32-NEXT:    cmp x21, #0
1221 ; CHECK-O0-ARM64_32-NEXT:    b.ne LBB8_2
1222 ; CHECK-O0-ARM64_32-NEXT:  ; %bb.1: ; %cont
1223 ; CHECK-O0-ARM64_32-NEXT:    ldr x9, [sp, #16] ; 8-byte Folded Reload
1224 ; CHECK-O0-ARM64_32-NEXT:    ldr x8, [sp, #24] ; 8-byte Folded Reload
1225 ; CHECK-O0-ARM64_32-NEXT:    ldrb w8, [x8, #8]
1226 ; CHECK-O0-ARM64_32-NEXT:    ; kill: def $w0 killed $w8
1227 ; CHECK-O0-ARM64_32-NEXT:    strb w8, [x9]
1228 ; CHECK-O0-ARM64_32-NEXT:  LBB8_2: ; %handler
1229 ; CHECK-O0-ARM64_32-NEXT:    ldr x0, [sp, #24] ; 8-byte Folded Reload
1230 ; CHECK-O0-ARM64_32-NEXT:    bl _free
1231 ; CHECK-O0-ARM64_32-NEXT:    fmov s0, #1.00000000
1232 ; CHECK-O0-ARM64_32-NEXT:    ldp x29, x30, [sp, #64] ; 16-byte Folded Reload
1233 ; CHECK-O0-ARM64_32-NEXT:    ldp x22, x21, [sp, #48] ; 16-byte Folded Reload
1234 ; CHECK-O0-ARM64_32-NEXT:    add sp, sp, #80
1235 ; CHECK-O0-ARM64_32-NEXT:    ret
1238 ; Access part of the error object and save it to error_ref
1239 entry:
1240   %error_ptr_ref = alloca swifterror ptr
1241   store ptr null, ptr %error_ptr_ref
1243   %a10 = alloca i32, align 4
1244   %a11 = alloca i32, align 4
1245   %a12 = alloca i32, align 4
1246   store i32 10, ptr %a10, align 4
1247   store i32 11, ptr %a11, align 4
1248   store i32 12, ptr %a12, align 4
1249   %v10 = load i32, ptr %a10, align 4
1250   %v11 = load i32, ptr %a11, align 4
1251   %v12 = load i32, ptr %a12, align 4
1253   %call = call float (ptr, ...) @foo_vararg(ptr swifterror %error_ptr_ref, i32 %v10, i32 %v11, i32 %v12)
1254   %error_from_foo = load ptr, ptr %error_ptr_ref
1255   %had_error_from_foo = icmp ne ptr %error_from_foo, null
1256   br i1 %had_error_from_foo, label %handler, label %cont
1258 cont:
1259   %v1 = getelementptr inbounds %swift_error, ptr %error_from_foo, i64 0, i32 1
1260   %t = load i8, ptr %v1
1261   store i8 %t, ptr %error_ref
1262   br label %handler
1263 handler:
1264   call void @free(ptr %error_from_foo)
1265   ret float 1.0
1268 ; Check that we don't blow up on tail calling swifterror argument functions.
1269 define float @tailcallswifterror(ptr swifterror %error_ptr_ref) {
1270 ; CHECK-APPLE-LABEL: tailcallswifterror:
1271 ; CHECK-APPLE:       ; %bb.0: ; %entry
1272 ; CHECK-APPLE-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
1273 ; CHECK-APPLE-NEXT:    mov x29, sp
1274 ; CHECK-APPLE-NEXT:    .cfi_def_cfa w29, 16
1275 ; CHECK-APPLE-NEXT:    .cfi_offset w30, -8
1276 ; CHECK-APPLE-NEXT:    .cfi_offset w29, -16
1277 ; CHECK-APPLE-NEXT:    bl _tailcallswifterror
1278 ; CHECK-APPLE-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
1279 ; CHECK-APPLE-NEXT:    ret
1281 ; CHECK-O0-AARCH64-LABEL: tailcallswifterror:
1282 ; CHECK-O0-AARCH64:       ; %bb.0: ; %entry
1283 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
1284 ; CHECK-O0-AARCH64-NEXT:    mov x29, sp
1285 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
1286 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
1287 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
1288 ; CHECK-O0-AARCH64-NEXT:    bl _tailcallswifterror
1289 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
1290 ; CHECK-O0-AARCH64-NEXT:    ret
1292 ; CHECK-O0-ARM64_32-LABEL: tailcallswifterror:
1293 ; CHECK-O0-ARM64_32:       ; %bb.0: ; %entry
1294 ; CHECK-O0-ARM64_32-NEXT:    str x30, [sp, #-16]! ; 8-byte Folded Spill
1295 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 16
1296 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -16
1297 ; CHECK-O0-ARM64_32-NEXT:    bl _tailcallswifterror
1298 ; CHECK-O0-ARM64_32-NEXT:    ldr x30, [sp], #16 ; 8-byte Folded Reload
1299 ; CHECK-O0-ARM64_32-NEXT:    ret
1300 entry:
1301   %0 = tail call float @tailcallswifterror(ptr swifterror %error_ptr_ref)
1302   ret float %0
1304 define swiftcc float @tailcallswifterror_swiftcc(ptr swifterror %error_ptr_ref) {
1305 ; CHECK-APPLE-LABEL: tailcallswifterror_swiftcc:
1306 ; CHECK-APPLE:       ; %bb.0: ; %entry
1307 ; CHECK-APPLE-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
1308 ; CHECK-APPLE-NEXT:    mov x29, sp
1309 ; CHECK-APPLE-NEXT:    .cfi_def_cfa w29, 16
1310 ; CHECK-APPLE-NEXT:    .cfi_offset w30, -8
1311 ; CHECK-APPLE-NEXT:    .cfi_offset w29, -16
1312 ; CHECK-APPLE-NEXT:    bl _tailcallswifterror_swiftcc
1313 ; CHECK-APPLE-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
1314 ; CHECK-APPLE-NEXT:    ret
1316 ; CHECK-O0-AARCH64-LABEL: tailcallswifterror_swiftcc:
1317 ; CHECK-O0-AARCH64:       ; %bb.0: ; %entry
1318 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
1319 ; CHECK-O0-AARCH64-NEXT:    mov x29, sp
1320 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
1321 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
1322 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
1323 ; CHECK-O0-AARCH64-NEXT:    bl _tailcallswifterror_swiftcc
1324 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
1325 ; CHECK-O0-AARCH64-NEXT:    ret
1327 ; CHECK-O0-ARM64_32-LABEL: tailcallswifterror_swiftcc:
1328 ; CHECK-O0-ARM64_32:       ; %bb.0: ; %entry
1329 ; CHECK-O0-ARM64_32-NEXT:    str x30, [sp, #-16]! ; 8-byte Folded Spill
1330 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 16
1331 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -16
1332 ; CHECK-O0-ARM64_32-NEXT:    bl _tailcallswifterror_swiftcc
1333 ; CHECK-O0-ARM64_32-NEXT:    ldr x30, [sp], #16 ; 8-byte Folded Reload
1334 ; CHECK-O0-ARM64_32-NEXT:    ret
1335 entry:
1336   %0 = tail call swiftcc float @tailcallswifterror_swiftcc(ptr swifterror %error_ptr_ref)
1337   ret float %0
1340 define swiftcc void @swifterror_clobber(ptr nocapture swifterror %err) {
1341 ; CHECK-APPLE-LABEL: swifterror_clobber:
1342 ; CHECK-APPLE:       ; %bb.0:
1343 ; CHECK-APPLE-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
1344 ; CHECK-APPLE-NEXT:    mov x29, sp
1345 ; CHECK-APPLE-NEXT:    .cfi_def_cfa w29, 16
1346 ; CHECK-APPLE-NEXT:    .cfi_offset w30, -8
1347 ; CHECK-APPLE-NEXT:    .cfi_offset w29, -16
1348 ; CHECK-APPLE-NEXT:    mov x8, x21
1349 ; CHECK-APPLE-NEXT:    ; InlineAsm Start
1350 ; CHECK-APPLE-NEXT:    nop
1351 ; CHECK-APPLE-NEXT:    ; InlineAsm End
1352 ; CHECK-APPLE-NEXT:    mov x21, x8
1353 ; CHECK-APPLE-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
1354 ; CHECK-APPLE-NEXT:    ret
1356 ; CHECK-O0-AARCH64-LABEL: swifterror_clobber:
1357 ; CHECK-O0-AARCH64:       ; %bb.0:
1358 ; CHECK-O0-AARCH64-NEXT:    sub sp, sp, #32
1359 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
1360 ; CHECK-O0-AARCH64-NEXT:    add x29, sp, #16
1361 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
1362 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
1363 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
1364 ; CHECK-O0-AARCH64-NEXT:    str x21, [sp, #8] ; 8-byte Folded Spill
1365 ; CHECK-O0-AARCH64-NEXT:    ; InlineAsm Start
1366 ; CHECK-O0-AARCH64-NEXT:    nop
1367 ; CHECK-O0-AARCH64-NEXT:    ; InlineAsm End
1368 ; CHECK-O0-AARCH64-NEXT:    ldr x21, [sp, #8] ; 8-byte Folded Reload
1369 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
1370 ; CHECK-O0-AARCH64-NEXT:    add sp, sp, #32
1371 ; CHECK-O0-AARCH64-NEXT:    ret
1373 ; CHECK-O0-ARM64_32-LABEL: swifterror_clobber:
1374 ; CHECK-O0-ARM64_32:       ; %bb.0:
1375 ; CHECK-O0-ARM64_32-NEXT:    sub sp, sp, #16
1376 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 16
1377 ; CHECK-O0-ARM64_32-NEXT:    str x21, [sp, #8] ; 8-byte Folded Spill
1378 ; CHECK-O0-ARM64_32-NEXT:    ; InlineAsm Start
1379 ; CHECK-O0-ARM64_32-NEXT:    nop
1380 ; CHECK-O0-ARM64_32-NEXT:    ; InlineAsm End
1381 ; CHECK-O0-ARM64_32-NEXT:    ldr x21, [sp, #8] ; 8-byte Folded Reload
1382 ; CHECK-O0-ARM64_32-NEXT:    add sp, sp, #16
1383 ; CHECK-O0-ARM64_32-NEXT:    ret
1384   call void asm sideeffect "nop", "~{x21}"()
1385   ret void
1388 define swiftcc void @swifterror_reg_clobber(ptr nocapture %err) {
1389 ; CHECK-APPLE-LABEL: swifterror_reg_clobber:
1390 ; CHECK-APPLE:       ; %bb.0:
1391 ; CHECK-APPLE-NEXT:    stp x22, x21, [sp, #-32]! ; 16-byte Folded Spill
1392 ; CHECK-APPLE-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
1393 ; CHECK-APPLE-NEXT:    add x29, sp, #16
1394 ; CHECK-APPLE-NEXT:    .cfi_def_cfa w29, 16
1395 ; CHECK-APPLE-NEXT:    .cfi_offset w30, -8
1396 ; CHECK-APPLE-NEXT:    .cfi_offset w29, -16
1397 ; CHECK-APPLE-NEXT:    .cfi_offset w21, -24
1398 ; CHECK-APPLE-NEXT:    .cfi_offset w22, -32
1399 ; CHECK-APPLE-NEXT:    ; InlineAsm Start
1400 ; CHECK-APPLE-NEXT:    nop
1401 ; CHECK-APPLE-NEXT:    ; InlineAsm End
1402 ; CHECK-APPLE-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
1403 ; CHECK-APPLE-NEXT:    ldp x22, x21, [sp], #32 ; 16-byte Folded Reload
1404 ; CHECK-APPLE-NEXT:    ret
1406 ; CHECK-O0-AARCH64-LABEL: swifterror_reg_clobber:
1407 ; CHECK-O0-AARCH64:       ; %bb.0:
1408 ; CHECK-O0-AARCH64-NEXT:    stp x22, x21, [sp, #-32]! ; 16-byte Folded Spill
1409 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
1410 ; CHECK-O0-AARCH64-NEXT:    add x29, sp, #16
1411 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
1412 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
1413 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
1414 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w21, -24
1415 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w22, -32
1416 ; CHECK-O0-AARCH64-NEXT:    ; InlineAsm Start
1417 ; CHECK-O0-AARCH64-NEXT:    nop
1418 ; CHECK-O0-AARCH64-NEXT:    ; InlineAsm End
1419 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
1420 ; CHECK-O0-AARCH64-NEXT:    ldp x22, x21, [sp], #32 ; 16-byte Folded Reload
1421 ; CHECK-O0-AARCH64-NEXT:    ret
1423 ; CHECK-O0-ARM64_32-LABEL: swifterror_reg_clobber:
1424 ; CHECK-O0-ARM64_32:       ; %bb.0:
1425 ; CHECK-O0-ARM64_32-NEXT:    stp x22, x21, [sp, #-16]! ; 16-byte Folded Spill
1426 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 16
1427 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w21, -8
1428 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w22, -16
1429 ; CHECK-O0-ARM64_32-NEXT:    ; InlineAsm Start
1430 ; CHECK-O0-ARM64_32-NEXT:    nop
1431 ; CHECK-O0-ARM64_32-NEXT:    ; InlineAsm End
1432 ; CHECK-O0-ARM64_32-NEXT:    ldp x22, x21, [sp], #16 ; 16-byte Folded Reload
1433 ; CHECK-O0-ARM64_32-NEXT:    ret
1434   call void asm sideeffect "nop", "~{x21}"()
1435   ret void
1438 define swiftcc void @params_in_reg(i64, i64, i64, i64, i64, i64, i64, i64, ptr swiftself, ptr nocapture swifterror %err) {
1439 ; CHECK-APPLE-LABEL: params_in_reg:
1440 ; CHECK-APPLE:       ; %bb.0:
1441 ; CHECK-APPLE-NEXT:    sub sp, sp, #112
1442 ; CHECK-APPLE-NEXT:    stp x21, x28, [sp, #8] ; 16-byte Folded Spill
1443 ; CHECK-APPLE-NEXT:    stp x27, x26, [sp, #32] ; 16-byte Folded Spill
1444 ; CHECK-APPLE-NEXT:    stp x25, x24, [sp, #48] ; 16-byte Folded Spill
1445 ; CHECK-APPLE-NEXT:    stp x23, x22, [sp, #64] ; 16-byte Folded Spill
1446 ; CHECK-APPLE-NEXT:    stp x20, x19, [sp, #80] ; 16-byte Folded Spill
1447 ; CHECK-APPLE-NEXT:    stp x29, x30, [sp, #96] ; 16-byte Folded Spill
1448 ; CHECK-APPLE-NEXT:    add x29, sp, #96
1449 ; CHECK-APPLE-NEXT:    .cfi_def_cfa w29, 16
1450 ; CHECK-APPLE-NEXT:    .cfi_offset w30, -8
1451 ; CHECK-APPLE-NEXT:    .cfi_offset w29, -16
1452 ; CHECK-APPLE-NEXT:    .cfi_offset w19, -24
1453 ; CHECK-APPLE-NEXT:    .cfi_offset w20, -32
1454 ; CHECK-APPLE-NEXT:    .cfi_offset w22, -40
1455 ; CHECK-APPLE-NEXT:    .cfi_offset w23, -48
1456 ; CHECK-APPLE-NEXT:    .cfi_offset w24, -56
1457 ; CHECK-APPLE-NEXT:    .cfi_offset w25, -64
1458 ; CHECK-APPLE-NEXT:    .cfi_offset w26, -72
1459 ; CHECK-APPLE-NEXT:    .cfi_offset w27, -80
1460 ; CHECK-APPLE-NEXT:    .cfi_offset w28, -96
1461 ; CHECK-APPLE-NEXT:    str x20, [sp] ; 8-byte Folded Spill
1462 ; CHECK-APPLE-NEXT:    mov x23, x7
1463 ; CHECK-APPLE-NEXT:    mov x24, x6
1464 ; CHECK-APPLE-NEXT:    mov x25, x5
1465 ; CHECK-APPLE-NEXT:    mov x26, x4
1466 ; CHECK-APPLE-NEXT:    mov x27, x3
1467 ; CHECK-APPLE-NEXT:    mov x28, x2
1468 ; CHECK-APPLE-NEXT:    mov x19, x1
1469 ; CHECK-APPLE-NEXT:    mov x22, x0
1470 ; CHECK-APPLE-NEXT:    mov w0, #1 ; =0x1
1471 ; CHECK-APPLE-NEXT:    mov w1, #2 ; =0x2
1472 ; CHECK-APPLE-NEXT:    mov w2, #3 ; =0x3
1473 ; CHECK-APPLE-NEXT:    mov w3, #4 ; =0x4
1474 ; CHECK-APPLE-NEXT:    mov w4, #5 ; =0x5
1475 ; CHECK-APPLE-NEXT:    mov w5, #6 ; =0x6
1476 ; CHECK-APPLE-NEXT:    mov w6, #7 ; =0x7
1477 ; CHECK-APPLE-NEXT:    mov w7, #8 ; =0x8
1478 ; CHECK-APPLE-NEXT:    mov x20, xzr
1479 ; CHECK-APPLE-NEXT:    mov x21, xzr
1480 ; CHECK-APPLE-NEXT:    bl _params_in_reg2
1481 ; CHECK-APPLE-NEXT:    mov x0, x22
1482 ; CHECK-APPLE-NEXT:    mov x1, x19
1483 ; CHECK-APPLE-NEXT:    mov x2, x28
1484 ; CHECK-APPLE-NEXT:    mov x3, x27
1485 ; CHECK-APPLE-NEXT:    mov x4, x26
1486 ; CHECK-APPLE-NEXT:    mov x5, x25
1487 ; CHECK-APPLE-NEXT:    mov x6, x24
1488 ; CHECK-APPLE-NEXT:    mov x7, x23
1489 ; CHECK-APPLE-NEXT:    ldp x20, x21, [sp] ; 16-byte Folded Reload
1490 ; CHECK-APPLE-NEXT:    bl _params_in_reg2
1491 ; CHECK-APPLE-NEXT:    ldp x29, x30, [sp, #96] ; 16-byte Folded Reload
1492 ; CHECK-APPLE-NEXT:    ldp x20, x19, [sp, #80] ; 16-byte Folded Reload
1493 ; CHECK-APPLE-NEXT:    ldp x23, x22, [sp, #64] ; 16-byte Folded Reload
1494 ; CHECK-APPLE-NEXT:    ldp x25, x24, [sp, #48] ; 16-byte Folded Reload
1495 ; CHECK-APPLE-NEXT:    ldp x27, x26, [sp, #32] ; 16-byte Folded Reload
1496 ; CHECK-APPLE-NEXT:    ldr x28, [sp, #16] ; 8-byte Folded Reload
1497 ; CHECK-APPLE-NEXT:    add sp, sp, #112
1498 ; CHECK-APPLE-NEXT:    ret
1500 ; CHECK-O0-AARCH64-LABEL: params_in_reg:
1501 ; CHECK-O0-AARCH64:       ; %bb.0:
1502 ; CHECK-O0-AARCH64-NEXT:    sub sp, sp, #128
1503 ; CHECK-O0-AARCH64-NEXT:    str x20, [sp, #96] ; 8-byte Folded Spill
1504 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #112] ; 16-byte Folded Spill
1505 ; CHECK-O0-AARCH64-NEXT:    add x29, sp, #112
1506 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
1507 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
1508 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
1509 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w20, -32
1510 ; CHECK-O0-AARCH64-NEXT:    stur x21, [x29, #-32] ; 8-byte Folded Spill
1511 ; CHECK-O0-AARCH64-NEXT:    str x20, [sp, #8] ; 8-byte Folded Spill
1512 ; CHECK-O0-AARCH64-NEXT:    stur x7, [x29, #-40] ; 8-byte Folded Spill
1513 ; CHECK-O0-AARCH64-NEXT:    stur x6, [x29, #-48] ; 8-byte Folded Spill
1514 ; CHECK-O0-AARCH64-NEXT:    str x5, [sp, #56] ; 8-byte Folded Spill
1515 ; CHECK-O0-AARCH64-NEXT:    str x4, [sp, #48] ; 8-byte Folded Spill
1516 ; CHECK-O0-AARCH64-NEXT:    str x3, [sp, #40] ; 8-byte Folded Spill
1517 ; CHECK-O0-AARCH64-NEXT:    str x2, [sp, #32] ; 8-byte Folded Spill
1518 ; CHECK-O0-AARCH64-NEXT:    str x1, [sp, #24] ; 8-byte Folded Spill
1519 ; CHECK-O0-AARCH64-NEXT:    str x0, [sp, #16] ; 8-byte Folded Spill
1520 ; CHECK-O0-AARCH64-NEXT:    ; implicit-def: $x0
1521 ; CHECK-O0-AARCH64-NEXT:    mov x20, xzr
1522 ; CHECK-O0-AARCH64-NEXT:    mov x21, x20
1523 ; CHECK-O0-AARCH64-NEXT:    mov w8, #1 ; =0x1
1524 ; CHECK-O0-AARCH64-NEXT:    mov w0, w8
1525 ; CHECK-O0-AARCH64-NEXT:    mov w8, #2 ; =0x2
1526 ; CHECK-O0-AARCH64-NEXT:    mov w1, w8
1527 ; CHECK-O0-AARCH64-NEXT:    mov w8, #3 ; =0x3
1528 ; CHECK-O0-AARCH64-NEXT:    mov w2, w8
1529 ; CHECK-O0-AARCH64-NEXT:    mov w8, #4 ; =0x4
1530 ; CHECK-O0-AARCH64-NEXT:    mov w3, w8
1531 ; CHECK-O0-AARCH64-NEXT:    mov w8, #5 ; =0x5
1532 ; CHECK-O0-AARCH64-NEXT:    mov w4, w8
1533 ; CHECK-O0-AARCH64-NEXT:    mov w8, #6 ; =0x6
1534 ; CHECK-O0-AARCH64-NEXT:    mov w5, w8
1535 ; CHECK-O0-AARCH64-NEXT:    mov w8, #7 ; =0x7
1536 ; CHECK-O0-AARCH64-NEXT:    mov w6, w8
1537 ; CHECK-O0-AARCH64-NEXT:    mov w8, #8 ; =0x8
1538 ; CHECK-O0-AARCH64-NEXT:    mov w7, w8
1539 ; CHECK-O0-AARCH64-NEXT:    bl _params_in_reg2
1540 ; CHECK-O0-AARCH64-NEXT:    ldr x20, [sp, #8] ; 8-byte Folded Reload
1541 ; CHECK-O0-AARCH64-NEXT:    ldr x0, [sp, #16] ; 8-byte Folded Reload
1542 ; CHECK-O0-AARCH64-NEXT:    ldr x1, [sp, #24] ; 8-byte Folded Reload
1543 ; CHECK-O0-AARCH64-NEXT:    ldr x2, [sp, #32] ; 8-byte Folded Reload
1544 ; CHECK-O0-AARCH64-NEXT:    ldr x3, [sp, #40] ; 8-byte Folded Reload
1545 ; CHECK-O0-AARCH64-NEXT:    ldr x4, [sp, #48] ; 8-byte Folded Reload
1546 ; CHECK-O0-AARCH64-NEXT:    ldr x5, [sp, #56] ; 8-byte Folded Reload
1547 ; CHECK-O0-AARCH64-NEXT:    ldur x6, [x29, #-48] ; 8-byte Folded Reload
1548 ; CHECK-O0-AARCH64-NEXT:    ldur x7, [x29, #-40] ; 8-byte Folded Reload
1549 ; CHECK-O0-AARCH64-NEXT:    mov x8, x21
1550 ; CHECK-O0-AARCH64-NEXT:    ldur x21, [x29, #-32] ; 8-byte Folded Reload
1551 ; CHECK-O0-AARCH64-NEXT:    bl _params_in_reg2
1552 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #112] ; 16-byte Folded Reload
1553 ; CHECK-O0-AARCH64-NEXT:    ldr x20, [sp, #96] ; 8-byte Folded Reload
1554 ; CHECK-O0-AARCH64-NEXT:    add sp, sp, #128
1555 ; CHECK-O0-AARCH64-NEXT:    ret
1557 ; CHECK-O0-ARM64_32-LABEL: params_in_reg:
1558 ; CHECK-O0-ARM64_32:       ; %bb.0:
1559 ; CHECK-O0-ARM64_32-NEXT:    sub sp, sp, #112
1560 ; CHECK-O0-ARM64_32-NEXT:    stp x20, x30, [sp, #96] ; 16-byte Folded Spill
1561 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 112
1562 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -8
1563 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w20, -16
1564 ; CHECK-O0-ARM64_32-NEXT:    str x21, [sp, #80] ; 8-byte Folded Spill
1565 ; CHECK-O0-ARM64_32-NEXT:    str x20, [sp, #8] ; 8-byte Folded Spill
1566 ; CHECK-O0-ARM64_32-NEXT:    str x7, [sp, #72] ; 8-byte Folded Spill
1567 ; CHECK-O0-ARM64_32-NEXT:    str x6, [sp, #64] ; 8-byte Folded Spill
1568 ; CHECK-O0-ARM64_32-NEXT:    str x5, [sp, #56] ; 8-byte Folded Spill
1569 ; CHECK-O0-ARM64_32-NEXT:    str x4, [sp, #48] ; 8-byte Folded Spill
1570 ; CHECK-O0-ARM64_32-NEXT:    str x3, [sp, #40] ; 8-byte Folded Spill
1571 ; CHECK-O0-ARM64_32-NEXT:    str x2, [sp, #32] ; 8-byte Folded Spill
1572 ; CHECK-O0-ARM64_32-NEXT:    str x1, [sp, #24] ; 8-byte Folded Spill
1573 ; CHECK-O0-ARM64_32-NEXT:    str x0, [sp, #16] ; 8-byte Folded Spill
1574 ; CHECK-O0-ARM64_32-NEXT:    ; implicit-def: $x0
1575 ; CHECK-O0-ARM64_32-NEXT:    mov x20, xzr
1576 ; CHECK-O0-ARM64_32-NEXT:    mov x21, x20
1577 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #1 ; =0x1
1578 ; CHECK-O0-ARM64_32-NEXT:    mov w0, w8
1579 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #2 ; =0x2
1580 ; CHECK-O0-ARM64_32-NEXT:    mov w1, w8
1581 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #3 ; =0x3
1582 ; CHECK-O0-ARM64_32-NEXT:    mov w2, w8
1583 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #4 ; =0x4
1584 ; CHECK-O0-ARM64_32-NEXT:    mov w3, w8
1585 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #5 ; =0x5
1586 ; CHECK-O0-ARM64_32-NEXT:    mov w4, w8
1587 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #6 ; =0x6
1588 ; CHECK-O0-ARM64_32-NEXT:    mov w5, w8
1589 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #7 ; =0x7
1590 ; CHECK-O0-ARM64_32-NEXT:    mov w6, w8
1591 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #8 ; =0x8
1592 ; CHECK-O0-ARM64_32-NEXT:    mov w7, w8
1593 ; CHECK-O0-ARM64_32-NEXT:    bl _params_in_reg2
1594 ; CHECK-O0-ARM64_32-NEXT:    ldr x20, [sp, #8] ; 8-byte Folded Reload
1595 ; CHECK-O0-ARM64_32-NEXT:    ldr x0, [sp, #16] ; 8-byte Folded Reload
1596 ; CHECK-O0-ARM64_32-NEXT:    ldr x1, [sp, #24] ; 8-byte Folded Reload
1597 ; CHECK-O0-ARM64_32-NEXT:    ldr x2, [sp, #32] ; 8-byte Folded Reload
1598 ; CHECK-O0-ARM64_32-NEXT:    ldr x3, [sp, #40] ; 8-byte Folded Reload
1599 ; CHECK-O0-ARM64_32-NEXT:    ldr x4, [sp, #48] ; 8-byte Folded Reload
1600 ; CHECK-O0-ARM64_32-NEXT:    ldr x5, [sp, #56] ; 8-byte Folded Reload
1601 ; CHECK-O0-ARM64_32-NEXT:    ldr x6, [sp, #64] ; 8-byte Folded Reload
1602 ; CHECK-O0-ARM64_32-NEXT:    ldr x7, [sp, #72] ; 8-byte Folded Reload
1603 ; CHECK-O0-ARM64_32-NEXT:    mov x8, x21
1604 ; CHECK-O0-ARM64_32-NEXT:    ldr x21, [sp, #80] ; 8-byte Folded Reload
1605 ; CHECK-O0-ARM64_32-NEXT:    bl _params_in_reg2
1606 ; CHECK-O0-ARM64_32-NEXT:    ldp x20, x30, [sp, #96] ; 16-byte Folded Reload
1607 ; CHECK-O0-ARM64_32-NEXT:    add sp, sp, #112
1608 ; CHECK-O0-ARM64_32-NEXT:    ret
1609   %error_ptr_ref = alloca swifterror ptr, align 8
1610   store ptr null, ptr %error_ptr_ref
1611   call swiftcc void @params_in_reg2(i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, ptr swiftself null, ptr nocapture swifterror %error_ptr_ref)
1612   call swiftcc void @params_in_reg2(i64 %0, i64 %1, i64 %2, i64 %3, i64 %4, i64 %5, i64 %6, i64 %7, ptr swiftself %8, ptr nocapture swifterror %err)
1613   ret void
1615 declare swiftcc void @params_in_reg2(i64, i64, i64, i64, i64, i64, i64, i64, ptr swiftself, ptr nocapture swifterror %err)
1617 define swiftcc { i64, i64, i64, i64, i64, i64, i64, i64 } @params_and_return_in_reg(i64, i64, i64, i64, i64, i64, i64, i64, ptr swiftself, ptr nocapture swifterror %err) {
1618 ; CHECK-APPLE-LABEL: params_and_return_in_reg:
1619 ; CHECK-APPLE:       ; %bb.0:
1620 ; CHECK-APPLE-NEXT:    sub sp, sp, #128
1621 ; CHECK-APPLE-NEXT:    stp x20, x28, [sp, #24] ; 16-byte Folded Spill
1622 ; CHECK-APPLE-NEXT:    stp x27, x26, [sp, #48] ; 16-byte Folded Spill
1623 ; CHECK-APPLE-NEXT:    stp x25, x24, [sp, #64] ; 16-byte Folded Spill
1624 ; CHECK-APPLE-NEXT:    stp x23, x22, [sp, #80] ; 16-byte Folded Spill
1625 ; CHECK-APPLE-NEXT:    stp x20, x19, [sp, #96] ; 16-byte Folded Spill
1626 ; CHECK-APPLE-NEXT:    stp x29, x30, [sp, #112] ; 16-byte Folded Spill
1627 ; CHECK-APPLE-NEXT:    add x29, sp, #112
1628 ; CHECK-APPLE-NEXT:    .cfi_def_cfa w29, 16
1629 ; CHECK-APPLE-NEXT:    .cfi_offset w30, -8
1630 ; CHECK-APPLE-NEXT:    .cfi_offset w29, -16
1631 ; CHECK-APPLE-NEXT:    .cfi_offset w19, -24
1632 ; CHECK-APPLE-NEXT:    .cfi_offset w20, -32
1633 ; CHECK-APPLE-NEXT:    .cfi_offset w22, -40
1634 ; CHECK-APPLE-NEXT:    .cfi_offset w23, -48
1635 ; CHECK-APPLE-NEXT:    .cfi_offset w24, -56
1636 ; CHECK-APPLE-NEXT:    .cfi_offset w25, -64
1637 ; CHECK-APPLE-NEXT:    .cfi_offset w26, -72
1638 ; CHECK-APPLE-NEXT:    .cfi_offset w27, -80
1639 ; CHECK-APPLE-NEXT:    .cfi_offset w28, -96
1640 ; CHECK-APPLE-NEXT:    mov x23, x21
1641 ; CHECK-APPLE-NEXT:    str x7, [sp, #16] ; 8-byte Folded Spill
1642 ; CHECK-APPLE-NEXT:    mov x24, x6
1643 ; CHECK-APPLE-NEXT:    mov x25, x5
1644 ; CHECK-APPLE-NEXT:    mov x26, x4
1645 ; CHECK-APPLE-NEXT:    mov x27, x3
1646 ; CHECK-APPLE-NEXT:    mov x28, x2
1647 ; CHECK-APPLE-NEXT:    mov x19, x1
1648 ; CHECK-APPLE-NEXT:    mov x22, x0
1649 ; CHECK-APPLE-NEXT:    mov w0, #1 ; =0x1
1650 ; CHECK-APPLE-NEXT:    mov w1, #2 ; =0x2
1651 ; CHECK-APPLE-NEXT:    mov w2, #3 ; =0x3
1652 ; CHECK-APPLE-NEXT:    mov w3, #4 ; =0x4
1653 ; CHECK-APPLE-NEXT:    mov w4, #5 ; =0x5
1654 ; CHECK-APPLE-NEXT:    mov w5, #6 ; =0x6
1655 ; CHECK-APPLE-NEXT:    mov w6, #7 ; =0x7
1656 ; CHECK-APPLE-NEXT:    mov w7, #8 ; =0x8
1657 ; CHECK-APPLE-NEXT:    mov x20, xzr
1658 ; CHECK-APPLE-NEXT:    mov x21, xzr
1659 ; CHECK-APPLE-NEXT:    bl _params_in_reg2
1660 ; CHECK-APPLE-NEXT:    str x21, [sp, #8] ; 8-byte Folded Spill
1661 ; CHECK-APPLE-NEXT:    mov x0, x22
1662 ; CHECK-APPLE-NEXT:    mov x1, x19
1663 ; CHECK-APPLE-NEXT:    mov x2, x28
1664 ; CHECK-APPLE-NEXT:    mov x3, x27
1665 ; CHECK-APPLE-NEXT:    mov x4, x26
1666 ; CHECK-APPLE-NEXT:    mov x5, x25
1667 ; CHECK-APPLE-NEXT:    mov x6, x24
1668 ; CHECK-APPLE-NEXT:    ldp x7, x20, [sp, #16] ; 16-byte Folded Reload
1669 ; CHECK-APPLE-NEXT:    mov x21, x23
1670 ; CHECK-APPLE-NEXT:    bl _params_and_return_in_reg2
1671 ; CHECK-APPLE-NEXT:    mov x19, x0
1672 ; CHECK-APPLE-NEXT:    mov x22, x1
1673 ; CHECK-APPLE-NEXT:    mov x24, x2
1674 ; CHECK-APPLE-NEXT:    mov x25, x3
1675 ; CHECK-APPLE-NEXT:    mov x26, x4
1676 ; CHECK-APPLE-NEXT:    mov x27, x5
1677 ; CHECK-APPLE-NEXT:    mov x28, x6
1678 ; CHECK-APPLE-NEXT:    mov x23, x7
1679 ; CHECK-APPLE-NEXT:    str x21, [sp, #24] ; 8-byte Folded Spill
1680 ; CHECK-APPLE-NEXT:    mov w0, #1 ; =0x1
1681 ; CHECK-APPLE-NEXT:    mov w1, #2 ; =0x2
1682 ; CHECK-APPLE-NEXT:    mov w2, #3 ; =0x3
1683 ; CHECK-APPLE-NEXT:    mov w3, #4 ; =0x4
1684 ; CHECK-APPLE-NEXT:    mov w4, #5 ; =0x5
1685 ; CHECK-APPLE-NEXT:    mov w5, #6 ; =0x6
1686 ; CHECK-APPLE-NEXT:    mov w6, #7 ; =0x7
1687 ; CHECK-APPLE-NEXT:    mov w7, #8 ; =0x8
1688 ; CHECK-APPLE-NEXT:    mov x20, xzr
1689 ; CHECK-APPLE-NEXT:    ldr x21, [sp, #8] ; 8-byte Folded Reload
1690 ; CHECK-APPLE-NEXT:    bl _params_in_reg2
1691 ; CHECK-APPLE-NEXT:    mov x0, x19
1692 ; CHECK-APPLE-NEXT:    mov x1, x22
1693 ; CHECK-APPLE-NEXT:    mov x2, x24
1694 ; CHECK-APPLE-NEXT:    mov x3, x25
1695 ; CHECK-APPLE-NEXT:    mov x4, x26
1696 ; CHECK-APPLE-NEXT:    mov x5, x27
1697 ; CHECK-APPLE-NEXT:    mov x6, x28
1698 ; CHECK-APPLE-NEXT:    mov x7, x23
1699 ; CHECK-APPLE-NEXT:    ldp x21, x28, [sp, #24] ; 16-byte Folded Reload
1700 ; CHECK-APPLE-NEXT:    ldp x29, x30, [sp, #112] ; 16-byte Folded Reload
1701 ; CHECK-APPLE-NEXT:    ldp x20, x19, [sp, #96] ; 16-byte Folded Reload
1702 ; CHECK-APPLE-NEXT:    ldp x23, x22, [sp, #80] ; 16-byte Folded Reload
1703 ; CHECK-APPLE-NEXT:    ldp x25, x24, [sp, #64] ; 16-byte Folded Reload
1704 ; CHECK-APPLE-NEXT:    ldp x27, x26, [sp, #48] ; 16-byte Folded Reload
1705 ; CHECK-APPLE-NEXT:    add sp, sp, #128
1706 ; CHECK-APPLE-NEXT:    ret
1708 ; CHECK-O0-AARCH64-LABEL: params_and_return_in_reg:
1709 ; CHECK-O0-AARCH64:       ; %bb.0:
1710 ; CHECK-O0-AARCH64-NEXT:    sub sp, sp, #272
1711 ; CHECK-O0-AARCH64-NEXT:    stp x28, x20, [sp, #240] ; 16-byte Folded Spill
1712 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #256] ; 16-byte Folded Spill
1713 ; CHECK-O0-AARCH64-NEXT:    add x29, sp, #256
1714 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
1715 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
1716 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
1717 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w20, -24
1718 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w28, -32
1719 ; CHECK-O0-AARCH64-NEXT:    str x21, [sp, #72] ; 8-byte Folded Spill
1720 ; CHECK-O0-AARCH64-NEXT:    str x20, [sp] ; 8-byte Folded Spill
1721 ; CHECK-O0-AARCH64-NEXT:    str x7, [sp, #64] ; 8-byte Folded Spill
1722 ; CHECK-O0-AARCH64-NEXT:    str x6, [sp, #56] ; 8-byte Folded Spill
1723 ; CHECK-O0-AARCH64-NEXT:    str x5, [sp, #48] ; 8-byte Folded Spill
1724 ; CHECK-O0-AARCH64-NEXT:    str x4, [sp, #40] ; 8-byte Folded Spill
1725 ; CHECK-O0-AARCH64-NEXT:    str x3, [sp, #32] ; 8-byte Folded Spill
1726 ; CHECK-O0-AARCH64-NEXT:    str x2, [sp, #24] ; 8-byte Folded Spill
1727 ; CHECK-O0-AARCH64-NEXT:    str x1, [sp, #16] ; 8-byte Folded Spill
1728 ; CHECK-O0-AARCH64-NEXT:    str x0, [sp, #8] ; 8-byte Folded Spill
1729 ; CHECK-O0-AARCH64-NEXT:    ; implicit-def: $x0
1730 ; CHECK-O0-AARCH64-NEXT:    mov x20, xzr
1731 ; CHECK-O0-AARCH64-NEXT:    str x20, [sp, #80] ; 8-byte Folded Spill
1732 ; CHECK-O0-AARCH64-NEXT:    mov x21, x20
1733 ; CHECK-O0-AARCH64-NEXT:    mov w8, #1 ; =0x1
1734 ; CHECK-O0-AARCH64-NEXT:    mov w0, w8
1735 ; CHECK-O0-AARCH64-NEXT:    str x0, [sp, #88] ; 8-byte Folded Spill
1736 ; CHECK-O0-AARCH64-NEXT:    mov w8, #2 ; =0x2
1737 ; CHECK-O0-AARCH64-NEXT:    mov w1, w8
1738 ; CHECK-O0-AARCH64-NEXT:    str x1, [sp, #96] ; 8-byte Folded Spill
1739 ; CHECK-O0-AARCH64-NEXT:    mov w8, #3 ; =0x3
1740 ; CHECK-O0-AARCH64-NEXT:    mov w2, w8
1741 ; CHECK-O0-AARCH64-NEXT:    str x2, [sp, #104] ; 8-byte Folded Spill
1742 ; CHECK-O0-AARCH64-NEXT:    mov w8, #4 ; =0x4
1743 ; CHECK-O0-AARCH64-NEXT:    mov w3, w8
1744 ; CHECK-O0-AARCH64-NEXT:    str x3, [sp, #112] ; 8-byte Folded Spill
1745 ; CHECK-O0-AARCH64-NEXT:    mov w8, #5 ; =0x5
1746 ; CHECK-O0-AARCH64-NEXT:    mov w4, w8
1747 ; CHECK-O0-AARCH64-NEXT:    str x4, [sp, #120] ; 8-byte Folded Spill
1748 ; CHECK-O0-AARCH64-NEXT:    mov w8, #6 ; =0x6
1749 ; CHECK-O0-AARCH64-NEXT:    mov w5, w8
1750 ; CHECK-O0-AARCH64-NEXT:    str x5, [sp, #128] ; 8-byte Folded Spill
1751 ; CHECK-O0-AARCH64-NEXT:    mov w8, #7 ; =0x7
1752 ; CHECK-O0-AARCH64-NEXT:    mov w6, w8
1753 ; CHECK-O0-AARCH64-NEXT:    stur x6, [x29, #-120] ; 8-byte Folded Spill
1754 ; CHECK-O0-AARCH64-NEXT:    mov w8, #8 ; =0x8
1755 ; CHECK-O0-AARCH64-NEXT:    mov w7, w8
1756 ; CHECK-O0-AARCH64-NEXT:    stur x7, [x29, #-112] ; 8-byte Folded Spill
1757 ; CHECK-O0-AARCH64-NEXT:    bl _params_in_reg2
1758 ; CHECK-O0-AARCH64-NEXT:    ldr x20, [sp] ; 8-byte Folded Reload
1759 ; CHECK-O0-AARCH64-NEXT:    ldr x0, [sp, #8] ; 8-byte Folded Reload
1760 ; CHECK-O0-AARCH64-NEXT:    ldr x1, [sp, #16] ; 8-byte Folded Reload
1761 ; CHECK-O0-AARCH64-NEXT:    ldr x2, [sp, #24] ; 8-byte Folded Reload
1762 ; CHECK-O0-AARCH64-NEXT:    ldr x3, [sp, #32] ; 8-byte Folded Reload
1763 ; CHECK-O0-AARCH64-NEXT:    ldr x4, [sp, #40] ; 8-byte Folded Reload
1764 ; CHECK-O0-AARCH64-NEXT:    ldr x5, [sp, #48] ; 8-byte Folded Reload
1765 ; CHECK-O0-AARCH64-NEXT:    ldr x6, [sp, #56] ; 8-byte Folded Reload
1766 ; CHECK-O0-AARCH64-NEXT:    ldr x7, [sp, #64] ; 8-byte Folded Reload
1767 ; CHECK-O0-AARCH64-NEXT:    mov x8, x21
1768 ; CHECK-O0-AARCH64-NEXT:    ldr x21, [sp, #72] ; 8-byte Folded Reload
1769 ; CHECK-O0-AARCH64-NEXT:    stur x8, [x29, #-104] ; 8-byte Folded Spill
1770 ; CHECK-O0-AARCH64-NEXT:    bl _params_and_return_in_reg2
1771 ; CHECK-O0-AARCH64-NEXT:    ldr x20, [sp, #80] ; 8-byte Folded Reload
1772 ; CHECK-O0-AARCH64-NEXT:    mov x8, x0
1773 ; CHECK-O0-AARCH64-NEXT:    ldr x0, [sp, #88] ; 8-byte Folded Reload
1774 ; CHECK-O0-AARCH64-NEXT:    stur x8, [x29, #-96] ; 8-byte Folded Spill
1775 ; CHECK-O0-AARCH64-NEXT:    mov x8, x1
1776 ; CHECK-O0-AARCH64-NEXT:    ldr x1, [sp, #96] ; 8-byte Folded Reload
1777 ; CHECK-O0-AARCH64-NEXT:    stur x8, [x29, #-88] ; 8-byte Folded Spill
1778 ; CHECK-O0-AARCH64-NEXT:    mov x8, x2
1779 ; CHECK-O0-AARCH64-NEXT:    ldr x2, [sp, #104] ; 8-byte Folded Reload
1780 ; CHECK-O0-AARCH64-NEXT:    stur x8, [x29, #-80] ; 8-byte Folded Spill
1781 ; CHECK-O0-AARCH64-NEXT:    mov x8, x3
1782 ; CHECK-O0-AARCH64-NEXT:    ldr x3, [sp, #112] ; 8-byte Folded Reload
1783 ; CHECK-O0-AARCH64-NEXT:    stur x8, [x29, #-72] ; 8-byte Folded Spill
1784 ; CHECK-O0-AARCH64-NEXT:    mov x8, x4
1785 ; CHECK-O0-AARCH64-NEXT:    ldr x4, [sp, #120] ; 8-byte Folded Reload
1786 ; CHECK-O0-AARCH64-NEXT:    stur x8, [x29, #-64] ; 8-byte Folded Spill
1787 ; CHECK-O0-AARCH64-NEXT:    mov x8, x5
1788 ; CHECK-O0-AARCH64-NEXT:    ldr x5, [sp, #128] ; 8-byte Folded Reload
1789 ; CHECK-O0-AARCH64-NEXT:    stur x8, [x29, #-56] ; 8-byte Folded Spill
1790 ; CHECK-O0-AARCH64-NEXT:    mov x8, x6
1791 ; CHECK-O0-AARCH64-NEXT:    ldur x6, [x29, #-120] ; 8-byte Folded Reload
1792 ; CHECK-O0-AARCH64-NEXT:    stur x8, [x29, #-48] ; 8-byte Folded Spill
1793 ; CHECK-O0-AARCH64-NEXT:    mov x8, x7
1794 ; CHECK-O0-AARCH64-NEXT:    ldur x7, [x29, #-112] ; 8-byte Folded Reload
1795 ; CHECK-O0-AARCH64-NEXT:    stur x8, [x29, #-40] ; 8-byte Folded Spill
1796 ; CHECK-O0-AARCH64-NEXT:    mov x8, x21
1797 ; CHECK-O0-AARCH64-NEXT:    ldur x21, [x29, #-104] ; 8-byte Folded Reload
1798 ; CHECK-O0-AARCH64-NEXT:    stur x8, [x29, #-32] ; 8-byte Folded Spill
1799 ; CHECK-O0-AARCH64-NEXT:    bl _params_in_reg2
1800 ; CHECK-O0-AARCH64-NEXT:    ldur x0, [x29, #-96] ; 8-byte Folded Reload
1801 ; CHECK-O0-AARCH64-NEXT:    ldur x1, [x29, #-88] ; 8-byte Folded Reload
1802 ; CHECK-O0-AARCH64-NEXT:    ldur x2, [x29, #-80] ; 8-byte Folded Reload
1803 ; CHECK-O0-AARCH64-NEXT:    ldur x3, [x29, #-72] ; 8-byte Folded Reload
1804 ; CHECK-O0-AARCH64-NEXT:    ldur x4, [x29, #-64] ; 8-byte Folded Reload
1805 ; CHECK-O0-AARCH64-NEXT:    ldur x5, [x29, #-56] ; 8-byte Folded Reload
1806 ; CHECK-O0-AARCH64-NEXT:    ldur x6, [x29, #-48] ; 8-byte Folded Reload
1807 ; CHECK-O0-AARCH64-NEXT:    ldur x7, [x29, #-40] ; 8-byte Folded Reload
1808 ; CHECK-O0-AARCH64-NEXT:    mov x8, x21
1809 ; CHECK-O0-AARCH64-NEXT:    ldur x21, [x29, #-32] ; 8-byte Folded Reload
1810 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #256] ; 16-byte Folded Reload
1811 ; CHECK-O0-AARCH64-NEXT:    ldp x28, x20, [sp, #240] ; 16-byte Folded Reload
1812 ; CHECK-O0-AARCH64-NEXT:    add sp, sp, #272
1813 ; CHECK-O0-AARCH64-NEXT:    ret
1815 ; CHECK-O0-ARM64_32-LABEL: params_and_return_in_reg:
1816 ; CHECK-O0-ARM64_32:       ; %bb.0:
1817 ; CHECK-O0-ARM64_32-NEXT:    sub sp, sp, #272
1818 ; CHECK-O0-ARM64_32-NEXT:    str x28, [sp, #240] ; 8-byte Folded Spill
1819 ; CHECK-O0-ARM64_32-NEXT:    stp x20, x30, [sp, #256] ; 16-byte Folded Spill
1820 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 272
1821 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -8
1822 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w20, -16
1823 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w28, -32
1824 ; CHECK-O0-ARM64_32-NEXT:    str x21, [sp, #72] ; 8-byte Folded Spill
1825 ; CHECK-O0-ARM64_32-NEXT:    str x20, [sp] ; 8-byte Folded Spill
1826 ; CHECK-O0-ARM64_32-NEXT:    str x7, [sp, #64] ; 8-byte Folded Spill
1827 ; CHECK-O0-ARM64_32-NEXT:    str x6, [sp, #56] ; 8-byte Folded Spill
1828 ; CHECK-O0-ARM64_32-NEXT:    str x5, [sp, #48] ; 8-byte Folded Spill
1829 ; CHECK-O0-ARM64_32-NEXT:    str x4, [sp, #40] ; 8-byte Folded Spill
1830 ; CHECK-O0-ARM64_32-NEXT:    str x3, [sp, #32] ; 8-byte Folded Spill
1831 ; CHECK-O0-ARM64_32-NEXT:    str x2, [sp, #24] ; 8-byte Folded Spill
1832 ; CHECK-O0-ARM64_32-NEXT:    str x1, [sp, #16] ; 8-byte Folded Spill
1833 ; CHECK-O0-ARM64_32-NEXT:    str x0, [sp, #8] ; 8-byte Folded Spill
1834 ; CHECK-O0-ARM64_32-NEXT:    ; implicit-def: $x0
1835 ; CHECK-O0-ARM64_32-NEXT:    mov x20, xzr
1836 ; CHECK-O0-ARM64_32-NEXT:    str x20, [sp, #80] ; 8-byte Folded Spill
1837 ; CHECK-O0-ARM64_32-NEXT:    mov x21, x20
1838 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #1 ; =0x1
1839 ; CHECK-O0-ARM64_32-NEXT:    mov w0, w8
1840 ; CHECK-O0-ARM64_32-NEXT:    str x0, [sp, #88] ; 8-byte Folded Spill
1841 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #2 ; =0x2
1842 ; CHECK-O0-ARM64_32-NEXT:    mov w1, w8
1843 ; CHECK-O0-ARM64_32-NEXT:    str x1, [sp, #96] ; 8-byte Folded Spill
1844 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #3 ; =0x3
1845 ; CHECK-O0-ARM64_32-NEXT:    mov w2, w8
1846 ; CHECK-O0-ARM64_32-NEXT:    str x2, [sp, #104] ; 8-byte Folded Spill
1847 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #4 ; =0x4
1848 ; CHECK-O0-ARM64_32-NEXT:    mov w3, w8
1849 ; CHECK-O0-ARM64_32-NEXT:    str x3, [sp, #112] ; 8-byte Folded Spill
1850 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #5 ; =0x5
1851 ; CHECK-O0-ARM64_32-NEXT:    mov w4, w8
1852 ; CHECK-O0-ARM64_32-NEXT:    str x4, [sp, #120] ; 8-byte Folded Spill
1853 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #6 ; =0x6
1854 ; CHECK-O0-ARM64_32-NEXT:    mov w5, w8
1855 ; CHECK-O0-ARM64_32-NEXT:    str x5, [sp, #128] ; 8-byte Folded Spill
1856 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #7 ; =0x7
1857 ; CHECK-O0-ARM64_32-NEXT:    mov w6, w8
1858 ; CHECK-O0-ARM64_32-NEXT:    str x6, [sp, #136] ; 8-byte Folded Spill
1859 ; CHECK-O0-ARM64_32-NEXT:    mov w8, #8 ; =0x8
1860 ; CHECK-O0-ARM64_32-NEXT:    mov w7, w8
1861 ; CHECK-O0-ARM64_32-NEXT:    str x7, [sp, #144] ; 8-byte Folded Spill
1862 ; CHECK-O0-ARM64_32-NEXT:    bl _params_in_reg2
1863 ; CHECK-O0-ARM64_32-NEXT:    ldr x20, [sp] ; 8-byte Folded Reload
1864 ; CHECK-O0-ARM64_32-NEXT:    ldr x0, [sp, #8] ; 8-byte Folded Reload
1865 ; CHECK-O0-ARM64_32-NEXT:    ldr x1, [sp, #16] ; 8-byte Folded Reload
1866 ; CHECK-O0-ARM64_32-NEXT:    ldr x2, [sp, #24] ; 8-byte Folded Reload
1867 ; CHECK-O0-ARM64_32-NEXT:    ldr x3, [sp, #32] ; 8-byte Folded Reload
1868 ; CHECK-O0-ARM64_32-NEXT:    ldr x4, [sp, #40] ; 8-byte Folded Reload
1869 ; CHECK-O0-ARM64_32-NEXT:    ldr x5, [sp, #48] ; 8-byte Folded Reload
1870 ; CHECK-O0-ARM64_32-NEXT:    ldr x6, [sp, #56] ; 8-byte Folded Reload
1871 ; CHECK-O0-ARM64_32-NEXT:    ldr x7, [sp, #64] ; 8-byte Folded Reload
1872 ; CHECK-O0-ARM64_32-NEXT:    mov x8, x21
1873 ; CHECK-O0-ARM64_32-NEXT:    ldr x21, [sp, #72] ; 8-byte Folded Reload
1874 ; CHECK-O0-ARM64_32-NEXT:    str x8, [sp, #152] ; 8-byte Folded Spill
1875 ; CHECK-O0-ARM64_32-NEXT:    bl _params_and_return_in_reg2
1876 ; CHECK-O0-ARM64_32-NEXT:    ldr x20, [sp, #80] ; 8-byte Folded Reload
1877 ; CHECK-O0-ARM64_32-NEXT:    mov x8, x0
1878 ; CHECK-O0-ARM64_32-NEXT:    ldr x0, [sp, #88] ; 8-byte Folded Reload
1879 ; CHECK-O0-ARM64_32-NEXT:    str x8, [sp, #160] ; 8-byte Folded Spill
1880 ; CHECK-O0-ARM64_32-NEXT:    mov x8, x1
1881 ; CHECK-O0-ARM64_32-NEXT:    ldr x1, [sp, #96] ; 8-byte Folded Reload
1882 ; CHECK-O0-ARM64_32-NEXT:    str x8, [sp, #168] ; 8-byte Folded Spill
1883 ; CHECK-O0-ARM64_32-NEXT:    mov x8, x2
1884 ; CHECK-O0-ARM64_32-NEXT:    ldr x2, [sp, #104] ; 8-byte Folded Reload
1885 ; CHECK-O0-ARM64_32-NEXT:    str x8, [sp, #176] ; 8-byte Folded Spill
1886 ; CHECK-O0-ARM64_32-NEXT:    mov x8, x3
1887 ; CHECK-O0-ARM64_32-NEXT:    ldr x3, [sp, #112] ; 8-byte Folded Reload
1888 ; CHECK-O0-ARM64_32-NEXT:    str x8, [sp, #184] ; 8-byte Folded Spill
1889 ; CHECK-O0-ARM64_32-NEXT:    mov x8, x4
1890 ; CHECK-O0-ARM64_32-NEXT:    ldr x4, [sp, #120] ; 8-byte Folded Reload
1891 ; CHECK-O0-ARM64_32-NEXT:    str x8, [sp, #192] ; 8-byte Folded Spill
1892 ; CHECK-O0-ARM64_32-NEXT:    mov x8, x5
1893 ; CHECK-O0-ARM64_32-NEXT:    ldr x5, [sp, #128] ; 8-byte Folded Reload
1894 ; CHECK-O0-ARM64_32-NEXT:    str x8, [sp, #200] ; 8-byte Folded Spill
1895 ; CHECK-O0-ARM64_32-NEXT:    mov x8, x6
1896 ; CHECK-O0-ARM64_32-NEXT:    ldr x6, [sp, #136] ; 8-byte Folded Reload
1897 ; CHECK-O0-ARM64_32-NEXT:    str x8, [sp, #208] ; 8-byte Folded Spill
1898 ; CHECK-O0-ARM64_32-NEXT:    mov x8, x7
1899 ; CHECK-O0-ARM64_32-NEXT:    ldr x7, [sp, #144] ; 8-byte Folded Reload
1900 ; CHECK-O0-ARM64_32-NEXT:    str x8, [sp, #216] ; 8-byte Folded Spill
1901 ; CHECK-O0-ARM64_32-NEXT:    mov x8, x21
1902 ; CHECK-O0-ARM64_32-NEXT:    ldr x21, [sp, #152] ; 8-byte Folded Reload
1903 ; CHECK-O0-ARM64_32-NEXT:    str x8, [sp, #224] ; 8-byte Folded Spill
1904 ; CHECK-O0-ARM64_32-NEXT:    bl _params_in_reg2
1905 ; CHECK-O0-ARM64_32-NEXT:    ldr x0, [sp, #160] ; 8-byte Folded Reload
1906 ; CHECK-O0-ARM64_32-NEXT:    ldr x1, [sp, #168] ; 8-byte Folded Reload
1907 ; CHECK-O0-ARM64_32-NEXT:    ldr x2, [sp, #176] ; 8-byte Folded Reload
1908 ; CHECK-O0-ARM64_32-NEXT:    ldr x3, [sp, #184] ; 8-byte Folded Reload
1909 ; CHECK-O0-ARM64_32-NEXT:    ldr x4, [sp, #192] ; 8-byte Folded Reload
1910 ; CHECK-O0-ARM64_32-NEXT:    ldr x5, [sp, #200] ; 8-byte Folded Reload
1911 ; CHECK-O0-ARM64_32-NEXT:    ldr x6, [sp, #208] ; 8-byte Folded Reload
1912 ; CHECK-O0-ARM64_32-NEXT:    ldr x7, [sp, #216] ; 8-byte Folded Reload
1913 ; CHECK-O0-ARM64_32-NEXT:    mov x8, x21
1914 ; CHECK-O0-ARM64_32-NEXT:    ldr x21, [sp, #224] ; 8-byte Folded Reload
1915 ; CHECK-O0-ARM64_32-NEXT:    ldp x20, x30, [sp, #256] ; 16-byte Folded Reload
1916 ; CHECK-O0-ARM64_32-NEXT:    ldr x28, [sp, #240] ; 8-byte Folded Reload
1917 ; CHECK-O0-ARM64_32-NEXT:    add sp, sp, #272
1918 ; CHECK-O0-ARM64_32-NEXT:    ret
1919   %error_ptr_ref = alloca swifterror ptr, align 8
1920   store ptr null, ptr %error_ptr_ref
1921   call swiftcc void @params_in_reg2(i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, ptr swiftself null, ptr nocapture swifterror %error_ptr_ref)
1922   %val = call swiftcc  { i64, i64, i64, i64, i64, i64, i64, i64 } @params_and_return_in_reg2(i64 %0, i64 %1, i64 %2, i64 %3, i64 %4, i64 %5, i64 %6, i64 %7, ptr swiftself %8, ptr nocapture swifterror %err)
1923   call swiftcc void @params_in_reg2(i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, ptr swiftself null, ptr nocapture swifterror %error_ptr_ref)
1924   ret { i64, i64, i64, i64, i64, i64, i64, i64 } %val
1927 declare swiftcc { i64, i64, i64, i64, i64, i64, i64, i64 } @params_and_return_in_reg2(i64, i64, i64, i64, i64, i64, i64, i64, ptr swiftself, ptr nocapture swifterror %err)
1929 declare void @acallee(ptr)
1931 ; Make sure we don't tail call if the caller returns a swifterror value. We
1932 ; would have to move into the swifterror register before the tail call.
1933 define swiftcc void @tailcall_from_swifterror(ptr swifterror %error_ptr_ref) {
1934 ; CHECK-APPLE-LABEL: tailcall_from_swifterror:
1935 ; CHECK-APPLE:       ; %bb.0: ; %entry
1936 ; CHECK-APPLE-NEXT:    str x19, [sp, #-32]! ; 8-byte Folded Spill
1937 ; CHECK-APPLE-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
1938 ; CHECK-APPLE-NEXT:    add x29, sp, #16
1939 ; CHECK-APPLE-NEXT:    .cfi_def_cfa w29, 16
1940 ; CHECK-APPLE-NEXT:    .cfi_offset w30, -8
1941 ; CHECK-APPLE-NEXT:    .cfi_offset w29, -16
1942 ; CHECK-APPLE-NEXT:    .cfi_offset w19, -32
1943 ; CHECK-APPLE-NEXT:    mov x19, x21
1944 ; CHECK-APPLE-NEXT:    mov x0, xzr
1945 ; CHECK-APPLE-NEXT:    bl _acallee
1946 ; CHECK-APPLE-NEXT:    mov x21, x19
1947 ; CHECK-APPLE-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
1948 ; CHECK-APPLE-NEXT:    ldr x19, [sp], #32 ; 8-byte Folded Reload
1949 ; CHECK-APPLE-NEXT:    ret
1951 ; CHECK-O0-AARCH64-LABEL: tailcall_from_swifterror:
1952 ; CHECK-O0-AARCH64:       ; %bb.0: ; %entry
1953 ; CHECK-O0-AARCH64-NEXT:    sub sp, sp, #32
1954 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
1955 ; CHECK-O0-AARCH64-NEXT:    add x29, sp, #16
1956 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
1957 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
1958 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
1959 ; CHECK-O0-AARCH64-NEXT:    str x21, [sp, #8] ; 8-byte Folded Spill
1960 ; CHECK-O0-AARCH64-NEXT:    mov x0, xzr
1961 ; CHECK-O0-AARCH64-NEXT:    bl _acallee
1962 ; CHECK-O0-AARCH64-NEXT:    ldr x21, [sp, #8] ; 8-byte Folded Reload
1963 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
1964 ; CHECK-O0-AARCH64-NEXT:    add sp, sp, #32
1965 ; CHECK-O0-AARCH64-NEXT:    ret
1967 ; CHECK-O0-ARM64_32-LABEL: tailcall_from_swifterror:
1968 ; CHECK-O0-ARM64_32:       ; %bb.0: ; %entry
1969 ; CHECK-O0-ARM64_32-NEXT:    sub sp, sp, #32
1970 ; CHECK-O0-ARM64_32-NEXT:    str x30, [sp, #16] ; 8-byte Folded Spill
1971 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 32
1972 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -16
1973 ; CHECK-O0-ARM64_32-NEXT:    str x21, [sp, #8] ; 8-byte Folded Spill
1974 ; CHECK-O0-ARM64_32-NEXT:    mov x0, xzr
1975 ; CHECK-O0-ARM64_32-NEXT:    bl _acallee
1976 ; CHECK-O0-ARM64_32-NEXT:    ldr x21, [sp, #8] ; 8-byte Folded Reload
1977 ; CHECK-O0-ARM64_32-NEXT:    ldr x30, [sp, #16] ; 8-byte Folded Reload
1978 ; CHECK-O0-ARM64_32-NEXT:    add sp, sp, #32
1979 ; CHECK-O0-ARM64_32-NEXT:    ret
1980 entry:
1981   tail call void @acallee(ptr null)
1982   ret void
1985 declare swiftcc void @foo2(ptr swifterror)
1987 ; Make sure we properly assign registers during fast-isel.
1988 define swiftcc ptr @testAssign(ptr %error_ref) {
1989 ; CHECK-APPLE-LABEL: testAssign:
1990 ; CHECK-APPLE:       ; %bb.0: ; %entry
1991 ; CHECK-APPLE-NEXT:    sub sp, sp, #48
1992 ; CHECK-APPLE-NEXT:    stp x22, x21, [sp, #16] ; 16-byte Folded Spill
1993 ; CHECK-APPLE-NEXT:    stp x29, x30, [sp, #32] ; 16-byte Folded Spill
1994 ; CHECK-APPLE-NEXT:    add x29, sp, #32
1995 ; CHECK-APPLE-NEXT:    .cfi_def_cfa w29, 16
1996 ; CHECK-APPLE-NEXT:    .cfi_offset w30, -8
1997 ; CHECK-APPLE-NEXT:    .cfi_offset w29, -16
1998 ; CHECK-APPLE-NEXT:    .cfi_offset w21, -24
1999 ; CHECK-APPLE-NEXT:    .cfi_offset w22, -32
2000 ; CHECK-APPLE-NEXT:    mov x21, xzr
2001 ; CHECK-APPLE-NEXT:    bl _foo2
2002 ; CHECK-APPLE-NEXT:    mov x0, x21
2003 ; CHECK-APPLE-NEXT:    ldp x29, x30, [sp, #32] ; 16-byte Folded Reload
2004 ; CHECK-APPLE-NEXT:    ldp x22, x21, [sp, #16] ; 16-byte Folded Reload
2005 ; CHECK-APPLE-NEXT:    add sp, sp, #48
2006 ; CHECK-APPLE-NEXT:    ret
2008 ; CHECK-O0-AARCH64-LABEL: testAssign:
2009 ; CHECK-O0-AARCH64:       ; %bb.0: ; %entry
2010 ; CHECK-O0-AARCH64-NEXT:    sub sp, sp, #48
2011 ; CHECK-O0-AARCH64-NEXT:    stp x22, x21, [sp, #16] ; 16-byte Folded Spill
2012 ; CHECK-O0-AARCH64-NEXT:    stp x29, x30, [sp, #32] ; 16-byte Folded Spill
2013 ; CHECK-O0-AARCH64-NEXT:    add x29, sp, #32
2014 ; CHECK-O0-AARCH64-NEXT:    .cfi_def_cfa w29, 16
2015 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w30, -8
2016 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w29, -16
2017 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w21, -24
2018 ; CHECK-O0-AARCH64-NEXT:    .cfi_offset w22, -32
2019 ; CHECK-O0-AARCH64-NEXT:    ; implicit-def: $x1
2020 ; CHECK-O0-AARCH64-NEXT:    mov x21, xzr
2021 ; CHECK-O0-AARCH64-NEXT:    bl _foo2
2022 ; CHECK-O0-AARCH64-NEXT:    str x21, [sp] ; 8-byte Folded Spill
2023 ; CHECK-O0-AARCH64-NEXT:  ; %bb.1: ; %a
2024 ; CHECK-O0-AARCH64-NEXT:    ldr x0, [sp] ; 8-byte Folded Reload
2025 ; CHECK-O0-AARCH64-NEXT:    ldp x29, x30, [sp, #32] ; 16-byte Folded Reload
2026 ; CHECK-O0-AARCH64-NEXT:    ldp x22, x21, [sp, #16] ; 16-byte Folded Reload
2027 ; CHECK-O0-AARCH64-NEXT:    add sp, sp, #48
2028 ; CHECK-O0-AARCH64-NEXT:    ret
2030 ; CHECK-O0-ARM64_32-LABEL: testAssign:
2031 ; CHECK-O0-ARM64_32:       ; %bb.0: ; %entry
2032 ; CHECK-O0-ARM64_32-NEXT:    sub sp, sp, #48
2033 ; CHECK-O0-ARM64_32-NEXT:    stp x22, x21, [sp, #16] ; 16-byte Folded Spill
2034 ; CHECK-O0-ARM64_32-NEXT:    stp x29, x30, [sp, #32] ; 16-byte Folded Spill
2035 ; CHECK-O0-ARM64_32-NEXT:    .cfi_def_cfa_offset 48
2036 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w30, -8
2037 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w29, -16
2038 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w21, -24
2039 ; CHECK-O0-ARM64_32-NEXT:    .cfi_offset w22, -32
2040 ; CHECK-O0-ARM64_32-NEXT:    ; implicit-def: $x1
2041 ; CHECK-O0-ARM64_32-NEXT:    mov x21, xzr
2042 ; CHECK-O0-ARM64_32-NEXT:    bl _foo2
2043 ; CHECK-O0-ARM64_32-NEXT:    str x21, [sp] ; 8-byte Folded Spill
2044 ; CHECK-O0-ARM64_32-NEXT:  ; %bb.1: ; %a
2045 ; CHECK-O0-ARM64_32-NEXT:    ldr x8, [sp] ; 8-byte Folded Reload
2046 ; CHECK-O0-ARM64_32-NEXT:    and x0, x8, #0xffffffff
2047 ; CHECK-O0-ARM64_32-NEXT:    ldp x29, x30, [sp, #32] ; 16-byte Folded Reload
2048 ; CHECK-O0-ARM64_32-NEXT:    ldp x22, x21, [sp, #16] ; 16-byte Folded Reload
2049 ; CHECK-O0-ARM64_32-NEXT:    add sp, sp, #48
2050 ; CHECK-O0-ARM64_32-NEXT:    ret
2051 entry:
2052   %error_ptr = alloca swifterror ptr
2053   store ptr null, ptr %error_ptr
2054   call swiftcc void @foo2(ptr swifterror %error_ptr)
2055   br label %a
2058   %error = load ptr, ptr %error_ptr
2059   ret ptr %error