Skip to content

Commit c6f3c3b

Browse files
committed
[LDC] PGO: Avoid COMDAT members with private linkage for Windows
To prevent according IR verifier errors with IR-based PGO ('comdat global value has private linkage').
1 parent 5317ba5 commit c6f3c3b

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

llvm/lib/ProfileData/InstrProf.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -466,8 +466,13 @@ GlobalVariable *createPGOFuncNameVar(Module &M,
466466
else if (Linkage == GlobalValue::AvailableExternallyLinkage)
467467
Linkage = GlobalValue::LinkOnceODRLinkage;
468468
else if (Linkage == GlobalValue::InternalLinkage ||
469-
Linkage == GlobalValue::ExternalLinkage)
470-
Linkage = GlobalValue::PrivateLinkage;
469+
Linkage == GlobalValue::ExternalLinkage) {
470+
// LDC: use internal instead of private linkage for COFF (still local, but
471+
// allows for COMDATs on Windows)
472+
Linkage = Triple(M.getTargetTriple()).isOSBinFormatCOFF()
473+
? GlobalValue::InternalLinkage
474+
: GlobalValue::PrivateLinkage;
475+
}
471476

472477
auto *Value =
473478
ConstantDataArray::getString(M.getContext(), PGOFuncName, false);

0 commit comments

Comments
 (0)