<div dir="ltr">Can you please add a comment in the source explaining exactly what kind of non-standard conforming code we are trying to handle with this? We usually don't make concessions for non-standard conforming code without a precise explanation of where/how the non-conforming code arises.<div><br></div><div>-- Sean Silva</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Oct 6, 2016 at 1:38 PM, Rong Xu via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: xur<br>
Date: Thu Oct  6 15:38:13 2016<br>
New Revision: 283490<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=283490&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=283490&view=rev</a><br>
Log:<br>
[PGO] Create weak alias for the renamed Comdat function<br>
<br>
Add a weak alias to the renamed Comdat function in IR level instrumentation,<br>
using it's original name. This ensures the same behavior w/ and w/o IR<br>
instrumentation, even for non standard conforming code.<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D25339" rel="noreferrer" target="_blank">http://reviews.llvm.org/D25339</a><br>
<br>
Modified:<br>
    llvm/trunk/lib/Transforms/<wbr>Instrumentation/<wbr>PGOInstrumentation.cpp<br>
    llvm/trunk/test/Transforms/<wbr>PGOProfile/comdat_rename.ll<br>
<br>
Modified: llvm/trunk/lib/Transforms/<wbr>Instrumentation/<wbr>PGOInstrumentation.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/PGOInstrumentation.cpp?rev=283490&r1=283489&r2=283490&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>Transforms/Instrumentation/<wbr>PGOInstrumentation.cpp?rev=<wbr>283490&r1=283489&r2=283490&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Transforms/<wbr>Instrumentation/<wbr>PGOInstrumentation.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/<wbr>Instrumentation/<wbr>PGOInstrumentation.cpp Thu Oct  6 15:38:13 2016<br>
@@ -439,9 +439,11 @@ template <class Edge, class BBInfo><br>
 void FuncPGOInstrumentation<Edge, BBInfo>::renameComdatFunction(<wbr>) {<br>
   if (!canRenameComdat(F, ComdatMembers))<br>
     return;<br>
+  std::string OrigName = F.getName().str();<br>
   std::string NewFuncName =<br>
       Twine(F.getName() + "." + Twine(FunctionHash)).str();<br>
   F.setName(Twine(NewFuncName));<br>
+  GlobalAlias::create(<wbr>GlobalValue::WeakAnyLinkage, OrigName, &F);<br>
   FuncName = Twine(FuncName + "." + Twine(FunctionHash)).str();<br>
   Comdat *NewComdat;<br>
   Module *M = F.getParent();<br>
@@ -467,7 +469,9 @@ void FuncPGOInstrumentation<Edge, BBInfo<br>
     if (GlobalAlias *GA = dyn_cast<GlobalAlias>(CM.<wbr>second)) {<br>
       // For aliases, change the name directly.<br>
       assert(dyn_cast<Function>(GA-><wbr>getAliasee()-><wbr>stripPointerCasts()) == &F);<br>
+      std::string OrigGAName = GA->getName().str();<br>
       GA->setName(Twine(GA->getName(<wbr>) + "." + Twine(FunctionHash)));<br>
+      GlobalAlias::create(<wbr>GlobalValue::WeakAnyLinkage, OrigGAName, GA);<br>
       continue;<br>
     }<br>
     // Must be a function.<br>
<br>
Modified: llvm/trunk/test/Transforms/<wbr>PGOProfile/comdat_rename.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/PGOProfile/comdat_rename.ll?rev=283490&r1=283489&r2=283490&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>Transforms/PGOProfile/comdat_<wbr>rename.ll?rev=283490&r1=<wbr>283489&r2=283490&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/Transforms/<wbr>PGOProfile/comdat_rename.ll (original)<br>
+++ llvm/trunk/test/Transforms/<wbr>PGOProfile/comdat_rename.ll Thu Oct  6 15:38:13 2016<br>
@@ -50,6 +50,12 @@ define linkonce_odr void @f_with_alias()<br>
<br>
 ; Rename AvailableExternallyLinkage functions<br>
 ; ELFONLY-DAG: $aef.[[SINGLEBB_HASH]] = comdat any<br>
+<br>
+; ELFONLY: @f = weak alias void (), void ()* @f.[[SINGLEBB_HASH]]<br>
+; ELFONLY: @f_with_alias = weak alias void (), void ()* @f_with_alias.[[SINGLEBB_HASH]<wbr>]<br>
+; ELFONLY: @af = weak alias void (...), void (...)* @af.[[SINGLEBB_HASH]]<br>
+; ELFONLY: @aef = weak alias void (), void ()* @aef.[[SINGLEBB_HASH]]<br>
+<br>
 define available_externally void @aef() {<br>
 ; ELFONLY: define linkonce_odr void @aef.[[SINGLEBB_HASH]]() comdat {<br>
 ; COFFONLY: define available_externally void @aef() {<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>