llvm-profdata - Profile data tool
=================================

.. program:: llvm-profdata

SYNOPSIS
--------

:program:`llvm-profdata` *command* [*args...*]

DESCRIPTION
-----------

The :program:`llvm-profdata` tool is a small utility for working with profile
data files.

COMMANDS
--------

* :ref:`merge <profdata-merge>`
* :ref:`show <profdata-show>`
* :ref:`overlap <profdata-overlap>`
* :ref:`order <profdata-order>`

.. program:: llvm-profdata merge

.. _profdata-merge:

MERGE
-----

SYNOPSIS
^^^^^^^^

:program:`llvm-profdata merge` [*options*] [*filename...*]

DESCRIPTION
^^^^^^^^^^^

:program:`llvm-profdata merge` takes several profile data files
generated by PGO instrumentation and merges them together into a single
indexed profile data file.

By default profile data is merged without modification. This means that the
relative importance of each input file is proportional to the number of samples
or counts it contains. In general, the input from a longer training run will be
interpreted as relatively more important than a shorter run. Depending on the
nature of the training runs it may be useful to adjust the weight given to each
input file by using the ``-weighted-input`` option.

Profiles passed in via ``-weighted-input``, ``-input-files``, or via positional
arguments are processed once for each time they are seen.


OPTIONS
^^^^^^^

.. option:: --help

 Print a summary of command line options.

.. option:: --output=<output>, -o

 Specify the output file name.  *Output* cannot be ``-`` as the resulting
 indexed profile data can't be written to standard output.

.. option:: --weighted-input=<weight,filename>

 Specify an input file name along with a weight. The profile counts of the
 supplied ``filename`` will be scaled (multiplied) by the supplied
 ``weight``, where ``weight`` is a decimal integer >= 1.
 Input files specified without using this option are assigned a default
 weight of 1. Examples are shown below.

.. option:: --input-files=<path>, -f

  Specify a file which contains a list of files to merge. The entries in this
  file are newline-separated. Lines starting with '#' are skipped. Entries may
  be of the form <filename> or <weight>,<filename>.

.. option:: --remapping-file=<path>, -r

  Specify a file which contains a remapping from symbol names in the input
  profile to the symbol names that should be used in the output profile. The
  file should consist of lines of the form ``<input-symbol> <output-symbol>``.
  Blank lines and lines starting with ``#`` are skipped.

  The :doc:`llvm-cxxmap <llvm-cxxmap>` tool can be used to generate the symbol
  remapping file.

.. option:: --instr (default)

 Specify that the input profile is an instrumentation-based profile.

.. option:: --sample

 Specify that the input profile is a sample-based profile.

 The format of the generated file can be generated in one of three ways:

 .. option:: --binary (default)

 Emit the profile using a binary encoding. For instrumentation-based profile
 the output format is the indexed binary format.

 .. option:: --extbinary

 Emit the profile using an extensible binary encoding. This option can only
 be used with sample-based profile. The extensible binary encoding can be
 more compact with compression enabled and can be loaded faster than the
 default binary encoding.

 .. option:: --text

 Emit the profile in text mode. This option can also be used with both
 sample-based and instrumentation-based profile. When this option is used
 the profile will be dumped in the text format that is parsable by the profile
 reader.

 .. option:: --gcc

 Emit the profile using GCC's gcov format (Not yet supported).

.. option:: --sparse[=true|false]

 Do not emit function records with 0 execution count. Can only be used in
 conjunction with -instr. Defaults to false, since it can inhibit compiler
 optimization during PGO.

.. option:: --num-threads=<N>, -j

 Use N threads to perform profile merging. When N=0, llvm-profdata auto-detects
 an appropriate number of threads to use. This is the default.

.. option:: --failure-mode=[any|all]

 Set the failure mode. There are two options: 'any' causes the merge command to
 fail if any profiles are invalid, and 'all' causes the merge command to fail
 only if all profiles are invalid. If 'all' is set, information from any
 invalid profiles is excluded from the final merged product. The default
 failure mode is 'any'.

.. option:: --prof-sym-list=<path>

 Specify a file which contains a list of symbols to generate profile symbol
 list in the profile. This option can only be used with sample-based profile
 in extbinary format. The entries in this file are newline-separated.

.. option:: --compress-all-sections=[true|false]

 Compress all sections when writing the profile. This option can only be used
 with sample-based profile in extbinary format.

