home | help
LLVM-PROFDATA(1)		      LLVM			LLVM-PROFDATA(1)

NAME
     llvm-profdata - Profile data tool

SYNOPSIS
     llvm-profdata command [args...]

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

COMMANDS
     * merge

     * show

     * overlap

     * order

MERGE
   SYNOPSIS
     llvm-profdata merge [options] [filename...]

   DESCRIPTION
     llvm-profdata merge takes several profile data files generated by	PGO  in-
     strumentation  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 ar-
     guments are processed once for each time they are seen.

   OPTIONS
     --help
	    Print a summary of command line options.

     --output=<output>, -o
	    Specify the output file name.  Output cannot be - as  the  resulting
	    indexed profile data can't be written to standard output.

     --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  speci-
	    fied  without  using this option are assigned a default weight of 1.
	    Examples are shown below.

     --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>,<file-
	    name>.

     --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  llvm-cxxmap  tool  can be used to generate the symbol remapping
	    file.

     --instr (default)
	    Specify that the input profile is an instrumentation-based profile.

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

	    --binary (default)

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

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

	    --text

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

	    --gcc

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

     --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 in-
	    hibit compiler optimization during PGO.

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

     --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  fi-
	    nal merged product. The default failure mode is 'any'.

     --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  sam-
	    ple-based  profile in extbinary format. The entries in this file are
	    newline-separated.

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

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

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

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

     --convert-sample-profile-layout=[nest|flat]
	    Convert  the  merged  profile into a profile with a new layout. Sup-
	    ported layout are nest (Nested profile, the input should be CS  flat
	    profile) and flat (Profile with nested inlinees flattened out).

     --supplement-instr-with-sample=<file>
	    Supplement	an instrumentation profile with sample profile. The sam-
	    ple profile is the input of the flag. Output will be in instrumenta-
	    tion format (only works with -instr).

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

     --instr-prof-cold-threshold=<int>
	    User specified cold threshold for instr profile which will	override
	    the cold threshold got from profile summary.

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

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

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

     --debuginfod
	    Use debuginfod to find the associated executables that contain  pro-
	    file  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.

     --debug-file-directory=<dir>
	    Use  provided  local directories to search for executables that con-
	    tain profile data and name sections for the raw profiles  to  corre-
	    late them.	When -profile-correlate=binary was used for instrumenta-
	    tion, this option can be used for correlation.

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

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

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

     --function=<string>
	    Only keep functions matching the regex in the output, all others are
	    erased from the profile.

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

SHOW
   SYNOPSIS
     llvm-profdata show [options] [filename]

   DESCRIPTION
     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 func-
     tion(s).

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

   OPTIONS
     --all-functions
	    Print details for every function.

     --binary-ids
	    Print embedded binary ids in a profile.

     --counts
	    Print the counter values for the displayed functions.

     --show-format=<text|json|yaml>
	    Emit output in the selected format if supported by the provided pro-
	    file type.

     --function=<string>
	    Print details for a function if the  function's  name  contains  the
	    given string.

     --help
	    Print a summary of command line options.

     --output=<output>, -o
	    Specify the output file name.  If output is - or it isn't specified,
	    then the output is sent to standard output.

     --instr (default)
	    Specify that the input profile is an instrumentation-based profile.

     --text
	    Instruct  the profile dumper to show profile counts in the text for-
	    mat of the instrumentation-based profile data representation. By de-
	    fault, the profile information is dumped in a  more  human	readable
	    form (also in text) with annotations.

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

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

     --memop-sizes
	    Show  the  profiled  sizes	of  the memory intrinsic calls for shown
	    functions.

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

     --list-below-cutoff
	    Only  output  names of functions whose max count value are below the
	    cutoff value.

     --profile-version
	    Print profile version.

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

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

     --show-sec-info-only=[true|false]
	    Show basic information about each section in the profile.  This  op-
	    tion  is  only meaningful for sample-based profile in extbinary for-
	    mat.

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

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

OVERLAP
   SYNOPSIS
     llvm-profdata overlap [options] [base profile file] [test profile file]

   DESCRIPTION
     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
     --function=<string>
	    Print  details  for  a  function if the function's name contains the
	    given string.

     --help
	    Print a summary of command line options.

     --output=<output>, -o
	    Specify the output file name.  If output is - or it isn't specified,
	    then the output is sent to standard output.

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

     --cs   Only show overlap for the context sensitive profile counts. The  de-
	    fault is to show non-context sensitive profile counts.

ORDER
   SYNOPSIS
     llvm-profdata order [options] [filename]

   DESCRIPTION
     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 rep-
     resentative of the real world, then this order should improve startup  per-
     formance.

   OPTIONS
     --help
	    Print a summary of command line options.

     --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
     llvm-profdata returns 1 if the command is omitted or is invalid, if it can-
     not read input files, or if there is a mismatch between their data.

AUTHOR
     Maintained by the LLVM Team (https://llvm.org/).

COPYRIGHT
     2003-2026, LLVM Project

21				   2026-08-27			LLVM-PROFDATA(1)

home | help