1
1
; RUN: llc -o - %s | FileCheck --check-prefix=SELDAG --check-prefix=CHECK %s
2
2
; RUN: llc -global-isel -o - %s | FileCheck --check-prefix=GISEL --check-prefix=CHECK %s
3
3
4
- ; TODO: support marker generation with GlobalISel
5
4
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
6
- target triple = "arm64-apple-iphoneos "
5
+ target triple = "arm64-apple-ios "
7
6
8
7
declare i8* @foo0 (i32 )
9
8
declare i8* @foo1 ()
@@ -26,38 +25,36 @@ declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture)
26
25
@fptr = dso_local global i8* ()* null , align 8
27
26
28
27
define dso_local i8* @rv_marker_1_retain () {
29
- ; CHECK-LABEL: rv_marker_1_retain:
30
- ; CHECK: .cfi_offset w30, -16
31
- ; CHECK-NEXT: bl foo1
32
- ; CHECK-NEXT: mov x29, x29
33
- ; CHECK-NEXT: bl objc_retainAutoreleasedReturnValue
28
+ ; CHECK-LABEL: _rv_marker_1_retain:
29
+ ; CHECK: bl _foo1
30
+ ; CHECK-NEXT: mov x29, x29
31
+ ; CHECK-NEXT: bl _objc_retainAutoreleasedReturnValue
34
32
;
35
33
entry:
36
34
%call = call i8* @foo1 () [ "clang.arc.attachedcall" (i8* (i8* )* @objc_retainAutoreleasedReturnValue ) ]
37
35
ret i8* %call
38
36
}
39
37
40
38
define dso_local i8* @rv_marker_1_unsafeClaim () {
41
- ; CHECK-LABEL: rv_marker_1_unsafeClaim:
42
- ; CHECK: .cfi_offset w30, -16
43
- ; CHECK-NEXT: bl foo1
44
- ; CHECK-NEXT: mov x29, x29
45
- ; CHECK-NEXT: bl objc_unsafeClaimAutoreleasedReturnValue
39
+ ; CHECK-LABEL: _rv_marker_1_unsafeClaim:
40
+ ; CHECK: bl _foo1
41
+ ; CHECK-NEXT: mov x29, x29
42
+ ; CHECK-NEXT: bl _objc_unsafeClaimAutoreleasedReturnValue
46
43
;
47
44
entry:
48
45
%call = call i8* @foo1 () [ "clang.arc.attachedcall" (i8* (i8* )* @objc_unsafeClaimAutoreleasedReturnValue ) ]
49
46
ret i8* %call
50
47
}
51
48
52
49
define dso_local void @rv_marker_2_select (i32 %c ) {
53
- ; CHECK-LABEL: rv_marker_2_select :
50
+ ; CHECK-LABEL: _rv_marker_2_select :
54
51
; SELDAG: cinc w0, w8, eq
55
52
; GISEL: csinc w0, w8, wzr, eq
56
- ; CHECK-NEXT: bl foo0
57
- ; CHECK-NEXT: mov x29, x29
58
- ; CHECK-NEXT: bl objc_retainAutoreleasedReturnValue
59
- ; CHECK-NEXT: ldr x30, [sp], #16
60
- ; CHECK-NEXT: b foo2
53
+ ; CHECK-NEXT: bl _foo0
54
+ ; CHECK-NEXT: mov x29, x29
55
+ ; CHECK-NEXT: bl _objc_retainAutoreleasedReturnValue
56
+ ; CHECK-NEXT: ldp x29, x30, [sp], #16
57
+ ; CHECK-NEXT: b _foo2
61
58
;
62
59
entry:
63
60
%tobool.not = icmp eq i32 %c , 0
@@ -68,11 +65,10 @@ entry:
68
65
}
69
66
70
67
define dso_local void @rv_marker_3 () personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8* ) {
71
- ; CHECK-LABEL: rv_marker_3
72
- ; CHECK: .cfi_offset w30, -32
73
- ; CHECK-NEXT: bl foo1
74
- ; CHECK-NEXT: mov x29, x29
75
- ; CHECK-NEXT: bl objc_retainAutoreleasedReturnValue
68
+ ; CHECK-LABEL: _rv_marker_3:
69
+ ; CHECK: bl _foo1
70
+ ; CHECK-NEXT: mov x29, x29
71
+ ; CHECK-NEXT: bl _objc_retainAutoreleasedReturnValue
76
72
;
77
73
entry:
78
74
%call = call i8* @foo1 () [ "clang.arc.attachedcall" (i8* (i8* )* @objc_retainAutoreleasedReturnValue ) ]
@@ -91,12 +87,12 @@ lpad: ; preds = %entry
91
87
}
92
88
93
89
define dso_local void @rv_marker_4 () personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8* ) {
94
- ; CHECK-LABEL: rv_marker_4
95
- ; CHECK: . Ltmp3:
96
- ; CHECK-NEXT: bl foo1
90
+ ; CHECK-LABEL: _rv_marker_4:
91
+ ; CHECK: Ltmp3:
92
+ ; CHECK-NEXT: bl _foo1
97
93
; CHECK-NEXT: mov x29, x29
98
- ; CHECK-NEXT: bl objc_retainAutoreleasedReturnValue
99
- ; CHECK-NEXT: . Ltmp4:
94
+ ; CHECK-NEXT: bl _objc_retainAutoreleasedReturnValue
95
+ ; CHECK-NEXT: Ltmp4:
100
96
;
101
97
entry:
102
98
%s = alloca %struct.S , align 1
@@ -134,11 +130,11 @@ ehcleanup: ; preds = %lpad1, %lpad
134
130
}
135
131
136
132
define dso_local i8* @rv_marker_5_indirect_call () {
137
- ; CHECK-LABEL: rv_marker_5_indirect_call
133
+ ; CHECK-LABEL: _rv_marker_5_indirect_call:
138
134
; CHECK: ldr [[ADDR:x[0-9]+]], [
139
135
; CHECK-NEXT: blr [[ADDR]]
140
- ; CHECK-NEXT: mov x29, x29
141
- ; CHECK-NEXT: bl objc_retainAutoreleasedReturnValue
136
+ ; CHECK-NEXT: mov x29, x29
137
+ ; CHECK-NEXT: bl _objc_retainAutoreleasedReturnValue
142
138
entry:
143
139
%0 = load i8* ()*, i8* ()** @fptr , align 8
144
140
%call = call i8* %0 () [ "clang.arc.attachedcall" (i8* (i8* )* @objc_retainAutoreleasedReturnValue ) ]
@@ -149,13 +145,13 @@ entry:
149
145
declare i8* @foo (i64 , i64 , i64 )
150
146
151
147
define dso_local void @rv_marker_multiarg (i64 %a , i64 %b , i64 %c ) {
152
- ; CHECK-LABEL: rv_marker_multiarg
153
- ; CHECK: mov [[TMP:x[0-9]+]], x0
154
- ; CHECK-NEXT: mov x0, x2
155
- ; CHECK-NEXT: mov x2, [[TMP]]
156
- ; CHECK-NEXT: bl foo
157
- ; CHECK-NEXT: mov x29, x29
158
- ; CHECK-NEXT: bl objc_retainAutoreleasedReturnValue
148
+ ; CHECK-LABEL: _rv_marker_multiarg:
149
+ ; CHECK: mov [[TMP:x[0-9]+]], x0
150
+ ; CHECK-NEXT: mov x0, x2
151
+ ; CHECK-NEXT: mov x2, [[TMP]]
152
+ ; CHECK-NEXT: bl _foo
153
+ ; CHECK-NEXT: mov x29, x29
154
+ ; CHECK-NEXT: bl _objc_retainAutoreleasedReturnValue
159
155
call i8* @foo (i64 %c , i64 %b , i64 %a ) [ "clang.arc.attachedcall" (i8* (i8* )* @objc_retainAutoreleasedReturnValue ) ]
160
156
ret void
161
157
}
0 commit comments