Skip to content

Commit 66d3d87

Browse files
committed
Remove a hack to change linkage from public_external to shared.
The linkage change let the compiler generate code for public functions which are imported from the stdlib - and are also available in the swiftCore library. This got worse since we use public linkage for @_versioned internal functions in the stdlib. Getting rid of the linkage change reduces code size a lot: up to 40% for some projects. I didn’t see any significant impact on benchmark performance.
1 parent 0b899c5 commit 66d3d87

File tree

2 files changed

+2
-8
lines changed

2 files changed

+2
-8
lines changed

lib/SILOptimizer/Transforms/SILCleanup.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,6 @@ static void cleanFunction(SILFunction &Fn) {
4747
}
4848
}
4949
}
50-
51-
// Rename functions with public_external linkage to prevent symbol conflict
52-
// with stdlib.
53-
if (Fn.isDefinition() && Fn.getLinkage() == SILLinkage::PublicExternal) {
54-
Fn.setLinkage(SILLinkage::SharedExternal);
55-
}
5650
}
5751

5852
namespace {

test/IRGen/sil_linkage.sil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ sil_stage canonical
88
// CHECK: define{{( protected)?}} swiftcc void @hidden_fragile_function_test() {{.*}} {
99
// CHECK: define linkonce_odr hidden swiftcc void @shared_fragile_function_test() {{.*}} {
1010
// CHECK: define{{( protected)?}} swiftcc void @private_fragile_function_test() {{.*}} {
11-
// CHECK: define linkonce_odr hidden swiftcc void @public_external_fragile_function_def_test() {{.*}} {
11+
// CHECK: define available_externally swiftcc void @public_external_fragile_function_def_test() {{.*}} {
1212
// CHECK: define{{( protected)?}} available_externally swiftcc void @hidden_external_fragile_function_def_test() {{.*}} {
1313
// CHECK: define linkonce_odr hidden swiftcc void @shared_external_fragile_function_def_test() {{.*}} {
1414
// CHECK: define{{( protected)?}} available_externally swiftcc void @private_external_fragile_function_def_test() {{.*}} {
1515
// CHECK: define{{( protected)?}} swiftcc void @public_resilient_function_test() {{.*}} {
1616
// CHECK: define hidden swiftcc void @hidden_resilient_function_test() {{.*}} {
1717
// CHECK: define linkonce_odr hidden swiftcc void @shared_resilient_function_test() {{.*}} {
1818
// CHECK: define internal swiftcc void @private_resilient_function_test() {{.*}}{
19-
// CHECK: define linkonce_odr hidden swiftcc void @public_external_resilient_function_def_test() {{.*}} {
19+
// CHECK: define available_externally swiftcc void @public_external_resilient_function_def_test() {{.*}} {
2020
// CHECK: define{{( protected)?}} available_externally hidden swiftcc void @hidden_external_resilient_function_def_test() {{.*}} {
2121
// CHECK: define linkonce_odr hidden swiftcc void @shared_external_resilient_function_def_test() {{.*}} {
2222

0 commit comments

Comments
 (0)