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.
