diff --git a/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp b/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp --- a/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp +++ b/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp @@ -693,7 +693,7 @@ 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 @@ // 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 @@ 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/llvm/test/Transforms/PGOProfile/comdat_rename.ll b/llvm/test/Transforms/PGOProfile/comdat_rename.ll --- a/llvm/test/Transforms/PGOProfile/comdat_rename.ll +++ b/llvm/test/Transforms/PGOProfile/comdat_rename.ll @@ -10,6 +10,14 @@ 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