| 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 | 
|  | 70 | ``weight``, where where ``weight`` is a decimal integer >= 1. | 
|  | 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 |  | 
|  | 105 | .. option:: -text | 
|  | 106 |  | 
| Xinliang David Li | 2fc2515 | 2015-11-24 20:48:25 +0000 | [diff] [blame] | 107 | Emit the profile in text mode. This option can also be used with both | 
|  | 108 | sample-based and instrumentation-based profile. When this option is used | 
|  | 109 | the profile will be dumped in the text format that is parsable by the profile | 
|  | 110 | reader. | 
| Diego Novillo | 6555adb | 2015-05-28 21:57:17 +0000 | [diff] [blame] | 111 |  | 
|  | 112 | .. option:: -gcc | 
|  | 113 |  | 
|  | 114 | Emit the profile using GCC's gcov format (Not yet supported). | 
|  | 115 |  | 
| Vedant Kumar | ee2ce4a5 | 2016-06-09 21:09:54 +0000 | [diff] [blame] | 116 | .. option:: -sparse[=true|false] | 
| Vedant Kumar | 00dab22 | 2016-01-29 22:54:45 +0000 | [diff] [blame] | 117 |  | 
|  | 118 | Do not emit function records with 0 execution count. Can only be used in | 
|  | 119 | conjunction with -instr. Defaults to false, since it can inhibit compiler | 
|  | 120 | optimization during PGO. | 
|  | 121 |  | 
| Vedant Kumar | e3a0bf5 | 2016-07-19 01:17:20 +0000 | [diff] [blame] | 122 | .. option:: -num-threads=N, -j=N | 
|  | 123 |  | 
|  | 124 | Use N threads to perform profile merging. When N=0, llvm-profdata auto-detects | 
|  | 125 | an appropriate number of threads to use. This is the default. | 
|  | 126 |  | 
| Vedant Kumar | 0fcfe89 | 2019-09-03 22:23:16 +0000 | [diff] [blame] | 127 | .. option:: -failure-mode=[any|all] | 
|  | 128 |  | 
|  | 129 | Set the failure mode. There are two options: 'any' causes the merge command to | 
|  | 130 | fail if any profiles are invalid, and 'all' causes the merge command to fail | 
|  | 131 | only if all profiles are invalid. If 'all' is set, information from any | 
|  | 132 | invalid profiles is excluded from the final merged product. The default | 
|  | 133 | failure mode is 'any'. | 
|  | 134 |  | 
| Nathan Slingerland | 7f5b47d | 2015-12-15 17:37:09 +0000 | [diff] [blame] | 135 | EXAMPLES | 
|  | 136 | ^^^^^^^^ | 
|  | 137 | Basic Usage | 
|  | 138 | +++++++++++ | 
|  | 139 | Merge three profiles: | 
|  | 140 |  | 
|  | 141 | :: | 
|  | 142 |  | 
|  | 143 | llvm-profdata merge foo.profdata bar.profdata baz.profdata -output merged.profdata | 
|  | 144 |  | 
|  | 145 | Weighted Input | 
|  | 146 | ++++++++++++++ | 
|  | 147 | The input file `foo.profdata` is especially important, multiply its counts by 10: | 
|  | 148 |  | 
|  | 149 | :: | 
|  | 150 |  | 
|  | 151 | llvm-profdata merge -weighted-input=10,foo.profdata bar.profdata baz.profdata -output merged.profdata | 
|  | 152 |  | 
|  | 153 | Exactly equivalent to the previous invocation (explicit form; useful for programmatic invocation): | 
|  | 154 |  | 
|  | 155 | :: | 
|  | 156 |  | 
|  | 157 | llvm-profdata merge -weighted-input=10,foo.profdata -weighted-input=1,bar.profdata -weighted-input=1,baz.profdata -output merged.profdata | 
|  | 158 |  | 
| Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 159 | .. program:: llvm-profdata show | 
|  | 160 |  | 
| Justin Bogner | 22b9f6a | 2015-03-12 01:38:50 +0000 | [diff] [blame] | 161 | .. _profdata-show: | 
| Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 162 |  | 
|  | 163 | SHOW | 
|  | 164 | ---- | 
|  | 165 |  | 
|  | 166 | SYNOPSIS | 
|  | 167 | ^^^^^^^^ | 
|  | 168 |  | 
|  | 169 | :program:`llvm-profdata show` [*options*] [*filename*] | 
|  | 170 |  | 
|  | 171 | DESCRIPTION | 
|  | 172 | ^^^^^^^^^^^ | 
|  | 173 |  | 
|  | 174 | :program:`llvm-profdata show` takes a profile data file and displays the | 
|  | 175 | information about the profile counters for this file and | 
|  | 176 | for any of the specified function(s). | 
|  | 177 |  | 
|  | 178 | If *filename* is omitted or is ``-``, then **llvm-profdata show** reads its | 
|  | 179 | input from standard input. | 
|  | 180 |  | 
|  | 181 | OPTIONS | 
|  | 182 | ^^^^^^^ | 
|  | 183 |  | 
|  | 184 | .. option:: -all-functions | 
|  | 185 |  | 
|  | 186 | Print details for every function. | 
|  | 187 |  | 
|  | 188 | .. option:: -counts | 
|  | 189 |  | 
|  | 190 | Print the counter values for the displayed functions. | 
|  | 191 |  | 
|  | 192 | .. option:: -function=string | 
|  | 193 |  | 
|  | 194 | Print details for a function if the function's name contains the given string. | 
|  | 195 |  | 
|  | 196 | .. option:: -help | 
|  | 197 |  | 
|  | 198 | Print a summary of command line options. | 
|  | 199 |  | 
|  | 200 | .. option:: -output=output, -o=output | 
|  | 201 |  | 
|  | 202 | Specify the output file name.  If *output* is ``-`` or it isn't specified, | 
|  | 203 | then the output is sent to standard output. | 
| Duncan P. N. Exon Smith | 846a627 | 2014-02-17 23:22:49 +0000 | [diff] [blame] | 204 |  | 
| Diego Novillo | 6555adb | 2015-05-28 21:57:17 +0000 | [diff] [blame] | 205 | .. option:: -instr (default) | 
|  | 206 |  | 
|  | 207 | Specify that the input profile is an instrumentation-based profile. | 
|  | 208 |  | 
| Xinliang David Li | 6f7c19a | 2015-11-23 20:47:38 +0000 | [diff] [blame] | 209 | .. option:: -text | 
|  | 210 |  | 
|  | 211 | Instruct the profile dumper to show profile counts in the text format of the | 
|  | 212 | instrumentation-based profile data representation. By default, the profile | 
|  | 213 | information is dumped in a more human readable form (also in text) with | 
|  | 214 | annotations. | 
|  | 215 |  | 
| Xinliang David Li | 801b531 | 2017-07-11 20:30:43 +0000 | [diff] [blame] | 216 | .. option:: -topn=n | 
| Rong Xu | 52aa224 | 2019-01-08 22:41:48 +0000 | [diff] [blame] | 217 |  | 
| Xinliang David Li | 801b531 | 2017-07-11 20:30:43 +0000 | [diff] [blame] | 218 | Instruct the profile dumper to show the top ``n`` functions with the | 
|  | 219 | hottest basic blocks in the summary section. By default, the topn functions | 
|  | 220 | are not dumped. | 
|  | 221 |  | 
| Diego Novillo | 6555adb | 2015-05-28 21:57:17 +0000 | [diff] [blame] | 222 | .. option:: -sample | 
|  | 223 |  | 
|  | 224 | Specify that the input profile is a sample-based profile. | 
|  | 225 |  | 
| Rong Xu | 60faea1 | 2017-03-16 21:15:48 +0000 | [diff] [blame] | 226 | .. option:: -memop-sizes | 
|  | 227 |  | 
|  | 228 | Show the profiled sizes of the memory intrinsic calls for shown functions. | 
|  | 229 |  | 
| Rong Xu | 52aa224 | 2019-01-08 22:41:48 +0000 | [diff] [blame] | 230 | .. option:: -value-cutoff=n | 
|  | 231 |  | 
|  | 232 | Show only those functions whose max count values are greater or equal to ``n``. | 
|  | 233 | By default, the value-cutoff is set to 0. | 
|  | 234 |  | 
|  | 235 | .. option:: -list-below-cutoff | 
|  | 236 |  | 
|  | 237 | Only output names of functions whose max count value are below the cutoff | 
|  | 238 | value. | 
|  | 239 |  | 
| Rong Xu | a6ff69f | 2019-02-28 19:55:07 +0000 | [diff] [blame] | 240 | .. option:: -showcs | 
| Rong Xu | 4f471ee | 2019-04-18 07:11:05 +0000 | [diff] [blame] | 241 |  | 
| Rong Xu | a6ff69f | 2019-02-28 19:55:07 +0000 | [diff] [blame] | 242 | Only show context sensitive profile counts. The default is to filter all | 
|  | 243 | context sensitive profile counts. | 
|  | 244 |  | 
| Rong Xu | 998b97f | 2019-04-30 21:19:12 +0000 | [diff] [blame] | 245 | .. program:: llvm-profdata overlap | 
|  | 246 |  | 
|  | 247 | .. _profdata-overlap: | 
|  | 248 |  | 
|  | 249 | OVERLAP | 
|  | 250 | ------- | 
|  | 251 |  | 
|  | 252 | SYNOPSIS | 
|  | 253 | ^^^^^^^^ | 
|  | 254 |  | 
|  | 255 | :program:`llvm-profdata overlap` [*options*] [*base profile file*] [*test profile file*] | 
|  | 256 |  | 
|  | 257 | DESCRIPTION | 
|  | 258 | ^^^^^^^^^^^ | 
|  | 259 |  | 
|  | 260 | :program:`llvm-profdata overlap` takes two profile data files and displays the | 
|  | 261 | *overlap* of counter distribution between the whole files and between any of the | 
|  | 262 | specified functions. | 
|  | 263 |  | 
|  | 264 | In this command, *overlap* is defined as follows: | 
|  | 265 | Suppose *base profile file* has the following counts: | 
|  | 266 | {c1_1, c1_2, ..., c1_n, c1_u_1, c2_u_2, ..., c2_u_s}, | 
|  | 267 | and *test profile file* has | 
|  | 268 | {c2_1, c2_2, ..., c2_n, c2_v_1, c2_v_2, ..., c2_v_t}. | 
|  | 269 | Here c{1|2}_i (i = 1 .. n) are matched counters and c1_u_i (i = 1 .. s) and | 
|  | 270 | c2_v_i (i = 1 .. v) are unmatched counters (or counters only existing in) | 
|  | 271 | *base profile file* and *test profile file*, respectively. | 
|  | 272 | Let sum_1 = c1_1 + c1_2 +  ... + c1_n +  c1_u_1 + c2_u_2 + ... + c2_u_s, and | 
|  | 273 | sum_2 = c2_1 + c2_2 + ... + c2_n + c2_v_1 + c2_v_2 + ... + c2_v_t. | 
|  | 274 | *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] | 275 | + min(c1_n/sum_1, c2_n/sum_2). | 
| Rong Xu | 998b97f | 2019-04-30 21:19:12 +0000 | [diff] [blame] | 276 |  | 
|  | 277 | The result overlap distribution is a percentage number, ranging from 0.0% to | 
|  | 278 | 100.0%, where 0.0% means there is no overlap and 100.0% means a perfect | 
|  | 279 | overlap. | 
|  | 280 |  | 
|  | 281 | Here is an example, if *base profile file* has counts of {400, 600}, and | 
|  | 282 | *test profile file* has matched counts of {60000, 40000}. The *overlap* is 80%. | 
|  | 283 |  | 
| Rong Xu | 998b97f | 2019-04-30 21:19:12 +0000 | [diff] [blame] | 284 | OPTIONS | 
|  | 285 | ^^^^^^^ | 
|  | 286 |  | 
|  | 287 | .. option:: -function=string | 
|  | 288 |  | 
|  | 289 | Print details for a function if the function's name contains the given string. | 
|  | 290 |  | 
|  | 291 | .. option:: -help | 
|  | 292 |  | 
|  | 293 | Print a summary of command line options. | 
|  | 294 |  | 
|  | 295 | .. option:: -o=output or -o output | 
|  | 296 |  | 
|  | 297 | Specify the output file name.  If *output* is ``-`` or it isn't specified, | 
|  | 298 | then the output is sent to standard output. | 
|  | 299 |  | 
|  | 300 | .. option:: -value-cutoff=n | 
|  | 301 |  | 
|  | 302 | Show only those functions whose max count values are greater or equal to ``n``. | 
|  | 303 | By default, the value-cutoff is set to max of unsigned long long. | 
|  | 304 |  | 
|  | 305 | .. option:: -cs | 
|  | 306 |  | 
|  | 307 | Only show overlap for the context sensitive profile counts. The default is to show | 
|  | 308 | non-context sensitive profile counts. | 
|  | 309 |  | 
| Duncan P. N. Exon Smith | 846a627 | 2014-02-17 23:22:49 +0000 | [diff] [blame] | 310 | EXIT STATUS | 
|  | 311 | ----------- | 
|  | 312 |  | 
| Alex Lorenz | bf4508b | 2014-07-30 20:30:11 +0000 | [diff] [blame] | 313 | :program:`llvm-profdata` returns 1 if the command is omitted or is invalid, | 
|  | 314 | if it cannot read input files, or if there is a mismatch between their data. |