.. option:: --use-md5=[true|false]

 Use MD5 to represent string in name table when writing the profile.
 This option can only be used with sample-based profile in extbinary format.

.. option:: --gen-partial-profile=[true|false]

 Mark the profile to be a partial profile which only provides partial profile
 coverage for the optimized target. This option can only be used with
 sample-based profile in extbinary format.

.. option:: --convert-sample-profile-layout=[nest|flat]

 Convert the merged profile into a profile with a new layout. Supported
 layout are ``nest`` (Nested profile, the input should be CS flat profile) and
 ``flat`` (Profile with nested inlinees flattened out).

.. option:: --supplement-instr-with-sample=<file>

 Supplement an instrumentation profile with sample profile. The sample profile
 is the input of the flag. Output will be in instrumentation format (only works
 with -instr).

.. option:: --zero-counter-threshold=<float>

 For the function which is cold in instr profile but hot in sample profile, if
 the ratio of the number of zero counters divided by the total number of
 counters is above the threshold, the profile of the function will be regarded
 as being harmful for performance and will be dropped.

.. option:: --instr-prof-cold-threshold=<int>

 User specified cold threshold for instr profile which will override the cold
 threshold got from profile summary.

.. option:: --suppl-min-size-threshold=<int>

 If the size of a function is smaller than the threshold, assume it can be
 inlined by PGO early inliner and it will not be adjusted based on sample
 profile.

.. option:: --debug-info=<path>

 Specify the executable or ``.dSYM`` that contains debug info for the raw profile.
 When ``--debug-info-correlate`` or ``--profile-correlate=debug-info`` was used 
 for instrumentation, use this option to correlate the raw profile.

.. option:: --binary-file=<path>

 Specify the executable that contains profile data and profile name sections for
 the raw profile. When ``-profile-correlate=binary`` was used for
 instrumentation, use this option to correlate the raw profile.

.. option:: --temporal-profile-trace-reservoir-size

 The maximum number of temporal profile traces to be stored in the output
 profile. If more traces are added, we will use reservoir sampling to select
 which traces to keep. Note that changing this value between different merge
 invocations on the same indexed profile could result in sample bias. The
 default value is 100.

.. option:: --temporal-profile-max-trace-length

 The maximum number of functions in a single temporal profile trace. Longer
 traces will be truncated. The default value is 1000.

.. option:: --function=<string>

 Only keep functions matching the regex in the output, all others are erased
 from the profile.

.. option:: --no-function=<string>

 Remove functions matching the regex from the profile. If both --function and
 --no-function are specified and a function matches both, it is removed.

EXAMPLES
^^^^^^^^
Basic Usage
+++++++++++
Merge three profiles:

::

    llvm-profdata merge foo.profdata bar.profdata baz.profdata -output merged.profdata

Weighted Input
++++++++++++++
The input file ``foo.profdata`` is especially important, multiply its counts by 10:

::

    llvm-profdata merge --weighted-input=10,foo.profdata bar.profdata baz.profdata --output merged.profdata

Exactly equivalent to the previous invocation (explicit form; useful for programmatic invocation):

::

    llvm-profdata merge --weighted-input=10,foo.profdata --weighted-input=1,bar.profdata --weighted-input=1,baz.profdata --output merged.profdata

.. program:: llvm-profdata show

.. _profdata-show:

SHOW
----

SYNOPSIS
^^^^^^^^

:program:`llvm-profdata show` [*options*] [*filename*]

DESCRIPTION
^^^^^^^^^^^

:program:`llvm-profdata show` takes a profile data file and displays the
information about the profile counters for this file and
for any of the specified function(s).

If *filename* is omitted or is ``-``, then **llvm-profdata show** reads its
input from standard input.

OPTIONS
^^^^^^^

.. option:: --all-functions

 Print details for every function.

.. option:: --binary-ids

 Print embedded binary ids in a profile.

.. option:: --counts

 Print the counter values for the displayed functions.

.. option:: --show-format=<text|json|yaml>

 Emit output in the selected format if supported by the provided profile type.

.. option:: --function=<string>

 Print details for a function if the function's name contains the given string.

.. option:: --help

 Print a summary of command line options.

.. option:: --output=<output>, -o

 Specify the output file name.  If *output* is ``-`` or it isn't specified,
 then the output is sent to standard output.

.. option:: --instr (default)

 Specify that the input profile is an instrumentation-based profile.

