Skip to content

Commit 4d4b7ec

Browse files
authored
Merge pull request #20376 from compnerd/odr
IRGen: add a constant for common linkages
2 parents 6fd5ff5 + 2117c46 commit 4d4b7ec

File tree

7 files changed

+22
-20
lines changed

7 files changed

+22
-20
lines changed

include/swift/IRGen/Linking.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,6 +1012,9 @@ struct IRLinkage {
10121012
llvm::GlobalValue::LinkageTypes Linkage;
10131013
llvm::GlobalValue::VisibilityTypes Visibility;
10141014
llvm::GlobalValue::DLLStorageClassTypes DLLStorage;
1015+
1016+
static const IRLinkage InternalLinkOnceODR;
1017+
static const IRLinkage Internal;
10151018
};
10161019

10171020
class ApplyIRLinkage {

lib/IRGen/GenDecl.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3914,6 +3914,8 @@ IRGenModule::getAddrOfWitnessTableLazyAccessFunction(
39143914
Signature signature(fnType, llvm::AttributeList(), DefaultCC);
39153915
LinkInfo link = LinkInfo::get(*this, entity, forDefinition);
39163916
entry = createFunction(*this, link, signature);
3917+
ApplyIRLinkage({link.getLinkage(), link.getVisibility(), link.getDLLStorage()})
3918+
.to(entry);
39173919
return entry;
39183920
}
39193921

@@ -4026,10 +4028,7 @@ static llvm::Function *shouldDefineHelper(IRGenModule &IGM,
40264028
if (!def) return nullptr;
40274029
if (!def->empty()) return nullptr;
40284030

4029-
ApplyIRLinkage({llvm::GlobalValue::LinkOnceODRLinkage,
4030-
llvm::GlobalValue::HiddenVisibility,
4031-
llvm::GlobalValue::DefaultStorageClass})
4032-
.to(def);
4031+
ApplyIRLinkage(IRLinkage::InternalLinkOnceODR).to(def);
40334032
def->setDoesNotThrow();
40344033
def->setCallingConv(IGM.DefaultCC);
40354034
if (setIsNoInline)

lib/IRGen/GenEnum.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1473,10 +1473,7 @@ namespace {
14731473
auto func =
14741474
llvm::Function::Create(consumeTy, llvm::GlobalValue::LinkOnceODRLinkage,
14751475
llvm::StringRef(name), IGM.getModule());
1476-
ApplyIRLinkage({llvm::GlobalValue::LinkOnceODRLinkage,
1477-
llvm::GlobalValue::HiddenVisibility,
1478-
llvm::GlobalValue::DefaultStorageClass})
1479-
.to(func);
1476+
ApplyIRLinkage(IRLinkage::InternalLinkOnceODR).to(func);
14801477
func->setAttributes(IGM.constructInitialAttributes());
14811478
func->setDoesNotThrow();
14821479
func->setCallingConv(IGM.DefaultCC);

lib/IRGen/GenObjC.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -931,10 +931,7 @@ static llvm::Constant *findSwiftAsObjCThunk(IRGenModule &IGM, SILDeclRef ref,
931931
SILFn = IGM.getSILModule().lookUpFunction(ref);
932932
assert(SILFn && "no IR function for swift-as-objc thunk");
933933
auto fn = IGM.getAddrOfSILFunction(SILFn, NotForDefinition);
934-
ApplyIRLinkage({llvm::GlobalValue::InternalLinkage,
935-
llvm::GlobalValue::DefaultVisibility,
936-
llvm::GlobalValue::DefaultStorageClass})
937-
.to(fn);
934+
ApplyIRLinkage(IRLinkage::Internal).to(fn);
938935
fn->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
939936

940937
return llvm::ConstantExpr::getBitCast(fn, IGM.Int8PtrTy);

lib/IRGen/GenReflection.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1048,10 +1048,7 @@ void IRGenModule::emitReflectionMetadataVersion() {
10481048
llvm::GlobalValue::LinkOnceODRLinkage,
10491049
Init,
10501050
"__swift_reflection_version");
1051-
ApplyIRLinkage({llvm::GlobalValue::LinkOnceODRLinkage,
1052-
llvm::GlobalValue::HiddenVisibility,
1053-
llvm::GlobalValue::DefaultStorageClass})
1054-
.to(Version);
1051+
ApplyIRLinkage(IRLinkage::InternalLinkOnceODR).to(Version);
10551052
addUsedGlobal(Version);
10561053
}
10571054

lib/IRGen/Linking.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,18 @@ using namespace swift;
3131
using namespace irgen;
3232
using namespace Mangle;
3333

34+
const IRLinkage IRLinkage::InternalLinkOnceODR = {
35+
llvm::GlobalValue::LinkOnceODRLinkage,
36+
llvm::GlobalValue::HiddenVisibility,
37+
llvm::GlobalValue::DefaultStorageClass,
38+
};
39+
40+
const IRLinkage IRLinkage::Internal = {
41+
llvm::GlobalValue::InternalLinkage,
42+
llvm::GlobalValue::DefaultVisibility,
43+
llvm::GlobalValue::DefaultStorageClass,
44+
};
45+
3446
bool swift::irgen::useDllStorage(const llvm::Triple &triple) {
3547
return triple.isOSBinFormatCOFF() && !triple.isOSCygMing();
3648
}

lib/IRGen/MetadataRequest.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -363,10 +363,7 @@ llvm::Constant *IRGenModule::getAddrOfStringForTypeRef(
363363
llvm::GlobalValue::LinkOnceODRLinkage,
364364
nullptr,
365365
symbolName);
366-
ApplyIRLinkage({llvm::GlobalValue::LinkOnceODRLinkage,
367-
llvm::GlobalValue::HiddenVisibility,
368-
llvm::GlobalValue::DefaultStorageClass})
369-
.to(var);
366+
ApplyIRLinkage(IRLinkage::InternalLinkOnceODR).to(var);
370367
var->setAlignment(2);
371368
setTrueConstGlobal(var);
372369
var->setSection(getReflectionTypeRefSectionName());

0 commit comments

Comments
 (0)