Skip to content

Commit 218cc9b

Browse files
committed
Add some pre-specializations for internal stdlib functions in SwiftOnoneSupport
It's very unlikely that those functions are really referenced by Onone executables, but we want to be ABI compatible. Also, there is no guarantee that this version of SwiftOnoneSupport will always trigger all symbol to be pre-specialized. If the optimizer changes, we might need to add other explicit pre-specializations of internal stdlib symbols. rdar://problem/48924409
1 parent 17aa1c0 commit 218cc9b

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

stdlib/public/SwiftOnoneSupport/SwiftOnoneSupport.swift

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,71 @@
1313
//===----------------------------------------------------------------------===//
1414
import Swift
1515

16+
// Explicitly force pre-specializations of some symbols of the library.
17+
// This makes the set of pre-specialized symbols more stable and not so
18+
// depending on the optimizer.
19+
@_semantics("prespecialize.$sS2ayxGycfC")
20+
@_semantics("prespecialize.$sSa034_makeUniqueAndReserveCapacityIfNotB0yyF")
21+
@_semantics("prespecialize.$sSa10startIndexSivg")
22+
@_semantics("prespecialize.$sSa11_getElement_20wasNativeTypeChecked22matchingSubscriptCheckxSi_Sbs16_DependenceTokenVtF")
23+
@_semantics("prespecialize.$sSa12_getCapacitySiyF")
24+
@_semantics("prespecialize.$sSa12arrayLiteralSayxGxd_tcfC")
25+
@_semantics("prespecialize.$sSa15_checkSubscript_20wasNativeTypeCheckeds16_DependenceTokenVSi_SbtF")
26+
@_semantics("prespecialize.$sSa15reserveCapacityyySiF")
27+
@_semantics("prespecialize.$sSa16_copyToNewBuffer8oldCountySi_tF")
28+
@_semantics("prespecialize.$sSa19_uninitializedCountSayxGSi_tcfC")
29+
@_semantics("prespecialize.$sSa21_makeMutableAndUniqueyyF")
30+
@_semantics("prespecialize.$sSa22_copyToContiguousArrays0cD0VyxGyF")
31+
@_semantics("prespecialize.$sSa28_unsafeUninitializedCapacity16initializingWithSayxGSi_ySryxGz_SiztKXEtKcfC")
32+
@_semantics("prespecialize.$sSa29_hoistableIsNativeTypeCheckedSbyF")
33+
@_semantics("prespecialize.$sSa36_reserveCapacityAssumingUniqueBuffer8oldCountySi_tF")
34+
@_semantics("prespecialize.$sSa37_appendElementAssumeUniqueAndCapacity_03newB0ySi_xntF")
35+
@_semantics("prespecialize.$sSa5countSivg")
36+
@_semantics("prespecialize.$sSa6appendyyxnF")
37+
@_semantics("prespecialize.$sSa8capacitySivg")
38+
@_semantics("prespecialize.$sSa8endIndexSivg")
39+
@_semantics("prespecialize.$sSa9_getCountSiyF")
40+
@_semantics("prespecialize.$sSa9formIndex5afterySiz_tF")
41+
@_semantics("prespecialize.$sSa9formIndex6beforeySiz_tF")
42+
@_semantics("prespecialize.$sSa9removeAll15keepingCapacityySb_tF")
43+
@_semantics("prespecialize.$sSa9removeAll15keepingCapacityySb_tFfA_")
44+
@_semantics("prespecialize.$sSa9removeAll15keepingCapacityySb_tF")
45+
@_semantics("prespecialize.$sSa9repeating5countSayxGx_SitcfC")
46+
@_semantics("prespecialize.$sSayxSiciM")
47+
@_semantics("prespecialize.$sSayxSicig")
48+
@_semantics("prespecialize.$sSayxSicir")
49+
@_semantics("prespecialize.$ss12_ArrayBufferV013requestNativeB0s011_ContiguousaB0VyxGSgyF")
50+
@_semantics("prespecialize.$ss12_ArrayBufferV027requestUniqueMutableBackingB015minimumCapacitys011_ContiguousaB0VyxGSgSi_tF")
51+
@_semantics("prespecialize.$ss12_ArrayBufferV10_nonNatives06_CocoaA7WrapperVvg")
52+
@_semantics("prespecialize.$ss12_ArrayBufferV10_typeCheckyySnySiGF")
53+
@_semantics("prespecialize.$ss12_ArrayBufferV10startIndexSivg")
54+
@_semantics("prespecialize.$ss12_ArrayBufferV13_copyContents8subRange12initializingSpyxGSnySiG_AFtF")
55+
@_semantics("prespecialize.$ss12_ArrayBufferV19_getElementSlowPathyyXlSiF")
56+
@_semantics("prespecialize.$ss12_ArrayBufferV19firstElementAddressSpyxGvg")
57+
@_semantics("prespecialize.$ss12_ArrayBufferV20isUniquelyReferencedSbyF")
58+
@_semantics("prespecialize.$ss12_ArrayBufferV37_checkInoutAndNativeTypeCheckedBounds_03wasfgH0ySi_SbtF")
59+
@_semantics("prespecialize.$ss12_ArrayBufferV5countSivs")
60+
@_semantics("prespecialize.$ss12_ArrayBufferV7_buffer19shiftedToStartIndexAByxGs011_ContiguousaB0VyxG_SitcfC")
61+
@_semantics("prespecialize.$ss12_ArrayBufferV7_natives011_ContiguousaB0VyxGvg")
62+
@_semantics("prespecialize.$ss12_ArrayBufferV8capacitySivg")
63+
@_semantics("prespecialize.$ss12_ArrayBufferV8endIndexSivg")
64+
@_semantics("prespecialize.$ss12_ArrayBufferV9_isNativeSbvg")
65+
@_semantics("prespecialize.$ss12_ArrayBufferVyxSicig")
66+
@_semantics("prespecialize.$ss12_ArrayBufferVyxSicir")
67+
@_semantics("prespecialize.$ss22_ContiguousArrayBufferV10startIndexSivg")
68+
@_semantics("prespecialize.$ss22_ContiguousArrayBufferV13_copyContents8subRange12initializingSpyxGSnySiG_AFtF")
69+
@_semantics("prespecialize.$ss22_ContiguousArrayBufferV18_initStorageHeader5count8capacityySi_SitF")
70+
@_semantics("prespecialize.$ss22_ContiguousArrayBufferV19firstElementAddressSpyxGvg")
71+
@_semantics("prespecialize.$ss22_ContiguousArrayBufferV5countSivg")
72+
@_semantics("prespecialize.$ss22_ContiguousArrayBufferV7_buffer19shiftedToStartIndexAByxGAE_SitcfC")
73+
@_semantics("prespecialize.$ss22_ContiguousArrayBufferV8endIndexSivg")
74+
@_semantics("prespecialize.$ss22_ContiguousArrayBufferVAByxGycfC")
75+
@_semantics("prespecialize.$ss12_ArrayBufferVyxGSlsSl5index5after5IndexQzAG_tFTW")
76+
@_semantics("prespecialize.$ss12_ArrayBufferVyxGSlsSl20_failEarlyRangeCheck_6boundsy5IndexQz_SnyAGGtFTW")
77+
func prespecializationProxy<T>(_ x: T) {
78+
}
79+
80+
1681
internal enum _Prespecialize {
1782
// Create specializations for the arrays of most
1883
// popular builtin integer and floating point types.
@@ -67,6 +132,14 @@ internal enum _Prespecialize {
67132
// force specialization of append.
68133
a.append(a[0])
69134

135+
#if _runtime(_ObjC)
136+
// Explicitly specialize some private functions.
137+
// It's very unlikely that those functions are really referenced from
138+
// a Onone executable. But let's make sure all the swift 5.0 symbols
139+
// are also in upcoming versions of the OnoneSupport library.
140+
prespecializationProxy(sampleValue)
141+
#endif
142+
70143
// force specialization of print<Element>
71144
print(sampleValue)
72145
print("Element:\(sampleValue)")
@@ -118,6 +191,10 @@ internal enum _Prespecialize {
118191
// force specialization of append.
119192
a.append(a[0])
120193

194+
#if _runtime(_ObjC)
195+
prespecializationProxy(sampleValue)
196+
#endif
197+
121198
// force specialization of print<Element>
122199
print(sampleValue)
123200
print("Element:\(sampleValue)")

0 commit comments

Comments
 (0)