[llvm] r350671 - [PGO] Use SourceFileName rather module name in PGOFuncName

Teresa Johnson via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 22 13:23:49 PST 2019


On Tue, Jan 22, 2019 at 1:06 PM David Blaikie <dblaikie at gmail.com> wrote:
>
> Hey Rong, Teresa,
>
> 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.
>
> Does this identifier need to be unique? What are the ramifications if
multiple modules had the same source file name & this situation?

Rong will know for sure, but I think the profiles will be merged and it is
possible there will be a profile mismatch.

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.

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).

Teresa

>
> - Dave

On Tue, Jan 8, 2019 at 2:43 PM Rong Xu via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: xur
> Date: Tue Jan  8 14:39:47 2019
> New Revision: 350671
>
> URL: http://llvm.org/viewvc/llvm-project?rev=350671&view=rev
> Log:
> [PGO] Use SourceFileName rather module name in PGOFuncName
>
> In LTO or Thin-lto mode (though linker plugin), the module
> names are of temp file names which are different for
> different compilations. Using SourceFileName avoids the issue.
> This should not change any functionality for current PGO as
> all the current callers of getPGOFuncName() is before LTO.
>
> Differential Revision: https://reviews.llvm.org/D56327
>
> Modified:
>     llvm/trunk/lib/ProfileData/InstrProf.cpp
>
> Modified: llvm/trunk/lib/ProfileData/InstrProf.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/InstrProf.cpp?rev=350671&r1=350670&r2=350671&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ProfileData/InstrProf.cpp (original)
> +++ llvm/trunk/lib/ProfileData/InstrProf.cpp Tue Jan  8 14:39:47 2019
> @@ -252,11 +252,12 @@ static StringRef stripDirPrefix(StringRe
>  // data, its original linkage must be non-internal.
>  std::string getPGOFuncName(const Function &F, bool InLTO, uint64_t
> Version) {
>    if (!InLTO) {
> -    StringRef FileName = (StaticFuncFullModulePrefix
> -                              ? F.getParent()->getName()
> -                              :
> sys::path::filename(F.getParent()->getName()));
> -    if (StaticFuncFullModulePrefix && StaticFuncStripDirNamePrefix != 0)
> -      FileName = stripDirPrefix(FileName, StaticFuncStripDirNamePrefix);
> +    StringRef FileName(F.getParent()->getSourceFileName());
> +    uint32_t StripLevel = StaticFuncFullModulePrefix ? 0 : (uint32_t)-1;
> +    if (StripLevel < StaticFuncStripDirNamePrefix)
> +      StripLevel = StaticFuncStripDirNamePrefix;
> +    if (StripLevel)
> +      FileName = stripDirPrefix(FileName, StripLevel);
>      return getPGOFuncName(F.getName(), F.getLinkage(), FileName, Version);
>    }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>


-- 
Teresa Johnson |  Software Engineer |  tejohnson at google.com |
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190122/61b8abc9/attachment.html>


More information about the llvm-commits mailing list