diff --git a/lib/Transforms/Instrumentation/PGOInstrumentation.cpp b/lib/Transforms/Instrumentation/PGOInstrumentation.cpp index 5a0185600e0..be2e091e8c0 100644 --- a/lib/Transforms/Instrumentation/PGOInstrumentation.cpp +++ b/lib/Transforms/Instrumentation/PGOInstrumentation.cpp @@ -693,7 +693,7 @@ static bool canRenameComdat( return false; // FIXME: Current only handle those Comdat groups that only containing one - // function and function aliases. + // function. // (1) For a Comdat group containing multiple functions, we need to have a // unique postfix based on the hashes for each function. There is a // non-trivial code refactoring to do this efficiently. @@ -701,8 +701,7 @@ static bool canRenameComdat( // group including global vars. Comdat *C = F.getComdat(); for (auto &&CM : make_range(ComdatMembers.equal_range(C))) { - if (dyn_cast(CM.second)) - continue; + assert(!isa(CM.second)); Function *FM = dyn_cast(CM.second); if (FM != &F) return false; @@ -742,18 +741,8 @@ void FuncPGOInstrumentation::renameComdatFunction() { NewComdat->setSelectionKind(OrigComdat->getSelectionKind()); for (auto &&CM : make_range(ComdatMembers.equal_range(OrigComdat))) { - 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. - Function *CF = dyn_cast(CM.second); - assert(CF); - CF->setComdat(NewComdat); + cast(CM.second)->setComdat(NewComdat); } } diff --git a/test/Transforms/PGOProfile/comdat_rename.ll b/test/Transforms/PGOProfile/comdat_rename.ll index 53fc7e430cf..828bac7eda0 100644 --- a/test/Transforms/PGOProfile/comdat_rename.ll +++ b/test/Transforms/PGOProfile/comdat_rename.ll @@ -10,6 +10,14 @@ define linkonce_odr void @f() comdat($f) { ret void } +; Not rename Comdat with an alias (an alias is an address-taken user). +$f_with_alias = comdat any +; CHECK: $f_with_alias = comdat any +define linkonce_odr void @f_with_alias() comdat { + ret void +} +@f_alias = alias void (), void ()* @f_with_alias + ; Not rename Comdat with right linkage. $nf = comdat any ; CHECK: $nf = comdat any