Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 1 | llvm-profdata - Profile data tool |
| 2 | ================================= |
Duncan P. N. Exon Smith | 846a627 | 2014-02-17 23:22:49 +0000 | [diff] [blame] | 3 | |
James Henderson | a056684 | 2019-06-27 13:24:46 +0000 | [diff] [blame] | 4 | .. program:: llvm-profdata |
| 5 | |
Duncan P. N. Exon Smith | 846a627 | 2014-02-17 23:22:49 +0000 | [diff] [blame] | 6 | SYNOPSIS |
| 7 | -------- |
| 8 | |
Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 9 | :program:`llvm-profdata` *command* [*args...*] |
Duncan P. N. Exon Smith | 846a627 | 2014-02-17 23:22:49 +0000 | [diff] [blame] | 10 | |
| 11 | DESCRIPTION |
| 12 | ----------- |
| 13 | |
Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 14 | The :program:`llvm-profdata` tool is a small utility for working with profile |
| 15 | data files. |
Duncan P. N. Exon Smith | 846a627 | 2014-02-17 23:22:49 +0000 | [diff] [blame] | 16 | |
Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 17 | COMMANDS |
| 18 | -------- |
| 19 | |
Justin Bogner | 22b9f6a | 2015-03-12 01:38:50 +0000 | [diff] [blame] | 20 | * :ref:`merge <profdata-merge>` |
| 21 | * :ref:`show <profdata-show>` |
Rong Xu | 998b97f | 2019-04-30 21:19:12 +0000 | [diff] [blame] | 22 | * :ref:`overlap <profdata-overlap>` |
Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 23 | |
| 24 | .. program:: llvm-profdata merge |
| 25 | |
Justin Bogner | 22b9f6a | 2015-03-12 01:38:50 +0000 | [diff] [blame] | 26 | .. _profdata-merge: |
Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 27 | |
| 28 | MERGE |
| 29 | ----- |
| 30 | |
| 31 | SYNOPSIS |
| 32 | ^^^^^^^^ |
| 33 | |
Nathan Slingerland | 7f5b47d | 2015-12-15 17:37:09 +0000 | [diff] [blame] | 34 | :program:`llvm-profdata merge` [*options*] [*filename...*] |
Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 35 | |
| 36 | DESCRIPTION |
| 37 | ^^^^^^^^^^^ |
| 38 | |
| 39 | :program:`llvm-profdata merge` takes several profile data files |
| 40 | generated by PGO instrumentation and merges them together into a single |
| 41 | indexed profile data file. |
Duncan P. N. Exon Smith | 846a627 | 2014-02-17 23:22:49 +0000 | [diff] [blame] | 42 | |
Nathan Slingerland | 7f5b47d | 2015-12-15 17:37:09 +0000 | [diff] [blame] | 43 | By default profile data is merged without modification. This means that the |
| 44 | relative importance of each input file is proportional to the number of samples |
| 45 | or counts it contains. In general, the input from a longer training run will be |
| 46 | interpreted as relatively more important than a shorter run. Depending on the |
| 47 | nature of the training runs it may be useful to adjust the weight given to each |
| 48 | input file by using the ``-weighted-input`` option. |
| 49 | |
Vedant Kumar | cef4360 | 2016-06-07 22:47:31 +0000 | [diff] [blame] | 50 | Profiles passed in via ``-weighted-input``, ``-input-files``, or via positional |
| 51 | arguments are processed once for each time they are seen. |
| 52 | |
Nathan Slingerland | 7f5b47d | 2015-12-15 17:37:09 +0000 | [diff] [blame] | 53 | |
Duncan P. N. Exon Smith | 846a627 | 2014-02-17 23:22:49 +0000 | [diff] [blame] | 54 | OPTIONS |
Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 55 | ^^^^^^^ |
Duncan P. N. Exon Smith | 846a627 | 2014-02-17 23:22:49 +0000 | [diff] [blame] | 56 | |
Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 57 | .. option:: -help |
Duncan P. N. Exon Smith | 846a627 | 2014-02-17 23:22:49 +0000 | [diff] [blame] | 58 | |
Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 59 | Print a summary of command line options. |
| 60 | |
| 61 | .. option:: -output=output, -o=output |
| 62 | |
| 63 | Specify the output file name. *Output* cannot be ``-`` as the resulting |
| 64 | indexed profile data can't be written to standard output. |
| 65 | |
Nathan Slingerland | 7f5b47d | 2015-12-15 17:37:09 +0000 | [diff] [blame] | 66 | .. option:: -weighted-input=weight,filename |
| 67 | |
Sean Silva | 84d1922 | 2016-05-28 01:03:36 +0000 | [diff] [blame] | 68 | Specify an input file name along with a weight. The profile counts of the |
| 69 | supplied ``filename`` will be scaled (multiplied) by the supplied |
SCOTT-HAMILTON | 4d62c34 | 2020-04-13 08:39:58 +0200 | [diff] [blame] | 70 | ``weight``, where ``weight`` is a decimal integer >= 1. |
Sean Silva | 84d1922 | 2016-05-28 01:03:36 +0000 | [diff] [blame] | 71 | Input files specified without using this option are assigned a default |
| 72 | weight of 1. Examples are shown below. |
Nathan Slingerland | 7f5b47d | 2015-12-15 17:37:09 +0000 | [diff] [blame] | 73 | |
Vedant Kumar | cef4360 | 2016-06-07 22:47:31 +0000 | [diff] [blame] | 74 | .. option:: -input-files=path, -f=path |
| 75 | |
| 76 | Specify a file which contains a list of files to merge. The entries in this |
| 77 | file are newline-separated. Lines starting with '#' are skipped. Entries may |
| 78 | be of the form <filename> or <weight>,<filename>. |
| 79 | |
Richard Smith | 3164fcf | 2018-09-13 20:22:02 +0000 | [diff] [blame] | 80 | .. option:: -remapping-file=path, -r=path |
| 81 | |
| 82 | Specify a file which contains a remapping from symbol names in the input |
| 83 | profile to the symbol names that should be used in the output profile. The |
| 84 | file should consist of lines of the form ``<input-symbol> <output-symbol>``. |
| 85 | Blank lines and lines starting with ``#`` are skipped. |
| 86 | |
| 87 | The :doc:`llvm-cxxmap <llvm-cxxmap>` tool can be used to generate the symbol |
| 88 | remapping file. |
| 89 | |
Diego Novillo | 6555adb | 2015-05-28 21:57:17 +0000 | [diff] [blame] | 90 | .. option:: -instr (default) |
| 91 | |
Xinliang David Li | 2fc2515 | 2015-11-24 20:48:25 +0000 | [diff] [blame] | 92 | Specify that the input profile is an instrumentation-based profile. |
Diego Novillo | 6555adb | 2015-05-28 21:57:17 +0000 | [diff] [blame] | 93 | |
| 94 | .. option:: -sample |
| 95 | |
Xinliang David Li | 2fc2515 | 2015-11-24 20:48:25 +0000 | [diff] [blame] | 96 | Specify that the input profile is a sample-based profile. |
| 97 | |
| 98 | The format of the generated file can be generated in one of three ways: |
Diego Novillo | 6555adb | 2015-05-28 21:57:17 +0000 | [diff] [blame] | 99 | |
| 100 | .. option:: -binary (default) |
| 101 | |
Xinliang David Li | 2fc2515 | 2015-11-24 20:48:25 +0000 | [diff] [blame] | 102 | Emit the profile using a binary encoding. For instrumentation-based profile |
| 103 | the output format is the indexed binary format. |
Diego Novillo | 6555adb | 2015-05-28 21:57:17 +0000 | [diff] [blame] | 104 | |
Wei Mi | 67bb160 | 2020-05-13 15:11:49 -0700 | [diff] [blame] | 105 | .. option:: -extbinary |
| 106 | |
| 107 | Emit the profile using an extensible binary encoding. This option can only |
| 108 | be used with sample-based profile. The extensible binary encoding can be |
| 109 | more compact with compression enabled and can be loaded faster than the |
| 110 | default binary encoding. |
| 111 | |
Diego Novillo | 6555adb | 2015-05-28 21:57:17 +0000 | [diff] [blame] | 112 | .. option:: -text |
| 113 | |
Xinliang David Li | 2fc2515 | 2015-11-24 20:48:25 +0000 | [diff] [blame] | 114 | Emit the profile in text mode. This option can also be used with both |
| 115 | sample-based and instrumentation-based profile. When this option is used |
| 116 | the profile will be dumped in the text format that is parsable by the profile |
| 117 | reader. |
Diego Novillo | 6555adb | 2015-05-28 21:57:17 +0000 | [diff] [blame] | 118 | |
| 119 | .. option:: -gcc |
| 120 | |
| 121 | Emit the profile using GCC's gcov format (Not yet supported). |
| 122 | |
Vedant Kumar | ee2ce4a5 | 2016-06-09 21:09:54 +0000 | [diff] [blame] | 123 | .. option:: -sparse[=true|false] |
Vedant Kumar | 00dab22 | 2016-01-29 22:54:45 +0000 | [diff] [blame] | 124 | |
| 125 | Do not emit function records with 0 execution count. Can only be used in |
| 126 | conjunction with -instr. Defaults to false, since it can inhibit compiler |
| 127 | optimization during PGO. |
| 128 | |
Vedant Kumar | e3a0bf5 | 2016-07-19 01:17:20 +0000 | [diff] [blame] | 129 | .. option:: -num-threads=N, -j=N |
| 130 | |
| 131 | Use N threads to perform profile merging. When N=0, llvm-profdata auto-detects |
| 132 | an appropriate number of threads to use. This is the default. |
| 133 | |
Vedant Kumar | 0fcfe89 | 2019-09-03 22:23:16 +0000 | [diff] [blame] | 134 | .. option:: -failure-mode=[any|all] |
| 135 | |
| 136 | Set the failure mode. There are two options: 'any' causes the merge command to |
| 137 | fail if any profiles are invalid, and 'all' causes the merge command to fail |
| 138 | only if all profiles are invalid. If 'all' is set, information from any |
| 139 | invalid profiles is excluded from the final merged product. The default |
| 140 | failure mode is 'any'. |
| 141 | |
Wei Mi | 67bb160 | 2020-05-13 15:11:49 -0700 | [diff] [blame] | 142 | .. option:: -prof-sym-list=path |
| 143 | |
| 144 | Specify a file which contains a list of symbols to generate profile symbol |
| 145 | list in the profile. This option can only be used with sample-based profile |
| 146 | in extbinary format. The entries in this file are newline-separated. |
| 147 | |
| 148 | .. option:: -compress-all-sections=[true|false] |
| 149 | |
| 150 | Compress all sections when writing the profile. This option can only be used |
| 151 | with sample-based profile in extbinary format. |
| 152 | |
| 153 | .. option:: -use-md5=[true|false] |
| 154 | |
| 155 | Use MD5 to represent string in name table when writing the profile. |
| 156 | This option can only be used with sample-based profile in extbinary format. |
| 157 | |
| 158 | .. option:: -gen-partial-profile=[true|false] |
| 159 | |
| 160 | Mark the profile to be a partial profile which only provides partial profile |
| 161 | coverage for the optimized target. This option can only be used with |
| 162 | sample-based profile in extbinary format. |
| 163 | |
Wei Mi | a23f623 | 2020-07-08 15:19:44 -0700 | [diff] [blame] | 164 | .. option:: -supplement-instr-with-sample=path_to_sample_profile |
| 165 | |
| 166 | Supplement an instrumentation profile with sample profile. The sample profile |
| 167 | is the input of the flag. Output will be in instrumentation format (only works |
| 168 | with -instr). |
| 169 | |
| 170 | .. option:: -zero-counter-threshold=threshold_float_number |
| 171 | |
| 172 | For the function which is cold in instr profile but hot in sample profile, if |
| 173 | the ratio of the number of zero counters divided by the the total number of |
| 174 | counters is above the threshold, the profile of the function will be regarded |
| 175 | as being harmful for performance and will be dropped. |
| 176 | |
| 177 | .. option:: -instr-prof-cold-threshold=threshold_int_number |
| 178 | |
| 179 | User specified cold threshold for instr profile which will override the cold |
| 180 | threshold got from profile summary. |
| 181 | |
| 182 | .. option:: -suppl-min-size-threshold=threshold_int_number |
| 183 | |
| 184 | If the size of a function is smaller than the threshold, assume it can be |
| 185 | inlined by PGO early inliner and it will not be adjusted based on sample |
| 186 | profile. |
| 187 | |
Nathan Slingerland | 7f5b47d | 2015-12-15 17:37:09 +0000 | [diff] [blame] | 188 | EXAMPLES |
| 189 | ^^^^^^^^ |
| 190 | Basic Usage |
| 191 | +++++++++++ |
| 192 | Merge three profiles: |
| 193 | |
| 194 | :: |
| 195 | |
| 196 | llvm-profdata merge foo.profdata bar.profdata baz.profdata -output merged.profdata |
| 197 | |
| 198 | Weighted Input |
| 199 | ++++++++++++++ |
| 200 | The input file `foo.profdata` is especially important, multiply its counts by 10: |
| 201 | |
| 202 | :: |
| 203 | |
| 204 | llvm-profdata merge -weighted-input=10,foo.profdata bar.profdata baz.profdata -output merged.profdata |
| 205 | |
| 206 | Exactly equivalent to the previous invocation (explicit form; useful for programmatic invocation): |
| 207 | |
| 208 | :: |
| 209 | |
| 210 | llvm-profdata merge -weighted-input=10,foo.profdata -weighted-input=1,bar.profdata -weighted-input=1,baz.profdata -output merged.profdata |
| 211 | |
Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 212 | .. program:: llvm-profdata show |
| 213 | |
Justin Bogner | 22b9f6a | 2015-03-12 01:38:50 +0000 | [diff] [blame] | 214 | .. _profdata-show: |
Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 215 | |
| 216 | SHOW |
| 217 | ---- |
| 218 | |
| 219 | SYNOPSIS |
| 220 | ^^^^^^^^ |
| 221 | |
| 222 | :program:`llvm-profdata show` [*options*] [*filename*] |
| 223 | |
| 224 | DESCRIPTION |
| 225 | ^^^^^^^^^^^ |
| 226 | |
| 227 | :program:`llvm-profdata show` takes a profile data file and displays the |
| 228 | information about the profile counters for this file and |
| 229 | for any of the specified function(s). |
| 230 | |
| 231 | If *filename* is omitted or is ``-``, then **llvm-profdata show** reads its |
| 232 | input from standard input. |
| 233 | |
| 234 | OPTIONS |
| 235 | ^^^^^^^ |
| 236 | |
| 237 | .. option:: -all-functions |
| 238 | |
| 239 | Print details for every function. |
| 240 | |
| 241 | .. option:: -counts |
| 242 | |
| 243 | Print the counter values for the displayed functions. |
| 244 | |
| 245 | .. option:: -function=string |
| 246 | |
| 247 | Print details for a function if the function's name contains the given string. |
| 248 | |
| 249 | .. option:: -help |
| 250 | |
| 251 | Print a summary of command line options. |
| 252 | |
| 253 | .. option:: -output=output, -o=output |
| 254 | |
| 255 | Specify the output file name. If *output* is ``-`` or it isn't specified, |
| 256 | then the output is sent to standard output. |
Duncan P. N. Exon Smith | 846a627 | 2014-02-17 23:22:49 +0000 | [diff] [blame] | 257 | |
Diego Novillo | 6555adb | 2015-05-28 21:57:17 +0000 | [diff] [blame] | 258 | .. option:: -instr (default) |
| 259 | |
| 260 | Specify that the input profile is an instrumentation-based profile. |
| 261 | |
Xinliang David Li | 6f7c19a | 2015-11-23 20:47:38 +0000 | [diff] [blame] | 262 | .. option:: -text |
| 263 | |
| 264 | Instruct the profile dumper to show profile counts in the text format of the |
| 265 | instrumentation-based profile data representation. By default, the profile |
| 266 | information is dumped in a more human readable form (also in text) with |
| 267 | annotations. |
| 268 | |
Xinliang David Li | 801b531 | 2017-07-11 20:30:43 +0000 | [diff] [blame] | 269 | .. option:: -topn=n |
Rong Xu | 52aa224 | 2019-01-08 22:41:48 +0000 | [diff] [blame] | 270 | |
Xinliang David Li | 801b531 | 2017-07-11 20:30:43 +0000 | [diff] [blame] | 271 | Instruct the profile dumper to show the top ``n`` functions with the |
| 272 | hottest basic blocks in the summary section. By default, the topn functions |
| 273 | are not dumped. |
| 274 | |
Diego Novillo | 6555adb | 2015-05-28 21:57:17 +0000 | [diff] [blame] | 275 | .. option:: -sample |
| 276 | |
| 277 | Specify that the input profile is a sample-based profile. |
| 278 | |
Rong Xu | 60faea1 | 2017-03-16 21:15:48 +0000 | [diff] [blame] | 279 | .. option:: -memop-sizes |
| 280 | |
| 281 | Show the profiled sizes of the memory intrinsic calls for shown functions. |
| 282 | |
Rong Xu | 52aa224 | 2019-01-08 22:41:48 +0000 | [diff] [blame] | 283 | .. option:: -value-cutoff=n |
| 284 | |
| 285 | Show only those functions whose max count values are greater or equal to ``n``. |
| 286 | By default, the value-cutoff is set to 0. |
| 287 | |
| 288 | .. option:: -list-below-cutoff |
| 289 | |
| 290 | Only output names of functions whose max count value are below the cutoff |
| 291 | value. |
| 292 | |
Rong Xu | a6ff69f | 2019-02-28 19:55:07 +0000 | [diff] [blame] | 293 | .. option:: -showcs |
Rong Xu | 4f471ee | 2019-04-18 07:11:05 +0000 | [diff] [blame] | 294 | |
Rong Xu | a6ff69f | 2019-02-28 19:55:07 +0000 | [diff] [blame] | 295 | Only show context sensitive profile counts. The default is to filter all |
| 296 | context sensitive profile counts. |
| 297 | |
Wei Mi | 67bb160 | 2020-05-13 15:11:49 -0700 | [diff] [blame] | 298 | .. option:: -show-prof-sym-list=[true|false] |
| 299 | |
| 300 | Show profile symbol list if it exists in the profile. This option is only |
| 301 | meaningful for sample-based profile in extbinary format. |
| 302 | |
| 303 | .. option:: -show-sec-info-only=[true|false] |
| 304 | |
| 305 | Show basic information about each section in the profile. This option is |
| 306 | only meaningful for sample-based profile in extbinary format. |
| 307 | |
Rong Xu | 998b97f | 2019-04-30 21:19:12 +0000 | [diff] [blame] | 308 | .. program:: llvm-profdata overlap |
| 309 | |
| 310 | .. _profdata-overlap: |
| 311 | |
| 312 | OVERLAP |
| 313 | ------- |
| 314 | |
| 315 | SYNOPSIS |
| 316 | ^^^^^^^^ |
| 317 | |
| 318 | :program:`llvm-profdata overlap` [*options*] [*base profile file*] [*test profile file*] |
| 319 | |
| 320 | DESCRIPTION |
| 321 | ^^^^^^^^^^^ |
| 322 | |
| 323 | :program:`llvm-profdata overlap` takes two profile data files and displays the |
| 324 | *overlap* of counter distribution between the whole files and between any of the |
| 325 | specified functions. |
| 326 | |
| 327 | In this command, *overlap* is defined as follows: |
| 328 | Suppose *base profile file* has the following counts: |
| 329 | {c1_1, c1_2, ..., c1_n, c1_u_1, c2_u_2, ..., c2_u_s}, |
| 330 | and *test profile file* has |
| 331 | {c2_1, c2_2, ..., c2_n, c2_v_1, c2_v_2, ..., c2_v_t}. |
| 332 | Here c{1|2}_i (i = 1 .. n) are matched counters and c1_u_i (i = 1 .. s) and |
| 333 | c2_v_i (i = 1 .. v) are unmatched counters (or counters only existing in) |
| 334 | *base profile file* and *test profile file*, respectively. |
| 335 | Let sum_1 = c1_1 + c1_2 + ... + c1_n + c1_u_1 + c2_u_2 + ... + c2_u_s, and |
| 336 | sum_2 = c2_1 + c2_2 + ... + c2_n + c2_v_1 + c2_v_2 + ... + c2_v_t. |
| 337 | *overlap* = min(c1_1/sum_1, c2_1/sum_2) + min(c1_2/sum_1, c2_2/sum_2) + ... |
Rong Xu | b1f9577 | 2019-04-30 22:35:35 +0000 | [diff] [blame] | 338 | + min(c1_n/sum_1, c2_n/sum_2). |
Rong Xu | 998b97f | 2019-04-30 21:19:12 +0000 | [diff] [blame] | 339 | |
| 340 | The result overlap distribution is a percentage number, ranging from 0.0% to |
| 341 | 100.0%, where 0.0% means there is no overlap and 100.0% means a perfect |
| 342 | overlap. |
| 343 | |
| 344 | Here is an example, if *base profile file* has counts of {400, 600}, and |
| 345 | *test profile file* has matched counts of {60000, 40000}. The *overlap* is 80%. |
| 346 | |
Rong Xu | 998b97f | 2019-04-30 21:19:12 +0000 | [diff] [blame] | 347 | OPTIONS |
| 348 | ^^^^^^^ |
| 349 | |
| 350 | .. option:: -function=string |
| 351 | |
| 352 | Print details for a function if the function's name contains the given string. |
| 353 | |
| 354 | .. option:: -help |
| 355 | |
| 356 | Print a summary of command line options. |
| 357 | |
| 358 | .. option:: -o=output or -o output |
| 359 | |
| 360 | Specify the output file name. If *output* is ``-`` or it isn't specified, |
| 361 | then the output is sent to standard output. |
| 362 | |
| 363 | .. option:: -value-cutoff=n |
| 364 | |
| 365 | Show only those functions whose max count values are greater or equal to ``n``. |
| 366 | By default, the value-cutoff is set to max of unsigned long long. |
| 367 | |
| 368 | .. option:: -cs |
| 369 | |
| 370 | Only show overlap for the context sensitive profile counts. The default is to show |
| 371 | non-context sensitive profile counts. |
| 372 | |
Duncan P. N. Exon Smith | 846a627 | 2014-02-17 23:22:49 +0000 | [diff] [blame] | 373 | EXIT STATUS |
| 374 | ----------- |
| 375 | |
Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 376 | :program:`llvm-profdata` returns 1 if the command is omitted or is invalid, |
| 377 | if it cannot read input files, or if there is a mismatch between their data. |