1- // RUN: %target-swift-frontend -parse-stdlib -emit-ir -Onone %s | %FileCheck --check-prefix=IR-Onone %s
1+ // RUN: %target-swift-frontend -swift-version 3 -parse-stdlib -Xllvm -sil-disable-pass=FunctionSignatureOpts -Xllvm -sil-disable-pass=GenericSpecializer -emit-ir -O %s | %FileCheck %s
2+ // RUN: %target-swift-frontend -swift-version 4 -parse-stdlib -Xllvm -sil-disable-pass=FunctionSignatureOpts -Xllvm -sil-disable-pass=GenericSpecializer -emit-ir -O %s | %FileCheck %s
23//
3- // Check that access markers in @_semantics("optimize.sil.preserve_exclusivity") functions generate runtime calls.
4-
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.
4+ // Check that the -O pipeline always preserves the runtime calls for Builtin access markers and that the KeyPath implementation is fully inlined.
85
96@_silgen_name ( " marker1 " )
107func marker1( ) -> ( )
@@ -15,122 +12,44 @@ func marker2() -> ()
1512@_silgen_name ( " marker3 " )
1613func marker3( ) -> ( )
1714
18- @_silgen_name ( " marker4 " )
19- func marker4( ) -> ( )
20-
21- @_silgen_name ( " marker5 " )
22- func marker5( ) -> ( )
23-
24- @_silgen_name ( " marker6 " )
25- func marker6( ) -> ( )
15+ // IR-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity11beginAccessyyBp_BpxmtlF"(i8*, i8*, %swift.type*{{.*}}, %swift.type*{{.*}} %T1)
16+ // IR: call void @swift_beginAccess
17+ // IR-NEXT: ret void
2618
27- // IR-Onone-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity10beginNoOptyyBp_BpxmtlF"(i8*, i8*, %swift.type*, %swift.type* %T1)
28- // IR-Onone: call void @swift_beginAccess
29- // IR-Onone-NEXT: ret void
30-
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
34-
35- @_semantics ( " optimize.sil.preserve_exclusivity " )
36- public func beginNoOpt< T1 > ( _ address: Builtin . RawPointer , _ scratch: Builtin . RawPointer , _ ty1: T1 . Type ) {
19+ public func beginAccess< T1> ( _ address: Builtin . RawPointer , _ scratch: Builtin . RawPointer , _ ty1: T1 . Type ) {
3720 marker1 ( )
3821 Builtin . beginUnpairedModifyAccess ( address, scratch, ty1) ;
3922}
4023
41- // IR-Onone-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity8endNoOptyyBpF"(i8*)
42- // IR-Onone: call void @swift_endAccess
43- // IR-Onone-NEXT: ret void
44-
45- // IR-O-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity8endNoOptyyBpF"(i8*)
46- // IR-O: call void @swift_endAccess
47- // IR-O-NEXT: ret void
48- @_semantics ( " optimize.sil.preserve_exclusivity " )
49- public func endNoOpt( _ address: Builtin . RawPointer ) {
24+ // CHECK-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity9endAccessyyBpF"(i8*{{.*}})
25+ // CHECK: call void @swift_endAccess
26+ // CHECK-NEXT: ret void
27+ public func endAccess( _ address: Builtin . RawPointer ) {
5028 marker2 ( )
5129 Builtin . endUnpairedAccess ( address)
5230}
5331
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
32+ // CHECK-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity10readAccessyyBp_xmtlF"(i8*, %swift.type*{{.*}}, %swift.type*{{.*}} %T1)
33+ // CHECK: call void @swift_beginAccess
34+ // CHECK: ret void
6135@_semantics ( " optimize.sil.preserve_exclusivity " )
62- public func readNoOpt < T1> ( _ address: Builtin . RawPointer , _ ty1: T1 . Type ) {
36+ public func readAccess < T1> ( _ address: Builtin . RawPointer , _ ty1: T1 . Type ) {
6337 marker3 ( )
6438 Builtin . performInstantaneousReadAccess ( address, ty1) ;
6539}
6640
67- // Make sure testNoOpt properly inlines in our functions.
68- //
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
77- public func testNoOpt( _ k1: Builtin . RawPointer ) {
78- beginNoOpt ( k1, k1, Builtin . RawPointer. self)
79- endNoOpt ( k1)
80- readNoOpt ( k1, Builtin . RawPointer. self)
81- }
82-
83- // IR-Onone-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity8beginOptyyBp_BpxmtlF"(i8*, i8*, %swift.type*, %swift.type* %T1)
84- // IR-Onone: call void @swift_beginAccess
85- // IR-Onone-NEXT: ret void
86-
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
91-
92- public func beginOpt< T1> ( _ address: Builtin . RawPointer , _ scratch: Builtin . RawPointer , _ ty1: T1 . Type ) {
93- marker4 ( )
94- Builtin . beginUnpairedModifyAccess ( address, scratch, ty1) ;
95- }
96-
97- // IR-Onone-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity6endOptyyBpF"(i8*)
98- // IR-Onone: call void @swift_endAccess
99- // IR-Onone-NEXT: ret void
100-
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
105-
106- public func endOpt( _ address: Builtin . RawPointer ) {
107- marker5 ( )
108- Builtin . endUnpairedAccess ( address)
109- }
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.
41+ // Make sure testAccess properly inlines in our functions.
12642//
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
132- public func testOpt( _ k1: Builtin . RawPointer ) {
133- beginOpt ( k1, k1, Builtin . RawPointer. self)
134- endOpt ( k1)
135- readOpt ( k1, Builtin . RawPointer. self)
43+ // CHECK-LABEL: define {{.*}}swiftcc void @"$S20preserve_exclusivity10testAccessyyBpF"(i8*)
44+ // CHECK: call swiftcc void @marker1
45+ // CHECK: call void @swift_beginAccess
46+ // CHECK: call swiftcc void @marker2
47+ // CHECK: call void @swift_endAccess
48+ // CHECK: call swiftcc void @marker3
49+ // CHECK: call void @swift_beginAccess
50+ // CHECK: ret void
51+ public func testAccess( _ k1: Builtin . RawPointer ) {
52+ beginAccess ( k1, k1, Builtin . RawPointer. self)
53+ endAccess ( k1)
54+ readAccess ( k1, Builtin . RawPointer. self)
13655}
0 commit comments