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

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

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

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

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

 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:: -supplement-instr-with-sample=path_to_sample_profile

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

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

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

.. option:: -suppl-min-size-threshold=threshold_int_number

 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.

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

 Print the counter values for the displayed functions.

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

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

.. 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:: -o=output or -o output

 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.

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.
