1
- // RUN: %target-swift-frontend -parse-stdlib -parse-stdlib -emit-ir -Onone %s | %FileCheck --check-prefix=IR-Onone %s
2
-
3
- // We check separately that:
1
+ // RUN: %target-swift-frontend -parse-stdlib -emit-ir -Onone %s | %FileCheck --check-prefix=IR-Onone %s
4
2
//
5
- // 1. We properly emit our special functions as inline always.
6
- // 2. end-to-end we inline the access markers.
3
+ // Check that access markers in @_semantics("optimize.sil.preserve_exclusivity") functions generate runtime calls.
7
4
8
- // RUN: %target-swift-frontend -parse-stdlib -Xllvm -sil-disable-pass=FunctionSignatureOpts -Xllvm -sil-disable-pass=GenericSpecializer -parse-stdlib -emit-ir -O -disable-llvm-optzns %s | %FileCheck --check-prefix=IR-Osil %s
9
- // RUN: %target-swift-frontend -parse-stdlib -Xllvm -sil-disable-pass=FunctionSignatureOpts -Xllvm -sil-disable-pass=GenericSpecializer -parse-stdlib -emit-ir -O %s | %FileCheck --check-prefix=IR-Ollvm %s
5
+ // RUN: %target-swift-frontend -parse-stdlib -Xllvm -sil-disable-pass=FunctionSignatureOpts -Xllvm -sil-disable-pass=GenericSpecializer -emit-ir -O %s | %FileCheck --check-prefix=IR-O %s
6
+ //
7
+ // Check that the -O pipeline preserves the runtime calls for @_semantics("optimize.sil.preserve_exclusivity") functions.
10
8
11
9
@_silgen_name ( " marker1 " )
12
10
func marker1( ) -> ( )
@@ -20,83 +18,119 @@ func marker3() -> ()
20
18
@_silgen_name ( " marker4 " )
21
19
func marker4( ) -> ( )
22
20
23
- // IR-Onone: define swiftcc void @"$S20preserve_exclusivity10beginNoOptyyBp_BpxmtlF"(i8*, i8*, %swift.type*, %swift.type* %T1)
21
+ @_silgen_name ( " marker5 " )
22
+ func marker5( ) -> ( )
23
+
24
+ @_silgen_name ( " marker6 " )
25
+ func marker6( ) -> ( )
26
+
27
+ // IR-Onone-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity10beginNoOptyyBp_BpxmtlF"(i8*, i8*, %swift.type*, %swift.type* %T1)
24
28
// IR-Onone: call void @swift_beginAccess
25
29
// IR-Onone-NEXT: ret void
26
30
27
- // IR-Osil : define swiftcc void @"$S20preserve_exclusivity10beginNoOptyyBp_BpxmtlF"(i8*, i8*, %swift.type*, %swift.type* %T1) [[ATTR:#[0-9][0-9]*]] {
28
- // IR-Osil : call void @swift_beginAccess
29
- // IR-Osil -NEXT: ret void
31
+ // IR-O-LABEL : define {{.*}} swiftcc void @"$S20preserve_exclusivity10beginNoOptyyBp_BpxmtlF"(i8*, i8*, %swift.type*{{.*}} , %swift.type*{{.*}} %T1)
32
+ // IR-O : call void @swift_beginAccess
33
+ // IR-O -NEXT: ret void
30
34
31
- @inline ( never)
32
35
@_semantics ( " optimize.sil.preserve_exclusivity " )
33
36
public func beginNoOpt< T1 > ( _ address: Builtin . RawPointer , _ scratch: Builtin . RawPointer , _ ty1: T1 . Type ) {
34
37
marker1 ( )
35
38
Builtin . beginUnpairedModifyAccess ( address, scratch, ty1) ;
36
39
}
37
40
38
- // IR-Onone: define swiftcc void @"$S20preserve_exclusivity8endNoOptyyBpF"(i8*)
41
+ // IR-Onone-LABEL : define {{.*}} swiftcc void @"$S20preserve_exclusivity8endNoOptyyBpF"(i8*)
39
42
// IR-Onone: call void @swift_endAccess
40
43
// IR-Onone-NEXT: ret void
41
44
42
- // IR-Osil: define swiftcc void @"$S20preserve_exclusivity8endNoOptyyBpF"(i8*) [[ATTR]]
43
- // IR-Osil: call void @swift_endAccess
44
- // IR-Osil-NEXT: ret void
45
- @inline ( never)
45
+ // IR-O-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity8endNoOptyyBpF"(i8*)
46
+ // IR-O: call void @swift_endAccess
47
+ // IR-O-NEXT: ret void
46
48
@_semantics ( " optimize.sil.preserve_exclusivity " )
47
49
public func endNoOpt( _ address: Builtin . RawPointer ) {
48
50
marker2 ( )
49
51
Builtin . endUnpairedAccess ( address)
50
52
}
51
53
52
- class Klass { }
54
+ // IR-Onone-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity9readNoOptyyBp_xmtlF"(i8*, %swift.type*, %swift.type* %T1)
55
+ // IR-Onone: call void @swift_beginAccess
56
+ // IR-Onone: ret void
57
+
58
+ // IR-O-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity9readNoOptyyBp_xmtlF"(i8*, %swift.type*{{.*}}, %swift.type*{{.*}} %T1)
59
+ // IR-O: call void @swift_beginAccess
60
+ // IR-O: ret void
61
+ @_semantics ( " optimize.sil.preserve_exclusivity " )
62
+ public func readNoOpt< T1> ( _ address: Builtin . RawPointer , _ ty1: T1 . Type ) {
63
+ marker3 ( )
64
+ Builtin . performInstantaneousReadAccess ( address, ty1) ;
65
+ }
53
66
54
67
// Make sure testNoOpt properly inlines in our functions.
55
68
//
56
- // IR-Ollvm: define swiftcc void @"$S20preserve_exclusivity9testNoOptyyBpF"(i8*)
57
- // IR-Ollvm: call swiftcc void @marker1
58
- // IR-Ollvm: call void @swift_beginAccess
59
- // IR-Ollvm: call swiftcc void @marker2
60
- // IR-Ollvm: call void @swift_endAccess
61
- // IR-Ollvm-NEXT: ret void
69
+ // IR-O-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity9testNoOptyyBpF"(i8*)
70
+ // IR-O: call swiftcc void @marker1
71
+ // IR-O: call void @swift_beginAccess
72
+ // IR-O: call swiftcc void @marker2
73
+ // IR-O: call void @swift_endAccess
74
+ // IR-O: call swiftcc void @marker3
75
+ // IR-O: call void @swift_beginAccess
76
+ // IR-O: ret void
62
77
public func testNoOpt( _ k1: Builtin . RawPointer ) {
63
78
beginNoOpt ( k1, k1, Builtin . RawPointer. self)
64
79
endNoOpt ( k1)
80
+ readNoOpt ( k1, Builtin . RawPointer. self)
65
81
}
66
82
67
- // IR-Onone: define swiftcc void @"$S20preserve_exclusivity8beginOptyyBp_BpxmtlF"(i8*, i8*, %swift.type*, %swift.type* %T1)
83
+ // IR-Onone-LABEL : define {{.*}} swiftcc void @"$S20preserve_exclusivity8beginOptyyBp_BpxmtlF"(i8*, i8*, %swift.type*, %swift.type* %T1)
68
84
// IR-Onone: call void @swift_beginAccess
69
85
// IR-Onone-NEXT: ret void
70
86
71
- // IR-Osil : define swiftcc void @"$S20preserve_exclusivity8beginOptyyBp_BpxmtlF"(i8*, i8*, %swift.type*, %swift.type* %T1)
72
- // IR-Osil -NEXT: entry
73
- // IR-Osil -NEXT: call swiftcc void @marker3
74
- // IR-Osil -NEXT: ret void
87
+ // IR-O-LABEL : define {{.*}} swiftcc void @"$S20preserve_exclusivity8beginOptyyBp_BpxmtlF"(i8*{{.*}} , i8*{{.*}} , %swift.type*{{.*}} , %swift.type*{{.*}} %T1)
88
+ // IR-O -NEXT: entry
89
+ // IR-O -NEXT: call swiftcc void @marker4
90
+ // IR-O -NEXT: ret void
75
91
76
- @inline ( never)
77
92
public func beginOpt< T1> ( _ address: Builtin . RawPointer , _ scratch: Builtin . RawPointer , _ ty1: T1 . Type ) {
78
- marker3 ( )
93
+ marker4 ( )
79
94
Builtin . beginUnpairedModifyAccess ( address, scratch, ty1) ;
80
95
}
81
96
82
- // IR-Onone: define swiftcc void @"$S20preserve_exclusivity6endOptyyBpF"(i8*)
97
+ // IR-Onone-LABEL : define {{.*}} swiftcc void @"$S20preserve_exclusivity6endOptyyBpF"(i8*)
83
98
// IR-Onone: call void @swift_endAccess
84
99
// IR-Onone-NEXT: ret void
85
100
86
- // IR-Osil : define swiftcc void @"$S20preserve_exclusivity6endOptyyBpF"(i8*)
87
- // IR-Osil -NEXT: entry
88
- // IR-Osil -NEXT: call swiftcc void @marker4
89
- // IR-Osil -NEXT: ret void
101
+ // IR-O-LABEL : define {{.*}} swiftcc void @"$S20preserve_exclusivity6endOptyyBpF"(i8*{{.*}} )
102
+ // IR-O -NEXT: entry
103
+ // IR-O -NEXT: call swiftcc void @marker5
104
+ // IR-O -NEXT: ret void
90
105
91
- @inline ( never)
92
106
public func endOpt( _ address: Builtin . RawPointer ) {
93
- marker4 ( )
107
+ marker5 ( )
94
108
Builtin . endUnpairedAccess ( address)
95
109
}
96
110
111
+ // IR-Onone-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity7readOptyyBp_xmtlF"(i8*, %swift.type*, %swift.type* %T1)
112
+ // IR-Onone: call void @swift_beginAccess
113
+ // IR-Onone: ret void
114
+
115
+ // IR-O-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity7readOptyyBp_xmtlF"(i8*{{.*}}, %swift.type*{{.*}}, %swift.type*{{.*}} %T1)
116
+ // IR-O-NEXT: entry
117
+ // IR-O-NEXT: call swiftcc void @marker6
118
+ // IR-O-NEXT: ret void
119
+
120
+ public func readOpt< T1> ( _ address: Builtin . RawPointer , _ ty1: T1 . Type ) {
121
+ marker6 ( )
122
+ Builtin . performInstantaneousReadAccess ( address, ty1) ;
123
+ }
124
+
125
+ // Make sure testOpt properly inlines in our functions.
126
+ //
127
+ // IR-O-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity7testOptyyBpF"(i8*{{.*}})
128
+ // IR-O: call swiftcc void @marker4
129
+ // IR-O: call swiftcc void @marker5
130
+ // IR-O: call swiftcc void @marker6
131
+ // IR-O: ret void
97
132
public func testOpt( _ k1: Builtin . RawPointer ) {
98
133
beginOpt ( k1, k1, Builtin . RawPointer. self)
99
134
endOpt ( k1)
135
+ readOpt ( k1, Builtin . RawPointer. self)
100
136
}
101
-
102
- // IR-Osil: attributes [[ATTR]] = { alwaysinline
0 commit comments