.. option:: --text

 Instruct the profile dumper to show profile counts in the text format of the
 instrumentation-based profile data representation. By default, the profile
 information is dumped in a more human readable form (also in text) with
 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.

.. option:: --sample

 Specify that the input profile is a sample-based profile.

.. option:: --memop-sizes

 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.

.. option:: --profile-version

 Print profile version.

.. option:: --showcs

 Only show context sensitive profile counts. The default is to filter all
 context sensitive profile counts.

.. option:: --show-prof-sym-list=[true|false]

 Show profile symbol list if it exists in the profile. This option is only
 meaningful for sample-based profile in extbinary format.

.. option:: --show-sec-info-only=[true|false]

 Show basic information about each section in the profile. This option is
 only meaningful for sample-based profile in extbinary format.

.. option:: --debug-info=<path>

 Specify the executable or ``.dSYM`` that contains debug info for the raw profile.
 When ``--debug-info-correlate`` or ``--profile-correlate=debug-info`` was used
 for instrumentation, use this option to show the correlated functions from the
 raw profile.

.. option:: --covered

 Show only the functions that have been executed, i.e., functions with non-zero
 counts.

.. program:: llvm-profdata overlap

.. _profdata-overlap:

OVERLAP
-------

SYNOPSIS
^^^^^^^^

:program:`llvm-profdata overlap` [*options*] [*base profile file*] [*test profile file*]

DESCRIPTION
^^^^^^^^^^^

:program:`llvm-profdata overlap` takes two profile data files and displays the
*overlap* of counter distribution between the whole files and between any of the
specified functions.

In this command, *overlap* is defined as follows:
Suppose *base profile file* has the following counts:
{c1_1, c1_2, ..., c1_n, c1_u_1, c2_u_2, ..., c2_u_s},
and *test profile file* has
{c2_1, c2_2, ..., c2_n, c2_v_1, c2_v_2, ..., c2_v_t}.
Here c{1|2}_i (i = 1 .. n) are matched counters and c1_u_i (i = 1 .. s) and
c2_v_i (i = 1 .. v) are unmatched counters (or counters only existing in)
*base profile file* and *test profile file*, respectively.
Let sum_1 = c1_1 + c1_2 +  ... + c1_n +  c1_u_1 + c2_u_2 + ... + c2_u_s, and
sum_2 = c2_1 + c2_2 + ... + c2_n + c2_v_1 + c2_v_2 + ... + c2_v_t.
*overlap* = min(c1_1/sum_1, c2_1/sum_2) + min(c1_2/sum_1, c2_2/sum_2) + ...
+ min(c1_n/sum_1, c2_n/sum_2).

The result overlap distribution is a percentage number, ranging from 0.0% to
100.0%, where 0.0% means there is no overlap and 100.0% means a perfect
overlap.

Here is an example, if *base profile file* has counts of {400, 600}, and
*test profile file* has matched counts of {60000, 40000}. The *overlap* is 80%.

OPTIONS
^^^^^^^

.. option:: --function=<string>

 Print details for a function if the function's name contains the given string.

.. option:: --help

 Print a summary of command line options.

.. option:: --output=<output>, -o

 Specify the output file name.  If *output* is ``-`` or it isn't specified,
 then the output is sent to standard output.

.. 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 max of unsigned long long.

.. option:: --cs

 Only show overlap for the context sensitive profile counts. The default is to show
 non-context sensitive profile counts.

.. program:: llvm-profdata order

.. _profdata-order:

ORDER
-------

SYNOPSIS
^^^^^^^^

:program:`llvm-profdata order` [*options*] [*filename*]

DESCRIPTION
^^^^^^^^^^^

:program:`llvm-profdata order` uses temporal profiling traces from a profile and
finds a function order that reduces the number of page faults for those traces.
This output can be directly passed to ``lld`` via ``--symbol-ordering-file=``
for ELF or ``-order-file`` for Mach-O. If the traces found in the profile are
representative of the real world, then this order should improve startup
performance.

OPTIONS
^^^^^^^

.. option:: --help

 Print a summary of command line options.

.. option:: --output=<output>, -o

 Specify the output file name.  If *output* is ``-`` or it isn't specified,
 then the output is sent to standard output.

EXIT STATUS
-----------

:program:`llvm-profdata` returns 1 if the command is omitted or is invalid,
if it cannot read input files, or if there is a mismatch between their data.
