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

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 22 13:06:41 PST 2019


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?

- Dave

On Mon, Jan 7, 2019 at 3:29 PM Rong Xu via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: xur
> Date: Mon Jan  7 15:25:56 2019
> New Revision: 350579
>
> URL: http://llvm.org/viewvc/llvm-project?rev=350579&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.
>
> Added:
>     llvm/trunk/test/tools/llvm-profdata/Inputs/cutoff.proftext
>     llvm/trunk/test/tools/llvm-profdata/cutoff.test
> Modified:
>     llvm/trunk/docs/CommandGuide/llvm-profdata.rst
>     llvm/trunk/test/tools/llvm-profdata/value-prof.proftext
>     llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp
>
> Modified: llvm/trunk/docs/CommandGuide/llvm-profdata.rst
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CommandGuide/llvm-profdata.rst?rev=350579&r1=350578&r2=350579&view=diff
>
> ==============================================================================
> --- llvm/trunk/docs/CommandGuide/llvm-profdata.rst (original)
> +++ llvm/trunk/docs/CommandGuide/llvm-profdata.rst Mon Jan  7 15:25:56 2019
> @@ -203,7 +203,7 @@ OPTIONS
>   annotations.
>
>  .. option:: -topn=n
> -
> +
>   Instruct the profile dumper to show the top ``n`` functions with the
>   hottest basic blocks in the summary section. By default, the topn
> functions
>   are not dumped.
> @@ -216,6 +216,16 @@ OPTIONS
>
>   Show the profiled sizes of the memory intrinsic calls for shown
> functions.
>
> +.. option:: -value-cutoff=n
> +
> + Show only those functions whose max count values are greater or equal to
> ``n``.
> + By default, the value-cutoff is set to 0.
> +
> +.. option:: -list-below-cutoff
> +
> + Only output names of functions whose max count value are below the cutoff
> + value.
> +
>  EXIT STATUS
>  -----------
>
>
> Added: llvm/trunk/test/tools/llvm-profdata/Inputs/cutoff.proftext
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-profdata/Inputs/cutoff.proftext?rev=350579&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/tools/llvm-profdata/Inputs/cutoff.proftext (added)
> +++ llvm/trunk/test/tools/llvm-profdata/Inputs/cutoff.proftext Mon Jan  7
> 15:25:56 2019
> @@ -0,0 +1,21 @@
> +# IR level Instrumentation Flag
> +:ir
> +bar
> +10
> +2
> +0
> +0
> +
> +main
> +16650
> +4
> +1
> +1000
> +1000000
> +499500
> +
> +foo
> +10
> +2
> +999
> +1
>
> Added: llvm/trunk/test/tools/llvm-profdata/cutoff.test
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-profdata/cutoff.test?rev=350579&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/tools/llvm-profdata/cutoff.test (added)
> +++ llvm/trunk/test/tools/llvm-profdata/cutoff.test Mon Jan  7 15:25:56
> 2019
> @@ -0,0 +1,23 @@
> +Basic tests for cutoff options in show command.
> +
> +RUN: llvm-profdata show -value-cutoff=1 %p/Inputs/cutoff.proftext |
> FileCheck %s -check-prefix=CUTOFF1 -check-prefix=CHECK
> +RUN: llvm-profdata show -value-cutoff=1000 %p/Inputs/cutoff.proftext |
> FileCheck %s -check-prefix=CUTOFF1000 -check-prefix=CHECK
> +RUN: llvm-profdata show -all-functions -value-cutoff=1
> %p/Inputs/cutoff.proftext | FileCheck %s -check-prefix=CUTOFF1FUNC
> -check-prefix=CUTOFF1 -check-prefix=CHECK
> +RUN: llvm-profdata show -all-functions -value-cutoff=1000
> %p/Inputs/cutoff.proftext | FileCheck %s -check-prefix=CUTOFF1000FUNC
> -check-prefix=CUTOFF1000 -check-prefix=CHECK
> +RUN: llvm-profdata show -value-cutoff=1 -list-below-cutoff
> %p/Inputs/cutoff.proftext | FileCheck %s -check-prefix=BELOW1
> -check-prefix=CUTOFF1 -check-prefix=CHECK
> +RUN: llvm-profdata show -value-cutoff=1000 -list-below-cutoff
> %p/Inputs/cutoff.proftext | FileCheck %s -check-prefix=BELOW1000
> -check-prefix=CUTOFF1000 -check-prefix=CHECK
> +CUTOFF1FUNC-NOT: bar
> +CUTOFF1FUNC: Functions shown: 2
> +CUTOFF1000FUNC-NOT: bar
> +CUTOFF1000FUNC-NOT: foo
> +CUTOFF1000FUNC: Functions shown: 1
> +BELOW1: The list of functions with the maximum counter less than 1:
> +BELOW1:  bar: (Max = 0 Sum = 0)
> +BELOW1000:The list of functions with the maximum counter less than 1000:
> +BELOW1000:  bar: (Max = 0 Sum = 0)
> +BELOW1000:  foo: (Max = 999 Sum = 1000)
> +CHECK: Total functions: 3
> +CUTOFF1: Number of functions with maximum count (< 1): 1
> +CUTOFF1: Number of functions with maximum count (>= 1): 2
> +CUTOFF1000: Number of functions with maximum count (< 1000): 2
> +CUTOFF1000: Number of functions with maximum count (>= 1000): 1
>
> Modified: llvm/trunk/test/tools/llvm-profdata/value-prof.proftext
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-profdata/value-prof.proftext?rev=350579&r1=350578&r2=350579&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/tools/llvm-profdata/value-prof.proftext (original)
> +++ llvm/trunk/test/tools/llvm-profdata/value-prof.proftext Mon Jan  7
> 15:25:56 2019
> @@ -47,9 +47,9 @@ foo2:20000
>
>  #ICTXT: Indirect Call Site Count: 3
>  #ICTXT-NEXT:    Indirect Target Results:
> -#ICTXT-NEXT:   [ 1, foo, 100 ]
> -#ICTXT-NEXT:   [ 1, foo2, 1000 ]
> -#ICTXT-NEXT:   [ 2, foo2, 20000 ]
> +#ICTXT-NEXT:   [ 1, foo, 100 ] (9.09%)
> +#ICTXT-NEXT:   [ 1, foo2, 1000 ] (90.91%)
> +#ICTXT-NEXT:   [ 2, foo2, 20000 ] (100.00%)
>
>  #IC: Indirect Call Site Count: 3
>  #IC-NEXT:    Indirect Target Results:
>
> Modified: llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp?rev=350579&r1=350578&r2=350579&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp (original)
> +++ llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp Mon Jan  7 15:25:56
> 2019
> @@ -633,13 +633,21 @@ static void traverseAllValueSites(const
>          Stats.ValueSitesHistogram.resize(NV, 0);
>        Stats.ValueSitesHistogram[NV - 1]++;
>      }
> +
> +    uint64_t SiteSum = 0;
> +    for (uint32_t V = 0; V < NV; V++)
> +      SiteSum += VD[V].Count;
> +    if (SiteSum == 0)
> +      SiteSum = 1;
> +
>      for (uint32_t V = 0; V < NV; V++) {
> -      OS << "\t[ " << I << ", ";
> +      OS << "\t[ " << format("%2u", I) << ", ";
>        if (Symtab == nullptr)
> -        OS << VD[V].Value;
> +        OS << format("%4u", VD[V].Value);
>        else
>          OS << Symtab->getFuncName(VD[V].Value);
> -      OS << ", " << VD[V].Count << " ]\n";
> +      OS << ", " << format("%10" PRId64, VD[V].Count) << " ] ("
> +         << format("%.2f%%", (VD[V].Count * 100.0 / SiteSum)) << ")\n";
>      }
>    }
>  }
> @@ -662,9 +670,9 @@ static int showInstrProfile(const std::s
>                              uint32_t TopN, bool ShowIndirectCallTargets,
>                              bool ShowMemOPSizes, bool ShowDetailedSummary,
>                              std::vector<uint32_t> DetailedSummaryCutoffs,
> -                            bool ShowAllFunctions,
> -                            const std::string &ShowFunction, bool
> TextFormat,
> -                            raw_fd_ostream &OS) {
> +                            bool ShowAllFunctions, uint64_t ValueCutoff,
> +                            bool OnlyListBelow, const std::string
> &ShowFunction,
> +                            bool TextFormat, raw_fd_ostream &OS) {
>    auto ReaderOrErr = InstrProfReader::create(Filename);
>    std::vector<uint32_t> Cutoffs = std::move(DetailedSummaryCutoffs);
>    if (ShowDetailedSummary && Cutoffs.empty()) {
> @@ -677,6 +685,7 @@ static int showInstrProfile(const std::s
>    auto Reader = std::move(ReaderOrErr.get());
>    bool IsIRInstr = Reader->isIRLevelProfile();
>    size_t ShownFunctions = 0;
> +  size_t BelowCutoffFunctions = 0;
>    int NumVPKind = IPVK_Last - IPVK_First + 1;
>    std::vector<ValueSitesStats> VPStats(NumVPKind);
>
> @@ -690,6 +699,11 @@ static int showInstrProfile(const std::s
>                        decltype(MinCmp)>
>        HottestFuncs(MinCmp);
>
> +  if (!TextFormat && OnlyListBelow) {
> +    OS << "The list of functions with the maximum counter less than "
> +       << ValueCutoff << ":\n";
> +  }
> +
>    // Add marker so that IR-level instrumentation round-trips properly.
>    if (TextFormat && IsIRInstr)
>      OS << ":ir\n";
> @@ -711,11 +725,24 @@ static int showInstrProfile(const std::s
>      assert(Func.Counts.size() > 0 && "function missing entry counter");
>      Builder.addRecord(Func);
>
> -    if (TopN) {
> -      uint64_t FuncMax = 0;
> -      for (size_t I = 0, E = Func.Counts.size(); I < E; ++I)
> -        FuncMax = std::max(FuncMax, Func.Counts[I]);
> +    uint64_t FuncMax = 0;
> +    uint64_t FuncSum = 0;
> +    for (size_t I = 0, E = Func.Counts.size(); I < E; ++I) {
> +      FuncMax = std::max(FuncMax, Func.Counts[I]);
> +      FuncSum += Func.Counts[I];
> +    }
> +
> +    if (FuncMax < ValueCutoff) {
> +      ++BelowCutoffFunctions;
> +      if (OnlyListBelow) {
> +        OS << "  " << Func.Name << ": (Max = " << FuncMax
> +           << " Sum = " << FuncSum << ")\n";
> +      }
> +      continue;
> +    } else if (OnlyListBelow)
> +      continue;
>
> +    if (TopN) {
>        if (HottestFuncs.size() == TopN) {
>          if (HottestFuncs.top().second < FuncMax) {
>            HottestFuncs.pop();
> @@ -726,7 +753,6 @@ static int showInstrProfile(const std::s
>      }
>
>      if (Show) {
> -
>        if (!ShownFunctions)
>          OS << "Counters:\n";
>
> @@ -781,6 +807,12 @@ static int showInstrProfile(const std::s
>    if (ShowAllFunctions || !ShowFunction.empty())
>      OS << "Functions shown: " << ShownFunctions << "\n";
>    OS << "Total functions: " << PS->getNumFunctions() << "\n";
> +  if (ValueCutoff > 0) {
> +    OS << "Number of functions with maximum count (< " << ValueCutoff
> +       << "): " << BelowCutoffFunctions << "\n";
> +    OS << "Number of functions with maximum count (>= " << ValueCutoff
> +       << "): " << PS->getNumFunctions() - BelowCutoffFunctions << "\n";
> +  }
>    OS << "Maximum function count: " << PS->getMaxFunctionCount() << "\n";
>    OS << "Maximum internal block count: " << PS->getMaxInternalCount() <<
> "\n";
>
> @@ -882,7 +914,14 @@ static int show_main(int argc, const cha
>    cl::opt<uint32_t> TopNFunctions(
>        "topn", cl::init(0),
>        cl::desc("Show the list of functions with the largest internal
> counts"));
> -
> +  cl::opt<uint32_t> ValueCutoff(
> +      "value-cutoff", cl::init(0),
> +      cl::desc("Set the count value cutoff. Functions with the maximum
> count "
> +               "less than this value will not be printed out. (Default is
> 0)"));
> +  cl::opt<bool> OnlyListBelow(
> +      "list-below-cutoff", cl::init(false),
> +      cl::desc("Only output names of functions whose max count values are
> "
> +               "below the cutoff value"));
>    cl::ParseCommandLineOptions(argc, argv, "LLVM profile data summary\n");
>
>    if (OutputFilename.empty())
> @@ -902,7 +941,8 @@ static int show_main(int argc, const cha
>      return showInstrProfile(Filename, ShowCounts, TopNFunctions,
>                              ShowIndirectCallTargets, ShowMemOPSizes,
>                              ShowDetailedSummary, DetailedSummaryCutoffs,
> -                            ShowAllFunctions, ShowFunction, TextFormat,
> OS);
> +                            ShowAllFunctions, ValueCutoff, OnlyListBelow,
> +                            ShowFunction, TextFormat, OS);
>    else
>      return showSampleProfile(Filename, ShowCounts, ShowAllFunctions,
>                               ShowFunction, OS);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190122/8171b6e0/attachment.html>


More information about the llvm-commits mailing list