<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jan 22, 2019 at 1:24 PM Teresa Johnson <<a href="mailto:tejohnson@google.com">tejohnson@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>On Tue, Jan 22, 2019 at 1:06 PM David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>> wrote:</div><div>></div><div>> Hey Rong, Teresa,</div><div>></div><div>> This seems like it might be problematic to me - Couldn't multiple modules have the same source file name (built with different preprocessor defines, etc) - at least I think that's the case for some projects at Google.</div><div>></div><div>> Does this identifier need to be unique? What are the ramifications if multiple modules had the same source file name & this situation?</div><div><br></div><div>Rong will know for sure, but I think the profiles will be merged and it is possible there will be a profile mismatch.</div><div><br></div><div>However,  note that this is what already happens for PGO - this change retains the status quo since PGO is matched during the compile from source where the module name (F.getParent()->getName()) is the same as F.getParent()->getSourceFileName(). So any uniqueness issue already exists with PGO.</div><div><br></div><div>This change is to enable context sensitive PGO which must be done in the *LTO backends, where we have recorded the original module name in the SourceFileName in the bitcode (in the *LTO backends the module name is the .o bitcode file name).</div></div></div></blockquote><div><br>OK - thanks for the context! </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div><br></div><div>Teresa</div><div><br></div><div>></div><div>> - Dave</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="m_6173758828914493342gmail_attr">On Tue, Jan 8, 2019 at 2:43 PM Rong Xu via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: xur<br>
Date: Tue Jan  8 14:39:47 2019<br>
New Revision: 350671<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=350671&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=350671&view=rev</a><br>
Log:<br>
[PGO] Use SourceFileName rather module name in PGOFuncName<br>
<br>
In LTO or Thin-lto mode (though linker plugin), the module<br>
names are of temp file names which are different for<br>
different compilations. Using SourceFileName avoids the issue.<br>
This should not change any functionality for current PGO as<br>
all the current callers of getPGOFuncName() is before LTO.<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D56327" rel="noreferrer" target="_blank">https://reviews.llvm.org/D56327</a><br>
<br>
Modified:<br>
    llvm/trunk/lib/ProfileData/InstrProf.cpp<br>
<br>
Modified: llvm/trunk/lib/ProfileData/InstrProf.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/InstrProf.cpp?rev=350671&r1=350670&r2=350671&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/InstrProf.cpp?rev=350671&r1=350670&r2=350671&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/ProfileData/InstrProf.cpp (original)<br>
+++ llvm/trunk/lib/ProfileData/InstrProf.cpp Tue Jan  8 14:39:47 2019<br>
@@ -252,11 +252,12 @@ static StringRef stripDirPrefix(StringRe<br>
 // data, its original linkage must be non-internal.<br>
 std::string getPGOFuncName(const Function &F, bool InLTO, uint64_t Version) {<br>
   if (!InLTO) {<br>
-    StringRef FileName = (StaticFuncFullModulePrefix<br>
-                              ? F.getParent()->getName()<br>
-                              : sys::path::filename(F.getParent()->getName()));<br>
-    if (StaticFuncFullModulePrefix && StaticFuncStripDirNamePrefix != 0)<br>
-      FileName = stripDirPrefix(FileName, StaticFuncStripDirNamePrefix);<br>
+    StringRef FileName(F.getParent()->getSourceFileName());<br>
+    uint32_t StripLevel = StaticFuncFullModulePrefix ? 0 : (uint32_t)-1;<br>
+    if (StripLevel < StaticFuncStripDirNamePrefix)<br>
+      StripLevel = StaticFuncStripDirNamePrefix;<br>
+    if (StripLevel)<br>
+      FileName = stripDirPrefix(FileName, StripLevel);<br>
     return getPGOFuncName(F.getName(), F.getLinkage(), FileName, Version);<br>
   }<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">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/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="m_6173758828914493342gmail_signature"><div dir="ltr"><div><span style="font-family:Times;font-size:medium"><table cellspacing="0" cellpadding="0"><tbody><tr style="color:rgb(85,85,85);font-family:sans-serif;font-size:small"><td nowrap style="border-top:2px solid rgb(213,15,37)">Teresa Johnson |</td><td nowrap style="border-top:2px solid rgb(51,105,232)"> Software Engineer |</td><td nowrap style="border-top:2px solid rgb(0,153,57)"> <a href="mailto:tejohnson@google.com" target="_blank">tejohnson@google.com</a> |</td><td nowrap style="border-top:2px solid rgb(238,178,17)"><br></td></tr></tbody></table></span></div></div></div>
</blockquote></div></div>