Skip to content

Commit a103186

Browse files
committed
IRGen: Use linkonce_odr linkage for outlined copy_addr and destroy_addr
Now that they have unique mangling, we can get a small code size savings for non-WMO builds.
1 parent c31620d commit a103186

File tree

4 files changed

+4
-13
lines changed

4 files changed

+4
-13
lines changed

lib/IRGen/GenDecl.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4319,9 +4319,6 @@ void IRGenModule::generateCallToOutlinedCopyAddr(
43194319
llvm::Type *llvmType = dest->getType();
43204320
auto *outlinedF =
43214321
(this->*MethodToCall)(objectTI, llvmType, T, typeToMetadataVec);
4322-
llvm::Function *fn = dyn_cast<llvm::Function>(outlinedF);
4323-
assert(fn && "Expected llvm::Function");
4324-
fn->setLinkage(llvm::GlobalValue::InternalLinkage);
43254322
llvm::CallInst *call = IGF.Builder.CreateCall(outlinedF, argsVec);
43264323
call->setCallingConv(DefaultCC);
43274324
}
@@ -4367,12 +4364,6 @@ void IRGenModule::generateCallToOutlinedDestroy(
43674364
},
43684365
true /*setIsNoInline*/);
43694366

4370-
if (T.hasArchetype()) {
4371-
llvm::Function *fn = dyn_cast<llvm::Function>(outlinedF);
4372-
assert(fn && "Expected llvm::Function");
4373-
fn->setLinkage(llvm::GlobalValue::InternalLinkage);
4374-
}
4375-
43764367
llvm::CallInst *call = IGF.Builder.CreateCall(outlinedF, argsVec);
43774368
call->setCallingConv(DefaultCC);
43784369
}

test/IRGen/enum_resilience.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,5 +324,5 @@ private enum ProtGenEnumWithSize<T: Prot> {
324324
case c2(s2: Size)
325325
}
326326

327-
// CHECK-LABEL: define internal %T15enum_resilience19ProtGenEnumWithSize33_59077B69D65A4A3BEE0C93708067D5F0LLO* @"$S15enum_resilience19ProtGenEnumWithSize33_59077B69D65A4A3BEE0C93708067D5F0LLOyxGAA0C0RzlWOh"(%T15enum_resilience19ProtGenEnumWithSize
327+
// CHECK-LABEL: define linkonce_odr hidden %T15enum_resilience19ProtGenEnumWithSize33_59077B69D65A4A3BEE0C93708067D5F0LLO* @"$S15enum_resilience19ProtGenEnumWithSize33_59077B69D65A4A3BEE0C93708067D5F0LLOyxGAA0C0RzlWOh"(%T15enum_resilience19ProtGenEnumWithSize
328328
// CHECK: ret %T15enum_resilience19ProtGenEnumWithSize33_59077B69D65A4A3BEE0C93708067D5F0LLO* %0

test/IRGen/existentials_objc.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ bb0(%0 : $*Any, %1 : $*Any):
4242
// CHECK: call %Any* @"$SypWOb"(%Any* %1, %Any* %0)
4343
// CHECK-NEXT: ret void
4444

45-
// CHECK-DAG: define internal %Any* @"$SypWOb"([[ANY:%Any]]*, %Any*)
45+
// CHECK-DAG: define linkonce_odr hidden %Any* @"$SypWOb"([[ANY:%Any]]*, %Any*)
4646
// CHECK: [[T0:%.*]] = getelementptr inbounds [[ANY]], [[ANY]]* [[SRC:%0]], i32 0, i32 1
4747
// CHECK-NEXT: [[TYPE:%.*]] = load %swift.type*, %swift.type** [[T0]], align 8
4848
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[ANY]], [[ANY]]* [[DEST:%1]], i32 0, i32 1

test/IRGen/existentials_opaque_boxed.sil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ bb0(%0 : $*Existential):
443443
return %t : $()
444444
}
445445

446-
// CHECK: define{{( protected)?}} internal %T25existentials_opaque_boxed11ExistentialP* @"$S25existentials_opaque_boxed11Existential_pWOb"(%T25existentials_opaque_boxed11ExistentialP*, %T25existentials_opaque_boxed11ExistentialP*)
446+
// CHECK: define linkonce_odr hidden %T25existentials_opaque_boxed11ExistentialP* @"$S25existentials_opaque_boxed11Existential_pWOb"(%T25existentials_opaque_boxed11ExistentialP*, %T25existentials_opaque_boxed11ExistentialP*)
447447
// CHECK: [[METADATA_ADDR:%.*]] = getelementptr inbounds %T25existentials_opaque_boxed11ExistentialP, %T25existentials_opaque_boxed11ExistentialP* %0, i32 0, i32 1
448448
// CHECK: [[METADATA:%.*]] = load %swift.type*, %swift.type** [[METADATA_ADDR]]
449449
// CHECK: [[LOCAL_METADATA_ADDR:%.*]] = getelementptr inbounds %T25existentials_opaque_boxed11ExistentialP, %T25existentials_opaque_boxed11ExistentialP* %1, i32 0, i32 1
@@ -480,7 +480,7 @@ bb0(%0 : $*Existential):
480480
// CHECK: [[LOCAL:%.*]] = alloca %T25existentials_opaque_boxed11ExistentialP
481481
// CHECK: call %T25existentials_opaque_boxed11ExistentialP* @"$S25existentials_opaque_boxed11Existential_pWOc"(%T25existentials_opaque_boxed11ExistentialP* %0, %T25existentials_opaque_boxed11ExistentialP* [[LOCAL]])
482482
// CHECK: ret void
483-
// CHECK-LABEL: define{{( protected)?}} internal %T25existentials_opaque_boxed11ExistentialP* @"$S25existentials_opaque_boxed11Existential_pWOc"(%T25existentials_opaque_boxed11ExistentialP*, %T25existentials_opaque_boxed11ExistentialP*)
483+
// CHECK-LABEL: define linkonce_odr hidden %T25existentials_opaque_boxed11ExistentialP* @"$S25existentials_opaque_boxed11Existential_pWOc"(%T25existentials_opaque_boxed11ExistentialP*, %T25existentials_opaque_boxed11ExistentialP*)
484484
// CHECK: [[TYPE_ADDR:%.*]] = getelementptr inbounds %T25existentials_opaque_boxed11ExistentialP, %T25existentials_opaque_boxed11ExistentialP* %0, i32 0, i32 1
485485
// CHECK: [[ARG_TYPE:%.*]] = load %swift.type*, %swift.type** [[TYPE_ADDR]]
486486
// CHECK: [[LOCAL_TYPE_ADDR:%.*]] = getelementptr inbounds %T25existentials_opaque_boxed11ExistentialP, %T25existentials_opaque_boxed11ExistentialP* %1, i32 0, i32 1

0 commit comments

Comments
 (0)