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:: --split-layout=[true|false]

 Split the profile data section to two with one containing sample profiles with
 inlined functions and the other not. 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:: --debuginfod

 Use debuginfod to find the associated executables that contain profile data and
 name sections for the raw profiles to correlate them.
 When -profile-correlate=binary was used for instrumentation, this option can be
 used for correlation.

.. option:: --debug-file-directory=<dir>

 Use provided local directories to search for executables that contain profile
 data and name sections for the raw profiles to correlate them.
 When -profile-correlate=binary was used for instrumentation, this option can be
 used for correlation.

.. option:: --correlate=<kind>

 Specify the correlation kind (debug_info or binary) to use when -debuginfod or
 -debug-file-directory=<dir> option is provided.

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