forked from swiftlang/swift
-
Notifications
You must be signed in to change notification settings - Fork 0
/
autorelease_optimized.sil
54 lines (41 loc) · 1.86 KB
/
autorelease_optimized.sil
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// RUN: %swift -gnone -O -target x86_64-apple-macosx10.9 -emit-assembly %s -o - | FileCheck -check-prefix x86_64 %s
// RUN: %swift -gnone -O -target armv7-apple-ios7 -emit-assembly %s -o - | FileCheck -check-prefix armv7 %s
// RUN: %swift -gnone -O -target arm64-apple-ios7 -emit-assembly %s -o - | FileCheck -check-prefix arm64 %s
// rdar://17999904
// No i386 test right now because we don't actually have a formal pattern there.
import Builtin
class C {}
sil_vtable C {}
sil @_TFC21autorelease_optimized1Cd : $@convention(method) (@owned C) -> @owned Builtin.NativeObject {
bb0(%0 : $C):
%1 = unchecked_ref_cast %0 : $C to $Builtin.NativeObject // user: %2
return %1 : $Builtin.NativeObject // id: %2
}
sil public_external @foo : $@convention(thin) (@owned C) -> @autoreleased C
sil public_external @bar : $@convention(thin) (@owned C) -> ()
sil @baz : $@convention(thin) (@owned C) -> () {
bb0(%0 : $C):
%1 = function_ref @foo : $@convention(thin) (@owned C) -> @autoreleased C
%2 = apply %1(%0) : $@convention(thin) (@owned C) -> @autoreleased C
strong_retain_autoreleased %2 : $C
// This call is just so that we won't tail-call
// objc_retainAutoreleasedReturnValue, which complicates the test.
%3 = function_ref @bar : $@convention(thin) (@owned C) -> ()
apply %3(%2) : $@convention(thin) (@owned C) -> ()
%5 = tuple ()
return %5 : $()
}
// x86_64: callq _foo
// x86_64-NEXT: movq %rax, %rdi
// x86_64-NEXT: callq _objc_retainAutoreleasedReturnValue
// armv7: bl _foo
// armv7-NEXT: @ InlineAsm Start
// armv7-NEXT: mov {{r7|fp}}, {{r7|fp}}
// sometimes: .code 32
// armv7: @ InlineAsm End
// armv7-NEXT: bl _objc_retainAutoreleasedReturnValue
// arm64: bl _foo
// arm64-NEXT: ; InlineAsm Start
// arm64-NEXT: mov {{x29|fp}}, {{x29|fp}}
// arm64-NEXT: ; InlineAsm End
// arm64-NEXT: bl _objc_retainAutoreleasedReturnValue