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