From: Rong Xu Date: Thu, 6 Oct 2016 20:38:13 +0000 (+0000) Subject: [PGO] Create weak alias for the renamed Comdat function X-Git-Tag: llvmorg-4.0.0-rc1~7881 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0e79f7d11d6a76c8509554bde344d0270fea814d;p=platform%2Fupstream%2Fllvm.git [PGO] Create weak alias for the renamed Comdat function Add a weak alias to the renamed Comdat function in IR level instrumentation, using it's original name. This ensures the same behavior w/ and w/o IR instrumentation, even for non standard conforming code. Differential Revision: http://reviews.llvm.org/D25339 llvm-svn: 283490 --- diff --git a/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp b/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp index 4d6a504..c2e4217 100644 --- a/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp +++ b/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp @@ -439,9 +439,11 @@ template 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 @@ void FuncPGOInstrumentation::renameComdatFunction() { 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. diff --git a/llvm/test/Transforms/PGOProfile/comdat_rename.ll b/llvm/test/Transforms/PGOProfile/comdat_rename.ll index 63bb367..b69c802 100644 --- a/llvm/test/Transforms/PGOProfile/comdat_rename.ll +++ b/llvm/test/Transforms/PGOProfile/comdat_rename.ll @@ -50,6 +50,12 @@ define linkonce_odr void @f_with_alias() comdat($f_with_alias) { ; 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() {