Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AArch64 / call-rv-marker.ll
blobee8cbe45da083d471f850711d2615b0222e02e0b
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2 ; RUN: llc -o - %s | FileCheck --check-prefix=SELDAG --check-prefix=CHECK %s
3 ; RUN: llc -global-isel -o - %s | FileCheck --check-prefix=GISEL --check-prefix=CHECK %s
5 target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
6 target triple = "arm64-apple-ios"
8 declare ptr @foo0(i32)
9 declare ptr @foo1()
11 declare void @llvm.objc.release(ptr)
12 declare void @objc_object(ptr)
14 declare void @foo2(ptr)
16 declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)
18 declare ptr @_ZN1SD1Ev(ptr nonnull dereferenceable(1))
20 declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)
23 %struct.S = type { i8 }
25 @g = dso_local global ptr null, align 8
26 @fptr = dso_local global ptr null, align 8
28 define dso_local ptr @rv_marker_1_retain() {
29 ; SELDAG-LABEL: rv_marker_1_retain:
30 ; SELDAG:       ; %bb.0: ; %entry
31 ; SELDAG-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
32 ; SELDAG-NEXT:    .cfi_def_cfa_offset 16
33 ; SELDAG-NEXT:    .cfi_offset w30, -8
34 ; SELDAG-NEXT:    .cfi_offset w29, -16
35 ; SELDAG-NEXT:    bl _foo1
36 ; SELDAG-NEXT:    mov x29, x29
37 ; SELDAG-NEXT:    bl _objc_retainAutoreleasedReturnValue
38 ; SELDAG-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
39 ; SELDAG-NEXT:    ret
41 ; GISEL-LABEL: rv_marker_1_retain:
42 ; GISEL:       ; %bb.0: ; %entry
43 ; GISEL-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
44 ; GISEL-NEXT:    .cfi_def_cfa_offset 16
45 ; GISEL-NEXT:    .cfi_offset w30, -8
46 ; GISEL-NEXT:    .cfi_offset w29, -16
47 ; GISEL-NEXT:    bl _foo1
48 ; GISEL-NEXT:    mov x29, x29
49 ; GISEL-NEXT:    bl _objc_retainAutoreleasedReturnValue
50 ; GISEL-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
51 ; GISEL-NEXT:    ret
52 entry:
53   %call = call ptr @foo1() [ "clang.arc.attachedcall"(ptr @objc_retainAutoreleasedReturnValue) ]
54   ret ptr %call
57 define dso_local ptr @rv_marker_1_unsafeClaim() {
58 ; SELDAG-LABEL: rv_marker_1_unsafeClaim:
59 ; SELDAG:       ; %bb.0: ; %entry
60 ; SELDAG-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
61 ; SELDAG-NEXT:    .cfi_def_cfa_offset 16
62 ; SELDAG-NEXT:    .cfi_offset w30, -8
63 ; SELDAG-NEXT:    .cfi_offset w29, -16
64 ; SELDAG-NEXT:    bl _foo1
65 ; SELDAG-NEXT:    mov x29, x29
66 ; SELDAG-NEXT:    bl _objc_unsafeClaimAutoreleasedReturnValue
67 ; SELDAG-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
68 ; SELDAG-NEXT:    ret
70 ; GISEL-LABEL: rv_marker_1_unsafeClaim:
71 ; GISEL:       ; %bb.0: ; %entry
72 ; GISEL-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
73 ; GISEL-NEXT:    .cfi_def_cfa_offset 16
74 ; GISEL-NEXT:    .cfi_offset w30, -8
75 ; GISEL-NEXT:    .cfi_offset w29, -16
76 ; GISEL-NEXT:    bl _foo1
77 ; GISEL-NEXT:    mov x29, x29
78 ; GISEL-NEXT:    bl _objc_unsafeClaimAutoreleasedReturnValue
79 ; GISEL-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
80 ; GISEL-NEXT:    ret
81 entry:
82   %call = call ptr @foo1() [ "clang.arc.attachedcall"(ptr @objc_unsafeClaimAutoreleasedReturnValue) ]
83   ret ptr %call
86 define dso_local void @rv_marker_2_select(i32 %c) {
87 ; SELDAG-LABEL: rv_marker_2_select:
88 ; SELDAG:       ; %bb.0: ; %entry
89 ; SELDAG-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
90 ; SELDAG-NEXT:    .cfi_def_cfa_offset 16
91 ; SELDAG-NEXT:    .cfi_offset w30, -8
92 ; SELDAG-NEXT:    .cfi_offset w29, -16
93 ; SELDAG-NEXT:    mov w8, #1 ; =0x1
94 ; SELDAG-NEXT:    cmp w0, #0
95 ; SELDAG-NEXT:    cinc w0, w8, eq
96 ; SELDAG-NEXT:    bl _foo0
97 ; SELDAG-NEXT:    mov x29, x29
98 ; SELDAG-NEXT:    bl _objc_retainAutoreleasedReturnValue
99 ; SELDAG-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
100 ; SELDAG-NEXT:    b _foo2
102 ; GISEL-LABEL: rv_marker_2_select:
103 ; GISEL:       ; %bb.0: ; %entry
104 ; GISEL-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
105 ; GISEL-NEXT:    .cfi_def_cfa_offset 16
106 ; GISEL-NEXT:    .cfi_offset w30, -8
107 ; GISEL-NEXT:    .cfi_offset w29, -16
108 ; GISEL-NEXT:    mov w8, #1 ; =0x1
109 ; GISEL-NEXT:    cmp w0, #0
110 ; GISEL-NEXT:    cinc w0, w8, eq
111 ; GISEL-NEXT:    bl _foo0
112 ; GISEL-NEXT:    mov x29, x29
113 ; GISEL-NEXT:    bl _objc_retainAutoreleasedReturnValue
114 ; GISEL-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
115 ; GISEL-NEXT:    b _foo2
116 entry:
117   %tobool.not = icmp eq i32 %c, 0
118   %.sink = select i1 %tobool.not, i32 2, i32 1
119   %call1 = call ptr @foo0(i32 %.sink) [ "clang.arc.attachedcall"(ptr @objc_retainAutoreleasedReturnValue) ]
120   tail call void @foo2(ptr %call1)
121   ret void
124 define dso_local void @rv_marker_3() personality ptr @__gxx_personality_v0 {
125 ; SELDAG-LABEL: rv_marker_3:
126 ; SELDAG:       Lfunc_begin0:
127 ; SELDAG-NEXT:    .cfi_startproc
128 ; SELDAG-NEXT:    .cfi_personality 155, ___gxx_personality_v0
129 ; SELDAG-NEXT:    .cfi_lsda 16, Lexception0
130 ; SELDAG-NEXT:  ; %bb.0: ; %entry
131 ; SELDAG-NEXT:    stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill
132 ; SELDAG-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
133 ; SELDAG-NEXT:    .cfi_def_cfa_offset 32
134 ; SELDAG-NEXT:    .cfi_offset w30, -8
135 ; SELDAG-NEXT:    .cfi_offset w29, -16
136 ; SELDAG-NEXT:    .cfi_offset w19, -24
137 ; SELDAG-NEXT:    .cfi_offset w20, -32
138 ; SELDAG-NEXT:    bl _foo1
139 ; SELDAG-NEXT:    mov x29, x29
140 ; SELDAG-NEXT:    bl _objc_retainAutoreleasedReturnValue
141 ; SELDAG-NEXT:    mov x19, x0
142 ; SELDAG-NEXT:  Ltmp0:
143 ; SELDAG-NEXT:    bl _objc_object
144 ; SELDAG-NEXT:  Ltmp1:
145 ; SELDAG-NEXT:  ; %bb.1: ; %invoke.cont
146 ; SELDAG-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
147 ; SELDAG-NEXT:    mov x0, x19
148 ; SELDAG-NEXT:    ldp x20, x19, [sp], #32 ; 16-byte Folded Reload
149 ; SELDAG-NEXT:    b _objc_release
150 ; SELDAG-NEXT:  LBB3_2: ; %lpad
151 ; SELDAG-NEXT:  Ltmp2:
152 ; SELDAG-NEXT:    mov x20, x0
153 ; SELDAG-NEXT:    mov x0, x19
154 ; SELDAG-NEXT:    bl _objc_release
155 ; SELDAG-NEXT:    mov x0, x20
156 ; SELDAG-NEXT:    bl __Unwind_Resume
157 ; SELDAG-NEXT:  Lfunc_end0:
158 ; SELDAG-NEXT:    .cfi_endproc
159 ; SELDAG-NEXT:    .section __TEXT,__gcc_except_tab
160 ; SELDAG-NEXT:    .p2align 2, 0x0
161 ; SELDAG-NEXT:  GCC_except_table3:
162 ; SELDAG-NEXT:  Lexception0:
163 ; SELDAG-NEXT:    .byte 255 ; @LPStart Encoding = omit
164 ; SELDAG-NEXT:    .byte 255 ; @TType Encoding = omit
165 ; SELDAG-NEXT:    .byte 1 ; Call site Encoding = uleb128
166 ; SELDAG-NEXT:    .uleb128 Lcst_end0-Lcst_begin0
167 ; SELDAG-NEXT:  Lcst_begin0:
168 ; SELDAG-NEXT:    .uleb128 Lfunc_begin0-Lfunc_begin0 ; >> Call Site 1 <<
169 ; SELDAG-NEXT:    .uleb128 Ltmp0-Lfunc_begin0 ; Call between Lfunc_begin0 and Ltmp0
170 ; SELDAG-NEXT:    .byte 0 ; has no landing pad
171 ; SELDAG-NEXT:    .byte 0 ; On action: cleanup
172 ; SELDAG-NEXT:    .uleb128 Ltmp0-Lfunc_begin0 ; >> Call Site 2 <<
173 ; SELDAG-NEXT:    .uleb128 Ltmp1-Ltmp0 ; Call between Ltmp0 and Ltmp1
174 ; SELDAG-NEXT:    .uleb128 Ltmp2-Lfunc_begin0 ; jumps to Ltmp2
175 ; SELDAG-NEXT:    .byte 0 ; On action: cleanup
176 ; SELDAG-NEXT:    .uleb128 Ltmp1-Lfunc_begin0 ; >> Call Site 3 <<
177 ; SELDAG-NEXT:    .uleb128 Lfunc_end0-Ltmp1 ; Call between Ltmp1 and Lfunc_end0
178 ; SELDAG-NEXT:    .byte 0 ; has no landing pad
179 ; SELDAG-NEXT:    .byte 0 ; On action: cleanup
180 ; SELDAG-NEXT:  Lcst_end0:
181 ; SELDAG-NEXT:    .p2align 2, 0x0
183 ; GISEL-LABEL: rv_marker_3:
184 ; GISEL:       Lfunc_begin0:
185 ; GISEL-NEXT:    .cfi_startproc
186 ; GISEL-NEXT:    .cfi_personality 155, ___gxx_personality_v0
187 ; GISEL-NEXT:    .cfi_lsda 16, Lexception0
188 ; GISEL-NEXT:  ; %bb.0: ; %entry
189 ; GISEL-NEXT:    stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill
190 ; GISEL-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
191 ; GISEL-NEXT:    .cfi_def_cfa_offset 32
192 ; GISEL-NEXT:    .cfi_offset w30, -8
193 ; GISEL-NEXT:    .cfi_offset w29, -16
194 ; GISEL-NEXT:    .cfi_offset w19, -24
195 ; GISEL-NEXT:    .cfi_offset w20, -32
196 ; GISEL-NEXT:    bl _foo1
197 ; GISEL-NEXT:    mov x29, x29
198 ; GISEL-NEXT:    bl _objc_retainAutoreleasedReturnValue
199 ; GISEL-NEXT:    mov x19, x0
200 ; GISEL-NEXT:  Ltmp0:
201 ; GISEL-NEXT:    bl _objc_object
202 ; GISEL-NEXT:  Ltmp1:
203 ; GISEL-NEXT:  ; %bb.1: ; %invoke.cont
204 ; GISEL-NEXT:  Lloh0:
205 ; GISEL-NEXT:    adrp x1, _objc_release@GOTPAGE
206 ; GISEL-NEXT:    mov x0, x19
207 ; GISEL-NEXT:  Lloh1:
208 ; GISEL-NEXT:    ldr x1, [x1, _objc_release@GOTPAGEOFF]
209 ; GISEL-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
210 ; GISEL-NEXT:    ldp x20, x19, [sp], #32 ; 16-byte Folded Reload
211 ; GISEL-NEXT:    br x1
212 ; GISEL-NEXT:  LBB3_2: ; %lpad
213 ; GISEL-NEXT:  Ltmp2:
214 ; GISEL-NEXT:  Lloh2:
215 ; GISEL-NEXT:    adrp x8, _objc_release@GOTPAGE
216 ; GISEL-NEXT:    mov x20, x0
217 ; GISEL-NEXT:    mov x0, x19
218 ; GISEL-NEXT:  Lloh3:
219 ; GISEL-NEXT:    ldr x8, [x8, _objc_release@GOTPAGEOFF]
220 ; GISEL-NEXT:    blr x8
221 ; GISEL-NEXT:    mov x0, x20
222 ; GISEL-NEXT:    bl __Unwind_Resume
223 ; GISEL-NEXT:    .loh AdrpLdrGot Lloh0, Lloh1
224 ; GISEL-NEXT:    .loh AdrpLdrGot Lloh2, Lloh3
225 ; GISEL-NEXT:  Lfunc_end0:
226 ; GISEL-NEXT:    .cfi_endproc
227 ; GISEL-NEXT:    .section __TEXT,__gcc_except_tab
228 ; GISEL-NEXT:    .p2align 2, 0x0
229 ; GISEL-NEXT:  GCC_except_table3:
230 ; GISEL-NEXT:  Lexception0:
231 ; GISEL-NEXT:    .byte 255 ; @LPStart Encoding = omit
232 ; GISEL-NEXT:    .byte 255 ; @TType Encoding = omit
233 ; GISEL-NEXT:    .byte 1 ; Call site Encoding = uleb128
234 ; GISEL-NEXT:    .uleb128 Lcst_end0-Lcst_begin0
235 ; GISEL-NEXT:  Lcst_begin0:
236 ; GISEL-NEXT:    .uleb128 Lfunc_begin0-Lfunc_begin0 ; >> Call Site 1 <<
237 ; GISEL-NEXT:    .uleb128 Ltmp0-Lfunc_begin0 ; Call between Lfunc_begin0 and Ltmp0
238 ; GISEL-NEXT:    .byte 0 ; has no landing pad
239 ; GISEL-NEXT:    .byte 0 ; On action: cleanup
240 ; GISEL-NEXT:    .uleb128 Ltmp0-Lfunc_begin0 ; >> Call Site 2 <<
241 ; GISEL-NEXT:    .uleb128 Ltmp1-Ltmp0 ; Call between Ltmp0 and Ltmp1
242 ; GISEL-NEXT:    .uleb128 Ltmp2-Lfunc_begin0 ; jumps to Ltmp2
243 ; GISEL-NEXT:    .byte 0 ; On action: cleanup
244 ; GISEL-NEXT:    .uleb128 Ltmp1-Lfunc_begin0 ; >> Call Site 3 <<
245 ; GISEL-NEXT:    .uleb128 Lfunc_end0-Ltmp1 ; Call between Ltmp1 and Lfunc_end0
246 ; GISEL-NEXT:    .byte 0 ; has no landing pad
247 ; GISEL-NEXT:    .byte 0 ; On action: cleanup
248 ; GISEL-NEXT:  Lcst_end0:
249 ; GISEL-NEXT:    .p2align 2, 0x0
250 entry:
251   %call = call ptr @foo1() [ "clang.arc.attachedcall"(ptr @objc_retainAutoreleasedReturnValue) ]
252   invoke void @objc_object(ptr %call) #5
253           to label %invoke.cont unwind label %lpad
255 invoke.cont:                                      ; preds = %entry
256   tail call void @llvm.objc.release(ptr %call)
257   ret void
259 lpad:                                             ; preds = %entry
260   %0 = landingpad { ptr, i32 }
261           cleanup
262   tail call void @llvm.objc.release(ptr %call)
263   resume { ptr, i32 } %0
266 define dso_local void @rv_marker_4() personality ptr @__gxx_personality_v0 {
267 ; SELDAG-LABEL: rv_marker_4:
268 ; SELDAG:       Lfunc_begin1:
269 ; SELDAG-NEXT:    .cfi_startproc
270 ; SELDAG-NEXT:    .cfi_personality 155, ___gxx_personality_v0
271 ; SELDAG-NEXT:    .cfi_lsda 16, Lexception1
272 ; SELDAG-NEXT:  ; %bb.0: ; %entry
273 ; SELDAG-NEXT:    sub sp, sp, #48
274 ; SELDAG-NEXT:    stp x20, x19, [sp, #16] ; 16-byte Folded Spill
275 ; SELDAG-NEXT:    stp x29, x30, [sp, #32] ; 16-byte Folded Spill
276 ; SELDAG-NEXT:    .cfi_def_cfa_offset 48
277 ; SELDAG-NEXT:    .cfi_offset w30, -8
278 ; SELDAG-NEXT:    .cfi_offset w29, -16
279 ; SELDAG-NEXT:    .cfi_offset w19, -24
280 ; SELDAG-NEXT:    .cfi_offset w20, -32
281 ; SELDAG-NEXT:  Ltmp3:
282 ; SELDAG-NEXT:    bl _foo1
283 ; SELDAG-NEXT:    mov x29, x29
284 ; SELDAG-NEXT:    bl _objc_retainAutoreleasedReturnValue
285 ; SELDAG-NEXT:  Ltmp4:
286 ; SELDAG-NEXT:  ; %bb.1: ; %invoke.cont
287 ; SELDAG-NEXT:  Ltmp6:
288 ; SELDAG-NEXT:    mov x19, x0
289 ; SELDAG-NEXT:    bl _objc_object
290 ; SELDAG-NEXT:  Ltmp7:
291 ; SELDAG-NEXT:  ; %bb.2: ; %invoke.cont2
292 ; SELDAG-NEXT:    mov x0, x19
293 ; SELDAG-NEXT:    bl _objc_release
294 ; SELDAG-NEXT:    add x0, sp, #15
295 ; SELDAG-NEXT:    bl __ZN1SD1Ev
296 ; SELDAG-NEXT:    ldp x29, x30, [sp, #32] ; 16-byte Folded Reload
297 ; SELDAG-NEXT:    ldp x20, x19, [sp, #16] ; 16-byte Folded Reload
298 ; SELDAG-NEXT:    add sp, sp, #48
299 ; SELDAG-NEXT:    ret
300 ; SELDAG-NEXT:  LBB4_3: ; %lpad1
301 ; SELDAG-NEXT:  Ltmp8:
302 ; SELDAG-NEXT:    mov x20, x0
303 ; SELDAG-NEXT:    mov x0, x19
304 ; SELDAG-NEXT:    bl _objc_release
305 ; SELDAG-NEXT:    b LBB4_5
306 ; SELDAG-NEXT:  LBB4_4: ; %lpad
307 ; SELDAG-NEXT:  Ltmp5:
308 ; SELDAG-NEXT:    mov x20, x0
309 ; SELDAG-NEXT:  LBB4_5: ; %ehcleanup
310 ; SELDAG-NEXT:    add x0, sp, #15
311 ; SELDAG-NEXT:    bl __ZN1SD1Ev
312 ; SELDAG-NEXT:    mov x0, x20
313 ; SELDAG-NEXT:    bl __Unwind_Resume
314 ; SELDAG-NEXT:  Lfunc_end1:
315 ; SELDAG-NEXT:    .cfi_endproc
316 ; SELDAG-NEXT:    .section __TEXT,__gcc_except_tab
317 ; SELDAG-NEXT:    .p2align 2, 0x0
318 ; SELDAG-NEXT:  GCC_except_table4:
319 ; SELDAG-NEXT:  Lexception1:
320 ; SELDAG-NEXT:    .byte 255 ; @LPStart Encoding = omit
321 ; SELDAG-NEXT:    .byte 255 ; @TType Encoding = omit
322 ; SELDAG-NEXT:    .byte 1 ; Call site Encoding = uleb128
323 ; SELDAG-NEXT:    .uleb128 Lcst_end1-Lcst_begin1
324 ; SELDAG-NEXT:  Lcst_begin1:
325 ; SELDAG-NEXT:    .uleb128 Ltmp3-Lfunc_begin1 ; >> Call Site 1 <<
326 ; SELDAG-NEXT:    .uleb128 Ltmp4-Ltmp3 ; Call between Ltmp3 and Ltmp4
327 ; SELDAG-NEXT:    .uleb128 Ltmp5-Lfunc_begin1 ; jumps to Ltmp5
328 ; SELDAG-NEXT:    .byte 0 ; On action: cleanup
329 ; SELDAG-NEXT:    .uleb128 Ltmp6-Lfunc_begin1 ; >> Call Site 2 <<
330 ; SELDAG-NEXT:    .uleb128 Ltmp7-Ltmp6 ; Call between Ltmp6 and Ltmp7
331 ; SELDAG-NEXT:    .uleb128 Ltmp8-Lfunc_begin1 ; jumps to Ltmp8
332 ; SELDAG-NEXT:    .byte 0 ; On action: cleanup
333 ; SELDAG-NEXT:    .uleb128 Ltmp7-Lfunc_begin1 ; >> Call Site 3 <<
334 ; SELDAG-NEXT:    .uleb128 Lfunc_end1-Ltmp7 ; Call between Ltmp7 and Lfunc_end1
335 ; SELDAG-NEXT:    .byte 0 ; has no landing pad
336 ; SELDAG-NEXT:    .byte 0 ; On action: cleanup
337 ; SELDAG-NEXT:  Lcst_end1:
338 ; SELDAG-NEXT:    .p2align 2, 0x0
340 ; GISEL-LABEL: rv_marker_4:
341 ; GISEL:       Lfunc_begin1:
342 ; GISEL-NEXT:    .cfi_startproc
343 ; GISEL-NEXT:    .cfi_personality 155, ___gxx_personality_v0
344 ; GISEL-NEXT:    .cfi_lsda 16, Lexception1
345 ; GISEL-NEXT:  ; %bb.0: ; %entry
346 ; GISEL-NEXT:    sub sp, sp, #48
347 ; GISEL-NEXT:    stp x20, x19, [sp, #16] ; 16-byte Folded Spill
348 ; GISEL-NEXT:    stp x29, x30, [sp, #32] ; 16-byte Folded Spill
349 ; GISEL-NEXT:    .cfi_def_cfa_offset 48
350 ; GISEL-NEXT:    .cfi_offset w30, -8
351 ; GISEL-NEXT:    .cfi_offset w29, -16
352 ; GISEL-NEXT:    .cfi_offset w19, -24
353 ; GISEL-NEXT:    .cfi_offset w20, -32
354 ; GISEL-NEXT:  Ltmp3:
355 ; GISEL-NEXT:    bl _foo1
356 ; GISEL-NEXT:    mov x29, x29
357 ; GISEL-NEXT:    bl _objc_retainAutoreleasedReturnValue
358 ; GISEL-NEXT:  Ltmp4:
359 ; GISEL-NEXT:  ; %bb.1: ; %invoke.cont
360 ; GISEL-NEXT:  Ltmp6:
361 ; GISEL-NEXT:    mov x19, x0
362 ; GISEL-NEXT:    bl _objc_object
363 ; GISEL-NEXT:  Ltmp7:
364 ; GISEL-NEXT:  ; %bb.2: ; %invoke.cont2
365 ; GISEL-NEXT:  Lloh4:
366 ; GISEL-NEXT:    adrp x8, _objc_release@GOTPAGE
367 ; GISEL-NEXT:    mov x0, x19
368 ; GISEL-NEXT:  Lloh5:
369 ; GISEL-NEXT:    ldr x8, [x8, _objc_release@GOTPAGEOFF]
370 ; GISEL-NEXT:    blr x8
371 ; GISEL-NEXT:    add x0, sp, #15
372 ; GISEL-NEXT:    bl __ZN1SD1Ev
373 ; GISEL-NEXT:    ldp x29, x30, [sp, #32] ; 16-byte Folded Reload
374 ; GISEL-NEXT:    ldp x20, x19, [sp, #16] ; 16-byte Folded Reload
375 ; GISEL-NEXT:    add sp, sp, #48
376 ; GISEL-NEXT:    ret
377 ; GISEL-NEXT:  LBB4_3: ; %lpad1
378 ; GISEL-NEXT:  Ltmp8:
379 ; GISEL-NEXT:  Lloh6:
380 ; GISEL-NEXT:    adrp x8, _objc_release@GOTPAGE
381 ; GISEL-NEXT:    mov x20, x0
382 ; GISEL-NEXT:    mov x0, x19
383 ; GISEL-NEXT:  Lloh7:
384 ; GISEL-NEXT:    ldr x8, [x8, _objc_release@GOTPAGEOFF]
385 ; GISEL-NEXT:    blr x8
386 ; GISEL-NEXT:    b LBB4_5
387 ; GISEL-NEXT:  LBB4_4: ; %lpad
388 ; GISEL-NEXT:  Ltmp5:
389 ; GISEL-NEXT:    mov x20, x0
390 ; GISEL-NEXT:  LBB4_5: ; %ehcleanup
391 ; GISEL-NEXT:    add x0, sp, #15
392 ; GISEL-NEXT:    bl __ZN1SD1Ev
393 ; GISEL-NEXT:    mov x0, x20
394 ; GISEL-NEXT:    bl __Unwind_Resume
395 ; GISEL-NEXT:    .loh AdrpLdrGot Lloh4, Lloh5
396 ; GISEL-NEXT:    .loh AdrpLdrGot Lloh6, Lloh7
397 ; GISEL-NEXT:  Lfunc_end1:
398 ; GISEL-NEXT:    .cfi_endproc
399 ; GISEL-NEXT:    .section __TEXT,__gcc_except_tab
400 ; GISEL-NEXT:    .p2align 2, 0x0
401 ; GISEL-NEXT:  GCC_except_table4:
402 ; GISEL-NEXT:  Lexception1:
403 ; GISEL-NEXT:    .byte 255 ; @LPStart Encoding = omit
404 ; GISEL-NEXT:    .byte 255 ; @TType Encoding = omit
405 ; GISEL-NEXT:    .byte 1 ; Call site Encoding = uleb128
406 ; GISEL-NEXT:    .uleb128 Lcst_end1-Lcst_begin1
407 ; GISEL-NEXT:  Lcst_begin1:
408 ; GISEL-NEXT:    .uleb128 Ltmp3-Lfunc_begin1 ; >> Call Site 1 <<
409 ; GISEL-NEXT:    .uleb128 Ltmp4-Ltmp3 ; Call between Ltmp3 and Ltmp4
410 ; GISEL-NEXT:    .uleb128 Ltmp5-Lfunc_begin1 ; jumps to Ltmp5
411 ; GISEL-NEXT:    .byte 0 ; On action: cleanup
412 ; GISEL-NEXT:    .uleb128 Ltmp6-Lfunc_begin1 ; >> Call Site 2 <<
413 ; GISEL-NEXT:    .uleb128 Ltmp7-Ltmp6 ; Call between Ltmp6 and Ltmp7
414 ; GISEL-NEXT:    .uleb128 Ltmp8-Lfunc_begin1 ; jumps to Ltmp8
415 ; GISEL-NEXT:    .byte 0 ; On action: cleanup
416 ; GISEL-NEXT:    .uleb128 Ltmp7-Lfunc_begin1 ; >> Call Site 3 <<
417 ; GISEL-NEXT:    .uleb128 Lfunc_end1-Ltmp7 ; Call between Ltmp7 and Lfunc_end1
418 ; GISEL-NEXT:    .byte 0 ; has no landing pad
419 ; GISEL-NEXT:    .byte 0 ; On action: cleanup
420 ; GISEL-NEXT:  Lcst_end1:
421 ; GISEL-NEXT:    .p2align 2, 0x0
422 entry:
423   %s = alloca %struct.S, align 1
424   call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %s) #2
425   %call = invoke ptr @foo1() [ "clang.arc.attachedcall"(ptr @objc_retainAutoreleasedReturnValue) ]
426           to label %invoke.cont unwind label %lpad
428 invoke.cont:                                      ; preds = %entry
429   invoke void @objc_object(ptr %call) #5
430           to label %invoke.cont2 unwind label %lpad1
432 invoke.cont2:                                     ; preds = %invoke.cont
433   tail call void @llvm.objc.release(ptr %call)
434   %call3 = call ptr @_ZN1SD1Ev(ptr nonnull dereferenceable(1) %s)
435   call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %s)
436   ret void
438 lpad:                                             ; preds = %entry
439   %0 = landingpad { ptr, i32 }
440           cleanup
441   br label %ehcleanup
443 lpad1:                                            ; preds = %invoke.cont
444   %1 = landingpad { ptr, i32 }
445           cleanup
446   tail call void @llvm.objc.release(ptr %call)
447   br label %ehcleanup
449 ehcleanup:                                        ; preds = %lpad1, %lpad
450   %.pn = phi { ptr, i32 } [ %1, %lpad1 ], [ %0, %lpad ]
451   %call4 = call ptr @_ZN1SD1Ev(ptr nonnull dereferenceable(1) %s)
452   call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %s)
453   resume { ptr, i32 } %.pn
456 define dso_local ptr @rv_marker_5_indirect_call() {
457 ; SELDAG-LABEL: rv_marker_5_indirect_call:
458 ; SELDAG:       ; %bb.0: ; %entry
459 ; SELDAG-NEXT:    stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill
460 ; SELDAG-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
461 ; SELDAG-NEXT:    .cfi_def_cfa_offset 32
462 ; SELDAG-NEXT:    .cfi_offset w30, -8
463 ; SELDAG-NEXT:    .cfi_offset w29, -16
464 ; SELDAG-NEXT:    .cfi_offset w19, -24
465 ; SELDAG-NEXT:    .cfi_offset w20, -32
466 ; SELDAG-NEXT:  Lloh0:
467 ; SELDAG-NEXT:    adrp x8, _fptr@PAGE
468 ; SELDAG-NEXT:  Lloh1:
469 ; SELDAG-NEXT:    ldr x8, [x8, _fptr@PAGEOFF]
470 ; SELDAG-NEXT:    blr x8
471 ; SELDAG-NEXT:    mov x29, x29
472 ; SELDAG-NEXT:    bl _objc_retainAutoreleasedReturnValue
473 ; SELDAG-NEXT:    mov x19, x0
474 ; SELDAG-NEXT:    bl _foo2
475 ; SELDAG-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
476 ; SELDAG-NEXT:    mov x0, x19
477 ; SELDAG-NEXT:    ldp x20, x19, [sp], #32 ; 16-byte Folded Reload
478 ; SELDAG-NEXT:    ret
479 ; SELDAG-NEXT:    .loh AdrpLdr Lloh0, Lloh1
481 ; GISEL-LABEL: rv_marker_5_indirect_call:
482 ; GISEL:       ; %bb.0: ; %entry
483 ; GISEL-NEXT:    stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill
484 ; GISEL-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
485 ; GISEL-NEXT:    .cfi_def_cfa_offset 32
486 ; GISEL-NEXT:    .cfi_offset w30, -8
487 ; GISEL-NEXT:    .cfi_offset w29, -16
488 ; GISEL-NEXT:    .cfi_offset w19, -24
489 ; GISEL-NEXT:    .cfi_offset w20, -32
490 ; GISEL-NEXT:  Lloh8:
491 ; GISEL-NEXT:    adrp x8, _fptr@PAGE
492 ; GISEL-NEXT:  Lloh9:
493 ; GISEL-NEXT:    ldr x8, [x8, _fptr@PAGEOFF]
494 ; GISEL-NEXT:    blr x8
495 ; GISEL-NEXT:    mov x29, x29
496 ; GISEL-NEXT:    bl _objc_retainAutoreleasedReturnValue
497 ; GISEL-NEXT:    mov x19, x0
498 ; GISEL-NEXT:    bl _foo2
499 ; GISEL-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
500 ; GISEL-NEXT:    mov x0, x19
501 ; GISEL-NEXT:    ldp x20, x19, [sp], #32 ; 16-byte Folded Reload
502 ; GISEL-NEXT:    ret
503 ; GISEL-NEXT:    .loh AdrpLdr Lloh8, Lloh9
504 entry:
505   %0 = load ptr, ptr @fptr, align 8
506   %call = call ptr %0() [ "clang.arc.attachedcall"(ptr @objc_retainAutoreleasedReturnValue) ]
507   tail call void @foo2(ptr %call)
508   ret ptr %call
511 declare ptr @foo(i64, i64, i64)
513 define dso_local void @rv_marker_multiarg(i64 %a, i64 %b, i64 %c) {
514 ; SELDAG-LABEL: rv_marker_multiarg:
515 ; SELDAG:       ; %bb.0:
516 ; SELDAG-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
517 ; SELDAG-NEXT:    .cfi_def_cfa_offset 16
518 ; SELDAG-NEXT:    .cfi_offset w30, -8
519 ; SELDAG-NEXT:    .cfi_offset w29, -16
520 ; SELDAG-NEXT:    mov x8, x0
521 ; SELDAG-NEXT:    mov x0, x2
522 ; SELDAG-NEXT:    mov x2, x8
523 ; SELDAG-NEXT:    bl _foo
524 ; SELDAG-NEXT:    mov x29, x29
525 ; SELDAG-NEXT:    bl _objc_retainAutoreleasedReturnValue
526 ; SELDAG-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
527 ; SELDAG-NEXT:    ret
529 ; GISEL-LABEL: rv_marker_multiarg:
530 ; GISEL:       ; %bb.0:
531 ; GISEL-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
532 ; GISEL-NEXT:    .cfi_def_cfa_offset 16
533 ; GISEL-NEXT:    .cfi_offset w30, -8
534 ; GISEL-NEXT:    .cfi_offset w29, -16
535 ; GISEL-NEXT:    mov x3, x0
536 ; GISEL-NEXT:    mov x0, x2
537 ; GISEL-NEXT:    mov x2, x3
538 ; GISEL-NEXT:    bl _foo
539 ; GISEL-NEXT:    mov x29, x29
540 ; GISEL-NEXT:    bl _objc_retainAutoreleasedReturnValue
541 ; GISEL-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
542 ; GISEL-NEXT:    ret
543   call ptr @foo(i64 %c, i64 %b, i64 %a) [ "clang.arc.attachedcall"(ptr @objc_retainAutoreleasedReturnValue) ]
544   ret void
547 declare ptr @objc_retainAutoreleasedReturnValue(ptr)
548 declare ptr @objc_unsafeClaimAutoreleasedReturnValue(ptr)
549 declare i32 @__gxx_personality_v0(...)
550 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
551 ; CHECK: {{.*}}