Index: lib/Transforms/Instrumentation/PGOInstrumentation.cpp =================================================================== --- lib/Transforms/Instrumentation/PGOInstrumentation.cpp +++ lib/Transforms/Instrumentation/PGOInstrumentation.cpp @@ -439,9 +439,11 @@ void FuncPGOInstrumentation::renameComdatFunction() { if (!canRenameComdat(F, ComdatMembers)) return; + std::string OrigName = F.getName().str(); std::string NewFuncName = Twine(F.getName() + "." + Twine(FunctionHash)).str(); F.setName(Twine(NewFuncName)); + GlobalAlias::create(GlobalValue::WeakAnyLinkage, OrigName, &F); FuncName = Twine(FuncName + "." + Twine(FunctionHash)).str(); Comdat *NewComdat; Module *M = F.getParent(); @@ -467,7 +469,9 @@ if (GlobalAlias *GA = dyn_cast(CM.second)) { // For aliases, change the name directly. assert(dyn_cast(GA->getAliasee()->stripPointerCasts()) == &F); + std::string OrigGAName = GA->getName().str(); GA->setName(Twine(GA->getName() + "." + Twine(FunctionHash))); + GlobalAlias::create(GlobalValue::WeakAnyLinkage, OrigGAName, GA); continue; } // Must be a function. Index: test/Transforms/PGOProfile/comdat_rename.ll =================================================================== --- test/Transforms/PGOProfile/comdat_rename.ll +++ test/Transforms/PGOProfile/comdat_rename.ll @@ -50,6 +50,12 @@ ; Rename AvailableExternallyLinkage functions ; ELFONLY-DAG: $aef.[[SINGLEBB_HASH]] = comdat any + +; ELFONLY: @f = weak alias void (), void ()* @f.[[SINGLEBB_HASH]] +; ELFONLY: @f_with_alias = weak alias void (), void ()* @f_with_alias.[[SINGLEBB_HASH]] +; ELFONLY: @af = weak alias void (...), void (...)* @af.[[SINGLEBB_HASH]] +; ELFONLY: @aef = weak alias void (), void ()* @aef.[[SINGLEBB_HASH]] + define available_externally void @aef() { ; ELFONLY: define linkonce_odr void @aef.[[SINGLEBB_HASH]]() comdat { ; COFFONLY: define available_externally void @aef() {