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

Teresa Johnson via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 22 13:19:29 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?
>

Note that this is the wrong commit (the commit message didn't match the
below code change, so this revision was reverted). Let me copy this
question over to the correct revision which is r350671.
Teresa


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

-- 
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/d8bcbd35/attachment.html>


More information about the llvm-commits mailing list