xref: /llvm-project/bolt/docs/CommandLineArgumentReference.md (revision 62c39d773422fd7193758c325085c864a67a55cc)
1dcf3102bSElvina Yakubova# BOLT - a post-link optimizer developed to speed up large applications
2dcf3102bSElvina Yakubova
3dcf3102bSElvina Yakubova## SYNOPSIS
4dcf3102bSElvina Yakubova
5dcf3102bSElvina Yakubova`llvm-bolt <executable> [-o outputfile] <executable>.bolt [-data=perf.fdata] [options]`
6dcf3102bSElvina Yakubova
7dcf3102bSElvina Yakubova## OPTIONS
8dcf3102bSElvina Yakubova
9765ce869SElvina Yakubova### Generic options:
10dcf3102bSElvina Yakubova
11dcf3102bSElvina Yakubova- `-h`
12dcf3102bSElvina Yakubova
13765ce869SElvina Yakubova  Alias for --help
14dcf3102bSElvina Yakubova
15dcf3102bSElvina Yakubova- `--help`
16dcf3102bSElvina Yakubova
17765ce869SElvina Yakubova  Display available options (--help-hidden for more)
18dcf3102bSElvina Yakubova
19dcf3102bSElvina Yakubova- `--help-hidden`
20dcf3102bSElvina Yakubova
21765ce869SElvina Yakubova  Display all available options
22dcf3102bSElvina Yakubova
23dcf3102bSElvina Yakubova- `--help-list`
24dcf3102bSElvina Yakubova
25765ce869SElvina Yakubova  Display list of available options (--help-list-hidden for more)
26dcf3102bSElvina Yakubova
27dcf3102bSElvina Yakubova- `--help-list-hidden`
28dcf3102bSElvina Yakubova
29765ce869SElvina Yakubova  Display list of all available options
30dcf3102bSElvina Yakubova
31dcf3102bSElvina Yakubova- `--version`
32dcf3102bSElvina Yakubova
33765ce869SElvina Yakubova  Display the version of this program
34dcf3102bSElvina Yakubova
35765ce869SElvina Yakubova### Output options:
36765ce869SElvina Yakubova
37765ce869SElvina Yakubova- `--bolt-info`
38765ce869SElvina Yakubova
39765ce869SElvina Yakubova  Write bolt info section in the output binary
40dcf3102bSElvina Yakubova
41dcf3102bSElvina Yakubova- `-o <string>`
42dcf3102bSElvina Yakubova
43dcf3102bSElvina Yakubova  output file
44dcf3102bSElvina Yakubova
45dcf3102bSElvina Yakubova- `-w <string>`
46dcf3102bSElvina Yakubova
47dcf3102bSElvina Yakubova  Save recorded profile to a file
48dcf3102bSElvina Yakubova
49765ce869SElvina Yakubova### BOLT generic options:
50dcf3102bSElvina Yakubova
51dcf3102bSElvina Yakubova- `--align-text=<uint>`
52dcf3102bSElvina Yakubova
53dcf3102bSElvina Yakubova  Alignment of .text section
54dcf3102bSElvina Yakubova
55dcf3102bSElvina Yakubova- `--allow-stripped`
56dcf3102bSElvina Yakubova
57dcf3102bSElvina Yakubova  Allow processing of stripped binaries
58dcf3102bSElvina Yakubova
5975ac887aSshaw young- `--alt-inst-feature-size=<uint>`
6075ac887aSshaw young
6175ac887aSshaw young  Size of feature field in .altinstructions
6275ac887aSshaw young
6375ac887aSshaw young- `--alt-inst-has-padlen`
6475ac887aSshaw young
6575ac887aSshaw young  Specify that .altinstructions has padlen field
6675ac887aSshaw young
67dcf3102bSElvina Yakubova- `--asm-dump[=<dump folder>]`
68dcf3102bSElvina Yakubova
69dcf3102bSElvina Yakubova  Dump function into assembly
70dcf3102bSElvina Yakubova
71dcf3102bSElvina Yakubova- `-b`
72dcf3102bSElvina Yakubova
73dcf3102bSElvina Yakubova  Alias for -data
74dcf3102bSElvina Yakubova
75dcf3102bSElvina Yakubova- `--bolt-id=<string>`
76dcf3102bSElvina Yakubova
77dcf3102bSElvina Yakubova  Add any string to tag this execution in the output binary via bolt info section
78dcf3102bSElvina Yakubova
79dcf3102bSElvina Yakubova- `--break-funcs=<func1,func2,func3,...>`
80dcf3102bSElvina Yakubova
81dcf3102bSElvina Yakubova  List of functions to core dump on (debugging)
82dcf3102bSElvina Yakubova
83dcf3102bSElvina Yakubova- `--check-encoding`
84dcf3102bSElvina Yakubova
85dcf3102bSElvina Yakubova  Perform verification of LLVM instruction encoding/decoding. Every instruction
86dcf3102bSElvina Yakubova  in the input is decoded and re-encoded. If the resulting bytes do not match
87dcf3102bSElvina Yakubova  the input, a warning message is printed.
88dcf3102bSElvina Yakubova
8975ac887aSshaw young- `--comp-dir-override=<string>`
9075ac887aSshaw young
91d251a328SJordan Brantner  Overrides DW_AT_comp_dir, and provides an alternative base location, which is
9275ac887aSshaw young  used with DW_AT_dwo_name to construct a path to *.dwo files.
9375ac887aSshaw young
9475ac887aSshaw young- `--create-debug-names-section`
9575ac887aSshaw young
9675ac887aSshaw young  Creates .debug_names section, if the input binary doesn't have it already, for
9775ac887aSshaw young  DWARF5 CU/TUs.
9875ac887aSshaw young
99dcf3102bSElvina Yakubova- `--cu-processing-batch-size=<uint>`
100dcf3102bSElvina Yakubova
101dcf3102bSElvina Yakubova  Specifies the size of batches for processing CUs. Higher number has better
102dcf3102bSElvina Yakubova  performance, but more memory usage. Default value is 1.
103dcf3102bSElvina Yakubova
104dcf3102bSElvina Yakubova- `--data=<string>`
105dcf3102bSElvina Yakubova
106765ce869SElvina Yakubova  data file
107765ce869SElvina Yakubova
108765ce869SElvina Yakubova- `--data2=<string>`
109765ce869SElvina Yakubova
110765ce869SElvina Yakubova  data file
111dcf3102bSElvina Yakubova
112dcf3102bSElvina Yakubova- `--debug-skeleton-cu`
113dcf3102bSElvina Yakubova
11475ac887aSshaw young  Prints out offsets for abbrev and debug_info of Skeleton CUs that get patched.
115dcf3102bSElvina Yakubova
1166aad62cfSSayhaan Siddiqui- `--debug-thread-count=<uint>`
1176aad62cfSSayhaan Siddiqui
1186aad62cfSSayhaan Siddiqui  Specifies the number of threads to be used when processing DWO debug information.
1196aad62cfSSayhaan Siddiqui
120dcf3102bSElvina Yakubova- `--dot-tooltip-code`
121dcf3102bSElvina Yakubova
122dcf3102bSElvina Yakubova  Add basic block instructions as tool tips on nodes
123dcf3102bSElvina Yakubova
12475ac887aSshaw young- `--dump-alt-instructions`
12575ac887aSshaw young
12675ac887aSshaw young  Dump Linux alternative instructions info
12775ac887aSshaw young
128dcf3102bSElvina Yakubova- `--dump-cg=<string>`
129dcf3102bSElvina Yakubova
130dcf3102bSElvina Yakubova  Dump callgraph to the given file
131dcf3102bSElvina Yakubova
132dcf3102bSElvina Yakubova- `--dump-data`
133dcf3102bSElvina Yakubova
134dcf3102bSElvina Yakubova  Dump parsed bolt data for debugging
135dcf3102bSElvina Yakubova
136dcf3102bSElvina Yakubova- `--dump-dot-all`
137dcf3102bSElvina Yakubova
138dcf3102bSElvina Yakubova  Dump function CFGs to graphviz format after each stage;enable '-print-loops'
139dcf3102bSElvina Yakubova  for color-coded blocks
140dcf3102bSElvina Yakubova
14175ac887aSshaw young- `--dump-linux-exceptions`
14275ac887aSshaw young
14375ac887aSshaw young  Dump Linux kernel exception table
14475ac887aSshaw young
145dcf3102bSElvina Yakubova- `--dump-orc`
146dcf3102bSElvina Yakubova
147dcf3102bSElvina Yakubova  Dump raw ORC unwind information (sorted)
148dcf3102bSElvina Yakubova
14975ac887aSshaw young- `--dump-para-sites`
15075ac887aSshaw young
15175ac887aSshaw young  Dump Linux kernel paravitual patch sites
15275ac887aSshaw young
15375ac887aSshaw young- `--dump-pci-fixups`
15475ac887aSshaw young
15575ac887aSshaw young  Dump Linux kernel PCI fixup table
15675ac887aSshaw young
15775ac887aSshaw young- `--dump-smp-locks`
15875ac887aSshaw young
15975ac887aSshaw young  Dump Linux kernel SMP locks
16075ac887aSshaw young
16175ac887aSshaw young- `--dump-static-calls`
16275ac887aSshaw young
16375ac887aSshaw young  Dump Linux kernel static calls
16475ac887aSshaw young
16575ac887aSshaw young- `--dump-static-keys`
16675ac887aSshaw young
16775ac887aSshaw young  Dump Linux kernel static keys jump table
16875ac887aSshaw young
169dcf3102bSElvina Yakubova- `--dwarf-output-path=<string>`
170dcf3102bSElvina Yakubova
171dcf3102bSElvina Yakubova  Path to where .dwo files or dwp file will be written out to.
172dcf3102bSElvina Yakubova
173dcf3102bSElvina Yakubova- `--dwp=<string>`
174dcf3102bSElvina Yakubova
175dcf3102bSElvina Yakubova  Path and name to DWP file.
176dcf3102bSElvina Yakubova
177dcf3102bSElvina Yakubova- `--dyno-stats`
178dcf3102bSElvina Yakubova
179dcf3102bSElvina Yakubova  Print execution info based on profile
180dcf3102bSElvina Yakubova
181dcf3102bSElvina Yakubova- `--dyno-stats-all`
182dcf3102bSElvina Yakubova
183dcf3102bSElvina Yakubova  Print dyno stats after each stage
184dcf3102bSElvina Yakubova
185dcf3102bSElvina Yakubova- `--dyno-stats-scale=<uint>`
186dcf3102bSElvina Yakubova
187dcf3102bSElvina Yakubova  Scale to be applied while reporting dyno stats
188dcf3102bSElvina Yakubova
189dcf3102bSElvina Yakubova- `--enable-bat`
190dcf3102bSElvina Yakubova
191dcf3102bSElvina Yakubova  Write BOLT Address Translation tables
192dcf3102bSElvina Yakubova
193dcf3102bSElvina Yakubova- `--force-data-relocations`
194dcf3102bSElvina Yakubova
195dcf3102bSElvina Yakubova  Force relocations to data sections to always be processed
196dcf3102bSElvina Yakubova
197dcf3102bSElvina Yakubova- `--force-patch`
198dcf3102bSElvina Yakubova
199dcf3102bSElvina Yakubova  Force patching of original entry points
200dcf3102bSElvina Yakubova
201dcf3102bSElvina Yakubova- `--funcs=<func1,func2,func3,...>`
202dcf3102bSElvina Yakubova
203dcf3102bSElvina Yakubova  Limit optimizations to functions from the list
204dcf3102bSElvina Yakubova
205dcf3102bSElvina Yakubova- `--funcs-file=<string>`
206dcf3102bSElvina Yakubova
207dcf3102bSElvina Yakubova  File with list of functions to optimize
208dcf3102bSElvina Yakubova
209dcf3102bSElvina Yakubova- `--funcs-file-no-regex=<string>`
210dcf3102bSElvina Yakubova
211dcf3102bSElvina Yakubova  File with list of functions to optimize (non-regex)
212dcf3102bSElvina Yakubova
213dcf3102bSElvina Yakubova- `--funcs-no-regex=<func1,func2,func3,...>`
214dcf3102bSElvina Yakubova
215dcf3102bSElvina Yakubova  Limit optimizations to functions from the list (non-regex)
216dcf3102bSElvina Yakubova
217dcf3102bSElvina Yakubova- `--hot-data`
218dcf3102bSElvina Yakubova
219dcf3102bSElvina Yakubova  Hot data symbols support (relocation mode)
220dcf3102bSElvina Yakubova
221dcf3102bSElvina Yakubova- `--hot-functions-at-end`
222dcf3102bSElvina Yakubova
223dcf3102bSElvina Yakubova  If reorder-functions is used, order functions putting hottest last
224dcf3102bSElvina Yakubova
225dcf3102bSElvina Yakubova- `--hot-text`
226dcf3102bSElvina Yakubova
227dcf3102bSElvina Yakubova  Generate hot text symbols. Apply this option to a precompiled binary that
228765ce869SElvina Yakubova  manually calls into hugify, such that at runtime hugify call will put hot code
229765ce869SElvina Yakubova  into 2M pages. This requires relocation.
230dcf3102bSElvina Yakubova
231dcf3102bSElvina Yakubova- `--hot-text-move-sections=<sec1,sec2,sec3,...>`
232dcf3102bSElvina Yakubova
233dcf3102bSElvina Yakubova  List of sections containing functions used for hugifying hot text. BOLT makes
234dcf3102bSElvina Yakubova  sure these functions are not placed on the same page as the hot text.
235dcf3102bSElvina Yakubova  (default='.stub,.mover').
236dcf3102bSElvina Yakubova
237dcf3102bSElvina Yakubova- `--insert-retpolines`
238dcf3102bSElvina Yakubova
239dcf3102bSElvina Yakubova  Run retpoline insertion pass
240dcf3102bSElvina Yakubova
241dcf3102bSElvina Yakubova- `--keep-aranges`
242dcf3102bSElvina Yakubova
243dcf3102bSElvina Yakubova  Keep or generate .debug_aranges section if .gdb_index is written
244dcf3102bSElvina Yakubova
245dcf3102bSElvina Yakubova- `--keep-tmp`
246dcf3102bSElvina Yakubova
247dcf3102bSElvina Yakubova  Preserve intermediate .o file
248dcf3102bSElvina Yakubova
249dcf3102bSElvina Yakubova- `--lite`
250dcf3102bSElvina Yakubova
251dcf3102bSElvina Yakubova  Skip processing of cold functions
252dcf3102bSElvina Yakubova
25375ac887aSshaw young- `--log-file=<string>`
25475ac887aSshaw young
25575ac887aSshaw young  Redirect journaling to a file instead of stdout/stderr
25675ac887aSshaw young
25775ac887aSshaw young- `--long-jump-labels`
25875ac887aSshaw young
25975ac887aSshaw young  Always use long jumps/nops for Linux kernel static keys
26075ac887aSshaw young
26149fdbbcfSShaw Young- `--match-profile-with-function-hash`
26249fdbbcfSShaw Young
26349fdbbcfSShaw Young  Match profile with function hash
26449fdbbcfSShaw Young
265dcf3102bSElvina Yakubova- `--max-data-relocations=<uint>`
266dcf3102bSElvina Yakubova
267dcf3102bSElvina Yakubova  Maximum number of data relocations to process
268dcf3102bSElvina Yakubova
269dcf3102bSElvina Yakubova- `--max-funcs=<uint>`
270dcf3102bSElvina Yakubova
271dcf3102bSElvina Yakubova  Maximum number of functions to process
272dcf3102bSElvina Yakubova
273dcf3102bSElvina Yakubova- `--no-huge-pages`
274dcf3102bSElvina Yakubova
275dcf3102bSElvina Yakubova  Use regular size pages for code alignment
276dcf3102bSElvina Yakubova
277dcf3102bSElvina Yakubova- `--no-threads`
278dcf3102bSElvina Yakubova
279dcf3102bSElvina Yakubova  Disable multithreading
280dcf3102bSElvina Yakubova
281dcf3102bSElvina Yakubova- `--pad-funcs=<func1:pad1,func2:pad2,func3:pad3,...>`
282dcf3102bSElvina Yakubova
283dcf3102bSElvina Yakubova  List of functions to pad with amount of bytes
284dcf3102bSElvina Yakubova
28534433fdcSPaschalis Mpeis- `--print-mappings`
28634433fdcSPaschalis Mpeis
28734433fdcSPaschalis Mpeis  Print mappings in the legend, between characters/blocks and text sections
28834433fdcSPaschalis Mpeis  (default false).
28934433fdcSPaschalis Mpeis
29034433fdcSPaschalis Mpeis
291dcf3102bSElvina Yakubova- `--profile-format=<value>`
292dcf3102bSElvina Yakubova
293dcf3102bSElvina Yakubova  Format to dump profile output in aggregation mode, default is fdata
294765ce869SElvina Yakubova  - `fdata`: offset-based plaintext format
295765ce869SElvina Yakubova  - `yaml`: dense YAML representation
296dcf3102bSElvina Yakubova
297dcf3102bSElvina Yakubova- `--r11-availability=<value>`
298dcf3102bSElvina Yakubova
299dcf3102bSElvina Yakubova  Determine the availability of r11 before indirect branches
300765ce869SElvina Yakubova  - `never`: r11 not available
301765ce869SElvina Yakubova  - `always`: r11 available before calls and jumps
302765ce869SElvina Yakubova  - `abi`: r11 available before calls but not before jumps
303dcf3102bSElvina Yakubova
304dcf3102bSElvina Yakubova- `--relocs`
305dcf3102bSElvina Yakubova
306dcf3102bSElvina Yakubova  Use relocations in the binary (default=autodetect)
307dcf3102bSElvina Yakubova
308dcf3102bSElvina Yakubova- `--remove-symtab`
309dcf3102bSElvina Yakubova
310dcf3102bSElvina Yakubova  Remove .symtab section
311dcf3102bSElvina Yakubova
312dcf3102bSElvina Yakubova- `--reorder-skip-symbols=<symbol1,symbol2,symbol3,...>`
313dcf3102bSElvina Yakubova
314dcf3102bSElvina Yakubova  List of symbol names that cannot be reordered
315dcf3102bSElvina Yakubova
316dcf3102bSElvina Yakubova- `--reorder-symbols=<symbol1,symbol2,symbol3,...>`
317dcf3102bSElvina Yakubova
318dcf3102bSElvina Yakubova  List of symbol names that can be reordered
319dcf3102bSElvina Yakubova
320dcf3102bSElvina Yakubova- `--retpoline-lfence`
321dcf3102bSElvina Yakubova
322dcf3102bSElvina Yakubova  Determine if lfence instruction should exist in the retpoline
323dcf3102bSElvina Yakubova
324dcf3102bSElvina Yakubova- `--skip-funcs=<func1,func2,func3,...>`
325dcf3102bSElvina Yakubova
326dcf3102bSElvina Yakubova  List of functions to skip
327dcf3102bSElvina Yakubova
328dcf3102bSElvina Yakubova- `--skip-funcs-file=<string>`
329dcf3102bSElvina Yakubova
330dcf3102bSElvina Yakubova  File with list of functions to skip
331dcf3102bSElvina Yakubova
332dcf3102bSElvina Yakubova- `--strict`
333dcf3102bSElvina Yakubova
334dcf3102bSElvina Yakubova  Trust the input to be from a well-formed source
335dcf3102bSElvina Yakubova
336dcf3102bSElvina Yakubova- `--tasks-per-thread=<uint>`
337dcf3102bSElvina Yakubova
338dcf3102bSElvina Yakubova  Number of tasks to be created per thread
339dcf3102bSElvina Yakubova
34075ac887aSshaw young- `--terminal-trap`
34175ac887aSshaw young
34275ac887aSshaw young  Assume that execution stops at trap instruction
34375ac887aSshaw young
344dcf3102bSElvina Yakubova- `--thread-count=<uint>`
345dcf3102bSElvina Yakubova
346dcf3102bSElvina Yakubova  Number of threads
347dcf3102bSElvina Yakubova
348dcf3102bSElvina Yakubova- `--top-called-limit=<uint>`
349dcf3102bSElvina Yakubova
350dcf3102bSElvina Yakubova  Maximum number of functions to print in top called functions section
351dcf3102bSElvina Yakubova
352dcf3102bSElvina Yakubova- `--trap-avx512`
353dcf3102bSElvina Yakubova
354765ce869SElvina Yakubova  In relocation mode trap upon entry to any function that uses AVX-512
355765ce869SElvina Yakubova  instructions
356dcf3102bSElvina Yakubova
357dcf3102bSElvina Yakubova- `--trap-old-code`
358dcf3102bSElvina Yakubova
359dcf3102bSElvina Yakubova  Insert traps in old function bodies (relocation mode)
360dcf3102bSElvina Yakubova
361dcf3102bSElvina Yakubova- `--update-debug-sections`
362dcf3102bSElvina Yakubova
363dcf3102bSElvina Yakubova  Update DWARF debug sections of the executable
364dcf3102bSElvina Yakubova
365dcf3102bSElvina Yakubova- `--use-gnu-stack`
366dcf3102bSElvina Yakubova
367dcf3102bSElvina Yakubova  Use GNU_STACK program header for new segment (workaround for issues with
368dcf3102bSElvina Yakubova  strip/objcopy)
369dcf3102bSElvina Yakubova
370dcf3102bSElvina Yakubova- `--use-old-text`
371dcf3102bSElvina Yakubova
372dcf3102bSElvina Yakubova  Re-use space in old .text if possible (relocation mode)
373dcf3102bSElvina Yakubova
374dcf3102bSElvina Yakubova- `-v <uint>`
375dcf3102bSElvina Yakubova
376dcf3102bSElvina Yakubova  Set verbosity level for diagnostic output
377dcf3102bSElvina Yakubova
378dcf3102bSElvina Yakubova- `--write-dwp`
379dcf3102bSElvina Yakubova
380dcf3102bSElvina Yakubova  Output a single dwarf package file (dwp) instead of multiple non-relocatable
381dcf3102bSElvina Yakubova  dwarf object files (dwo).
382dcf3102bSElvina Yakubova
383765ce869SElvina Yakubova### BOLT optimization options:
384dcf3102bSElvina Yakubova
385dcf3102bSElvina Yakubova- `--align-blocks`
386dcf3102bSElvina Yakubova
387dcf3102bSElvina Yakubova  Align basic blocks
388dcf3102bSElvina Yakubova
389dcf3102bSElvina Yakubova- `--align-blocks-min-size=<uint>`
390dcf3102bSElvina Yakubova
391dcf3102bSElvina Yakubova  Minimal size of the basic block that should be aligned
392dcf3102bSElvina Yakubova
393dcf3102bSElvina Yakubova- `--align-blocks-threshold=<uint>`
394dcf3102bSElvina Yakubova
395dcf3102bSElvina Yakubova  Align only blocks with frequency larger than containing function execution
396dcf3102bSElvina Yakubova  frequency specified in percent. E.g. 1000 means aligning blocks that are 10
397dcf3102bSElvina Yakubova  times more frequently executed than the containing function.
398dcf3102bSElvina Yakubova
399dcf3102bSElvina Yakubova- `--align-functions=<uint>`
400dcf3102bSElvina Yakubova
401dcf3102bSElvina Yakubova  Align functions at a given value (relocation mode)
402dcf3102bSElvina Yakubova
403dcf3102bSElvina Yakubova- `--align-functions-max-bytes=<uint>`
404dcf3102bSElvina Yakubova
405dcf3102bSElvina Yakubova  Maximum number of bytes to use to align functions
406dcf3102bSElvina Yakubova
407dcf3102bSElvina Yakubova- `--assume-abi`
408dcf3102bSElvina Yakubova
409dcf3102bSElvina Yakubova  Assume the ABI is never violated
410dcf3102bSElvina Yakubova
411dcf3102bSElvina Yakubova- `--block-alignment=<uint>`
412dcf3102bSElvina Yakubova
413dcf3102bSElvina Yakubova  Boundary to use for alignment of basic blocks
414dcf3102bSElvina Yakubova
415dcf3102bSElvina Yakubova- `--bolt-seed=<uint>`
416dcf3102bSElvina Yakubova
417dcf3102bSElvina Yakubova  Seed for randomization
418dcf3102bSElvina Yakubova
419dcf3102bSElvina Yakubova- `--cg-from-perf-data`
420dcf3102bSElvina Yakubova
421dcf3102bSElvina Yakubova  Use perf data directly when constructing the call graph for stale functions
422dcf3102bSElvina Yakubova
423dcf3102bSElvina Yakubova- `--cg-ignore-recursive-calls`
424dcf3102bSElvina Yakubova
425dcf3102bSElvina Yakubova  Ignore recursive calls when constructing the call graph
426dcf3102bSElvina Yakubova
427dcf3102bSElvina Yakubova- `--cg-use-split-hot-size`
428dcf3102bSElvina Yakubova
429765ce869SElvina Yakubova  Use hot/cold data on basic blocks to determine hot sizes for call graph
430765ce869SElvina Yakubova  functions
431dcf3102bSElvina Yakubova
432dcf3102bSElvina Yakubova- `--cold-threshold=<uint>`
433dcf3102bSElvina Yakubova
434dcf3102bSElvina Yakubova  Tenths of percents of main entry frequency to use as a threshold when
435765ce869SElvina Yakubova  evaluating whether a basic block is cold (0 means it is only considered cold
436765ce869SElvina Yakubova  if the block has zero samples). Default: 0
437dcf3102bSElvina Yakubova
438dcf3102bSElvina Yakubova- `--elim-link-veneers`
439dcf3102bSElvina Yakubova
440dcf3102bSElvina Yakubova  Run veneer elimination pass
441dcf3102bSElvina Yakubova
442dcf3102bSElvina Yakubova- `--eliminate-unreachable`
443dcf3102bSElvina Yakubova
444dcf3102bSElvina Yakubova  Eliminate unreachable code
445dcf3102bSElvina Yakubova
446dcf3102bSElvina Yakubova- `--equalize-bb-counts`
447dcf3102bSElvina Yakubova
448765ce869SElvina Yakubova  Use same count for BBs that should have equivalent count (used in non-LBR and
449765ce869SElvina Yakubova  shrink wrapping)
450dcf3102bSElvina Yakubova
451dcf3102bSElvina Yakubova- `--execution-count-threshold=<uint>`
452dcf3102bSElvina Yakubova
453dcf3102bSElvina Yakubova  Perform profiling accuracy-sensitive optimizations only if function execution
454dcf3102bSElvina Yakubova  count >= the threshold (default: 0)
455dcf3102bSElvina Yakubova
456dcf3102bSElvina Yakubova- `--fix-block-counts`
457dcf3102bSElvina Yakubova
458dcf3102bSElvina Yakubova  Adjust block counts based on outgoing branch counts
459dcf3102bSElvina Yakubova
460dcf3102bSElvina Yakubova- `--fix-func-counts`
461dcf3102bSElvina Yakubova
462dcf3102bSElvina Yakubova  Adjust function counts based on basic blocks execution count
463dcf3102bSElvina Yakubova
464dcf3102bSElvina Yakubova- `--force-inline=<func1,func2,func3,...>`
465dcf3102bSElvina Yakubova
466dcf3102bSElvina Yakubova  List of functions to always consider for inlining
467dcf3102bSElvina Yakubova
468dcf3102bSElvina Yakubova- `--frame-opt=<value>`
469dcf3102bSElvina Yakubova
470dcf3102bSElvina Yakubova  Optimize stack frame accesses
471dcf3102bSElvina Yakubova  - `none`: do not perform frame optimization
472dcf3102bSElvina Yakubova  - `hot`: perform FOP on hot functions
473dcf3102bSElvina Yakubova  - `all`: perform FOP on all functions
474dcf3102bSElvina Yakubova
475dcf3102bSElvina Yakubova- `--frame-opt-rm-stores`
476dcf3102bSElvina Yakubova
477dcf3102bSElvina Yakubova  Apply additional analysis to remove stores (experimental)
478dcf3102bSElvina Yakubova
479dcf3102bSElvina Yakubova- `--function-order=<string>`
480dcf3102bSElvina Yakubova
481dcf3102bSElvina Yakubova  File containing an ordered list of functions to use for function reordering
482dcf3102bSElvina Yakubova
483dcf3102bSElvina Yakubova- `--generate-function-order=<string>`
484dcf3102bSElvina Yakubova
485dcf3102bSElvina Yakubova  File to dump the ordered list of functions to use for function reordering
486dcf3102bSElvina Yakubova
487dcf3102bSElvina Yakubova- `--generate-link-sections=<string>`
488dcf3102bSElvina Yakubova
489dcf3102bSElvina Yakubova  Generate a list of function sections in a format suitable for inclusion in a
490dcf3102bSElvina Yakubova  linker script
491dcf3102bSElvina Yakubova
492dcf3102bSElvina Yakubova- `--group-stubs`
493dcf3102bSElvina Yakubova
494dcf3102bSElvina Yakubova  Share stubs across functions
495dcf3102bSElvina Yakubova
496dcf3102bSElvina Yakubova- `--hugify`
497dcf3102bSElvina Yakubova
498dcf3102bSElvina Yakubova  Automatically put hot code on 2MB page(s) (hugify) at runtime. No manual call
499dcf3102bSElvina Yakubova  to hugify is needed in the binary (which is what --hot-text relies on).
500dcf3102bSElvina Yakubova
501*3c357a49SAlexander Yermolovich- `--icf=<value>`
502dcf3102bSElvina Yakubova
503dcf3102bSElvina Yakubova  Fold functions with identical code
504*3c357a49SAlexander Yermolovich  - `all`:  Enable identical code folding
505*3c357a49SAlexander Yermolovich  - `none`: Disable identical code folding (default)
506*3c357a49SAlexander Yermolovich  - `safe`: Enable safe identical code folding
507dcf3102bSElvina Yakubova
508dcf3102bSElvina Yakubova- `--icp`
509dcf3102bSElvina Yakubova
510dcf3102bSElvina Yakubova  Alias for --indirect-call-promotion
511dcf3102bSElvina Yakubova
512dcf3102bSElvina Yakubova- `--icp-calls-remaining-percent-threshold=<uint>`
513dcf3102bSElvina Yakubova
514765ce869SElvina Yakubova  The percentage threshold against remaining unpromoted indirect call count for
515765ce869SElvina Yakubova  the promotion for calls
516dcf3102bSElvina Yakubova
517dcf3102bSElvina Yakubova- `--icp-calls-topn`
518dcf3102bSElvina Yakubova
519dcf3102bSElvina Yakubova  Alias for --indirect-call-promotion-calls-topn
520dcf3102bSElvina Yakubova
521dcf3102bSElvina Yakubova- `--icp-calls-total-percent-threshold=<uint>`
522dcf3102bSElvina Yakubova
523dcf3102bSElvina Yakubova  The percentage threshold against total count for the promotion for calls
524dcf3102bSElvina Yakubova
525dcf3102bSElvina Yakubova- `--icp-eliminate-loads`
526dcf3102bSElvina Yakubova
527dcf3102bSElvina Yakubova  Enable load elimination using memory profiling data when performing ICP
528dcf3102bSElvina Yakubova
529dcf3102bSElvina Yakubova- `--icp-funcs=<func1,func2,func3,...>`
530dcf3102bSElvina Yakubova
531dcf3102bSElvina Yakubova  List of functions to enable ICP for
532dcf3102bSElvina Yakubova
533dcf3102bSElvina Yakubova- `--icp-inline`
534dcf3102bSElvina Yakubova
535dcf3102bSElvina Yakubova  Only promote call targets eligible for inlining
536dcf3102bSElvina Yakubova
537dcf3102bSElvina Yakubova- `--icp-jt-remaining-percent-threshold=<uint>`
538dcf3102bSElvina Yakubova
539dcf3102bSElvina Yakubova  The percentage threshold against remaining unpromoted indirect call count for
540dcf3102bSElvina Yakubova  the promotion for jump tables
541dcf3102bSElvina Yakubova
542dcf3102bSElvina Yakubova- `--icp-jt-targets`
543dcf3102bSElvina Yakubova
544dcf3102bSElvina Yakubova  Alias for --icp-jump-tables-targets
545dcf3102bSElvina Yakubova
546dcf3102bSElvina Yakubova- `--icp-jt-topn`
547dcf3102bSElvina Yakubova
548dcf3102bSElvina Yakubova  Alias for --indirect-call-promotion-jump-tables-topn
549dcf3102bSElvina Yakubova
550dcf3102bSElvina Yakubova- `--icp-jt-total-percent-threshold=<uint>`
551dcf3102bSElvina Yakubova
552dcf3102bSElvina Yakubova  The percentage threshold against total count for the promotion for jump tables
553dcf3102bSElvina Yakubova
554dcf3102bSElvina Yakubova- `--icp-jump-tables-targets`
555dcf3102bSElvina Yakubova
556dcf3102bSElvina Yakubova  For jump tables, optimize indirect jmp targets instead of indices
557dcf3102bSElvina Yakubova
558dcf3102bSElvina Yakubova- `--icp-mp-threshold`
559dcf3102bSElvina Yakubova
560dcf3102bSElvina Yakubova  Alias for --indirect-call-promotion-mispredict-threshold
561dcf3102bSElvina Yakubova
562dcf3102bSElvina Yakubova- `--icp-old-code-sequence`
563dcf3102bSElvina Yakubova
564dcf3102bSElvina Yakubova  Use old code sequence for promoted calls
565dcf3102bSElvina Yakubova
566dcf3102bSElvina Yakubova- `--icp-top-callsites=<uint>`
567dcf3102bSElvina Yakubova
568dcf3102bSElvina Yakubova  Optimize hottest calls until at least this percentage of all indirect calls
569dcf3102bSElvina Yakubova  frequency is covered. 0 = all callsites
570dcf3102bSElvina Yakubova
571dcf3102bSElvina Yakubova- `--icp-topn`
572dcf3102bSElvina Yakubova
573dcf3102bSElvina Yakubova  Alias for --indirect-call-promotion-topn
574dcf3102bSElvina Yakubova
575dcf3102bSElvina Yakubova- `--icp-use-mp`
576dcf3102bSElvina Yakubova
577dcf3102bSElvina Yakubova  Alias for --indirect-call-promotion-use-mispredicts
578dcf3102bSElvina Yakubova
579dcf3102bSElvina Yakubova- `--indirect-call-promotion=<value>`
580dcf3102bSElvina Yakubova
581dcf3102bSElvina Yakubova  Indirect call promotion
582dcf3102bSElvina Yakubova  - `none`: do not perform indirect call promotion
583dcf3102bSElvina Yakubova  - `calls`: perform ICP on indirect calls
584dcf3102bSElvina Yakubova  - `jump-tables`: perform ICP on jump tables
585dcf3102bSElvina Yakubova  - `all`: perform ICP on calls and jump tables
586dcf3102bSElvina Yakubova
587dcf3102bSElvina Yakubova- `--indirect-call-promotion-calls-topn=<uint>`
588dcf3102bSElvina Yakubova
589dcf3102bSElvina Yakubova  Limit number of targets to consider when doing indirect call promotion on
590dcf3102bSElvina Yakubova  calls. 0 = no limit
591dcf3102bSElvina Yakubova
592dcf3102bSElvina Yakubova- `--indirect-call-promotion-jump-tables-topn=<uint>`
593dcf3102bSElvina Yakubova
594765ce869SElvina Yakubova  Limit number of targets to consider when doing indirect call promotion on jump
595765ce869SElvina Yakubova  tables. 0 = no limit
596dcf3102bSElvina Yakubova
597dcf3102bSElvina Yakubova- `--indirect-call-promotion-topn=<uint>`
598dcf3102bSElvina Yakubova
599765ce869SElvina Yakubova  Limit number of targets to consider when doing indirect call promotion. 0 = no
600765ce869SElvina Yakubova  limit
601dcf3102bSElvina Yakubova
602dcf3102bSElvina Yakubova- `--indirect-call-promotion-use-mispredicts`
603dcf3102bSElvina Yakubova
604dcf3102bSElvina Yakubova  Use misprediction frequency for determining whether or not ICP should be
605765ce869SElvina Yakubova  applied at a callsite.  The -indirect-call-promotion-mispredict-threshold
606dcf3102bSElvina Yakubova  value will be used by this heuristic
607dcf3102bSElvina Yakubova
608dcf3102bSElvina Yakubova- `--infer-fall-throughs`
609dcf3102bSElvina Yakubova
610dcf3102bSElvina Yakubova  Infer execution count for fall-through blocks
611dcf3102bSElvina Yakubova
612dcf3102bSElvina Yakubova- `--infer-stale-profile`
613dcf3102bSElvina Yakubova
614dcf3102bSElvina Yakubova  Infer counts from stale profile data.
615dcf3102bSElvina Yakubova
616dcf3102bSElvina Yakubova- `--inline-all`
617dcf3102bSElvina Yakubova
618dcf3102bSElvina Yakubova  Inline all functions
619dcf3102bSElvina Yakubova
620dcf3102bSElvina Yakubova- `--inline-ap`
621dcf3102bSElvina Yakubova
622dcf3102bSElvina Yakubova  Adjust function profile after inlining
623dcf3102bSElvina Yakubova
624dcf3102bSElvina Yakubova- `--inline-limit=<uint>`
625dcf3102bSElvina Yakubova
626dcf3102bSElvina Yakubova  Maximum number of call sites to inline
627dcf3102bSElvina Yakubova
628dcf3102bSElvina Yakubova- `--inline-max-iters=<uint>`
629dcf3102bSElvina Yakubova
630dcf3102bSElvina Yakubova  Maximum number of inline iterations
631dcf3102bSElvina Yakubova
632dcf3102bSElvina Yakubova- `--inline-memcpy`
633dcf3102bSElvina Yakubova
634dcf3102bSElvina Yakubova  Inline memcpy using 'rep movsb' instruction (X86-only)
635dcf3102bSElvina Yakubova
636dcf3102bSElvina Yakubova- `--inline-small-functions`
637dcf3102bSElvina Yakubova
638765ce869SElvina Yakubova  Inline functions if increase in size is less than defined by -inline-small-
639765ce869SElvina Yakubova  functions-bytes
640dcf3102bSElvina Yakubova
641dcf3102bSElvina Yakubova- `--inline-small-functions-bytes=<uint>`
642dcf3102bSElvina Yakubova
643765ce869SElvina Yakubova  Max number of bytes for the function to be considered small for inlining
644765ce869SElvina Yakubova  purposes
645dcf3102bSElvina Yakubova
646dcf3102bSElvina Yakubova- `--instrument`
647dcf3102bSElvina Yakubova
648dcf3102bSElvina Yakubova  Instrument code to generate accurate profile data
649dcf3102bSElvina Yakubova
650dcf3102bSElvina Yakubova- `--iterative-guess`
651dcf3102bSElvina Yakubova
652dcf3102bSElvina Yakubova  In non-LBR mode, guess edge counts using iterative technique
653dcf3102bSElvina Yakubova
654dcf3102bSElvina Yakubova- `--jt-footprint-optimize-for-icache`
655dcf3102bSElvina Yakubova
656dcf3102bSElvina Yakubova  With jt-footprint-reduction, only process PIC jumptables and turn off other
657dcf3102bSElvina Yakubova  transformations that increase code size
658dcf3102bSElvina Yakubova
659dcf3102bSElvina Yakubova- `--jt-footprint-reduction`
660dcf3102bSElvina Yakubova
661dcf3102bSElvina Yakubova  Make jump tables size smaller at the cost of using more instructions at jump
662dcf3102bSElvina Yakubova  sites
663dcf3102bSElvina Yakubova
664765ce869SElvina Yakubova- `--jump-tables=<value>`
665dcf3102bSElvina Yakubova
666dcf3102bSElvina Yakubova  Jump tables support (default=basic)
667dcf3102bSElvina Yakubova  - `none`: do not optimize functions with jump tables
668dcf3102bSElvina Yakubova  - `basic`: optimize functions with jump tables
669dcf3102bSElvina Yakubova  - `move`: move jump tables to a separate section
670dcf3102bSElvina Yakubova  - `split`: split jump tables section into hot and cold based on function
671dcf3102bSElvina Yakubova  execution frequency
672dcf3102bSElvina Yakubova  - `aggressive`: aggressively split jump tables section based on usage of the
673dcf3102bSElvina Yakubova  tables
674dcf3102bSElvina Yakubova
675dcf3102bSElvina Yakubova- `--keep-nops`
676dcf3102bSElvina Yakubova
677dcf3102bSElvina Yakubova  Keep no-op instructions. By default they are removed.
678dcf3102bSElvina Yakubova
679dcf3102bSElvina Yakubova- `--lite-threshold-count=<uint>`
680dcf3102bSElvina Yakubova
681dcf3102bSElvina Yakubova  Similar to '-lite-threshold-pct' but specify threshold using absolute function
682dcf3102bSElvina Yakubova  call count. I.e. limit processing to functions executed at least the specified
683dcf3102bSElvina Yakubova  number of times.
684dcf3102bSElvina Yakubova
685dcf3102bSElvina Yakubova- `--lite-threshold-pct=<uint>`
686dcf3102bSElvina Yakubova
687dcf3102bSElvina Yakubova  Threshold (in percent) for selecting functions to process in lite mode. Higher
688dcf3102bSElvina Yakubova  threshold means fewer functions to process. E.g threshold of 90 means only top
689dcf3102bSElvina Yakubova  10 percent of functions with profile will be processed.
690dcf3102bSElvina Yakubova
691296a9563SShaw Young- `--match-with-call-graph`
692296a9563SShaw Young
693296a9563SShaw Young  Match functions with call graph
694296a9563SShaw Young
695dcf3102bSElvina Yakubova- `--memcpy1-spec=<func1,func2:cs1:cs2,func3:cs1,...>`
696dcf3102bSElvina Yakubova
697dcf3102bSElvina Yakubova  List of functions with call sites for which to specialize memcpy() for size 1
698dcf3102bSElvina Yakubova
699dcf3102bSElvina Yakubova- `--min-branch-clusters`
700dcf3102bSElvina Yakubova
701dcf3102bSElvina Yakubova  Use a modified clustering algorithm geared towards minimizing branches
702dcf3102bSElvina Yakubova
70397dc5088SShaw Young- `--name-similarity-function-matching-threshold=<uint>`
70497dc5088SShaw Young
70597dc5088SShaw Young  Match functions using namespace and edit distance.
70697dc5088SShaw Young
707dcf3102bSElvina Yakubova- `--no-inline`
708dcf3102bSElvina Yakubova
709dcf3102bSElvina Yakubova  Disable all inlining (overrides other inlining options)
710dcf3102bSElvina Yakubova
711dcf3102bSElvina Yakubova- `--no-scan`
712dcf3102bSElvina Yakubova
713dcf3102bSElvina Yakubova  Do not scan cold functions for external references (may result in slower binary)
714dcf3102bSElvina Yakubova
715dcf3102bSElvina Yakubova- `--peepholes=<value>`
716dcf3102bSElvina Yakubova
717dcf3102bSElvina Yakubova  Enable peephole optimizations
718dcf3102bSElvina Yakubova  - `none`: disable peepholes
719dcf3102bSElvina Yakubova  - `double-jumps`: remove double jumps when able
720dcf3102bSElvina Yakubova  - `tailcall-traps`: insert tail call traps
721dcf3102bSElvina Yakubova  - `useless-branches`: remove useless conditional branches
722dcf3102bSElvina Yakubova  - `all`: enable all peephole optimizations
723dcf3102bSElvina Yakubova
724dcf3102bSElvina Yakubova- `--plt=<value>`
725dcf3102bSElvina Yakubova
726dcf3102bSElvina Yakubova  Optimize PLT calls (requires linking with -znow)
727dcf3102bSElvina Yakubova  - `none`: do not optimize PLT calls
728dcf3102bSElvina Yakubova  - `hot`: optimize executed (hot) PLT calls
729dcf3102bSElvina Yakubova  - `all`: optimize all PLT calls
730dcf3102bSElvina Yakubova
731dcf3102bSElvina Yakubova- `--preserve-blocks-alignment`
732dcf3102bSElvina Yakubova
733dcf3102bSElvina Yakubova  Try to preserve basic block alignment
734dcf3102bSElvina Yakubova
735dcf3102bSElvina Yakubova- `--profile-ignore-hash`
736dcf3102bSElvina Yakubova
737dcf3102bSElvina Yakubova  Ignore hash while reading function profile
738dcf3102bSElvina Yakubova
739dcf3102bSElvina Yakubova- `--profile-use-dfs`
740dcf3102bSElvina Yakubova
741dcf3102bSElvina Yakubova  Use DFS order for YAML profile
742dcf3102bSElvina Yakubova
743dcf3102bSElvina Yakubova- `--reg-reassign`
744dcf3102bSElvina Yakubova
745dcf3102bSElvina Yakubova  Reassign registers so as to avoid using REX prefixes in hot code
746dcf3102bSElvina Yakubova
747dcf3102bSElvina Yakubova- `--reorder-blocks=<value>`
748dcf3102bSElvina Yakubova
749dcf3102bSElvina Yakubova  Change layout of basic blocks in a function
750dcf3102bSElvina Yakubova  - `none`: do not reorder basic blocks
751dcf3102bSElvina Yakubova  - `reverse`: layout blocks in reverse order
752dcf3102bSElvina Yakubova  - `normal`: perform optimal layout based on profile
753dcf3102bSElvina Yakubova  - `branch-predictor`: perform optimal layout prioritizing branch predictions
754dcf3102bSElvina Yakubova  - `cache`: perform optimal layout prioritizing I-cache behavior
755dcf3102bSElvina Yakubova  - `cache+`: perform layout optimizing I-cache behavior
756dcf3102bSElvina Yakubova  - `ext-tsp`: perform layout optimizing I-cache behavior
757dcf3102bSElvina Yakubova  - `cluster-shuffle`: perform random layout of clusters
758dcf3102bSElvina Yakubova
759dcf3102bSElvina Yakubova- `--reorder-data=<section1,section2,section3,...>`
760dcf3102bSElvina Yakubova
761dcf3102bSElvina Yakubova  List of sections to reorder
762dcf3102bSElvina Yakubova
763dcf3102bSElvina Yakubova- `--reorder-data-algo=<value>`
764dcf3102bSElvina Yakubova
765dcf3102bSElvina Yakubova  Algorithm used to reorder data sections
766dcf3102bSElvina Yakubova  - `count`: sort hot data by read counts
767dcf3102bSElvina Yakubova  - `funcs`: sort hot data by hot function usage and count
768dcf3102bSElvina Yakubova
769dcf3102bSElvina Yakubova- `--reorder-data-inplace`
770dcf3102bSElvina Yakubova
771dcf3102bSElvina Yakubova  Reorder data sections in place
772dcf3102bSElvina Yakubova
773dcf3102bSElvina Yakubova- `--reorder-data-max-bytes=<uint>`
774dcf3102bSElvina Yakubova
775dcf3102bSElvina Yakubova  Maximum number of bytes to reorder
776dcf3102bSElvina Yakubova
777dcf3102bSElvina Yakubova- `--reorder-data-max-symbols=<uint>`
778dcf3102bSElvina Yakubova
779dcf3102bSElvina Yakubova  Maximum number of symbols to reorder
780dcf3102bSElvina Yakubova
781dcf3102bSElvina Yakubova- `--reorder-functions=<value>`
782dcf3102bSElvina Yakubova
783dcf3102bSElvina Yakubova  Reorder and cluster functions (works only with relocations)
784dcf3102bSElvina Yakubova  - `none`: do not reorder functions
785dcf3102bSElvina Yakubova  - `exec-count`: order by execution count
786dcf3102bSElvina Yakubova  - `hfsort`: use hfsort algorithm
78775ac887aSshaw young  - `hfsort+`: use cache-directed sort
788dcf3102bSElvina Yakubova  - `cdsort`: use cache-directed sort
789dcf3102bSElvina Yakubova  - `pettis-hansen`: use Pettis-Hansen algorithm
790dcf3102bSElvina Yakubova  - `random`: reorder functions randomly
791dcf3102bSElvina Yakubova  - `user`: use function order specified by -function-order
792dcf3102bSElvina Yakubova
793dcf3102bSElvina Yakubova- `--reorder-functions-use-hot-size`
794dcf3102bSElvina Yakubova
795dcf3102bSElvina Yakubova  Use a function's hot size when doing clustering
796dcf3102bSElvina Yakubova
797dcf3102bSElvina Yakubova- `--report-bad-layout=<uint>`
798dcf3102bSElvina Yakubova
799dcf3102bSElvina Yakubova  Print top <uint> functions with suboptimal code layout on input
800dcf3102bSElvina Yakubova
801dcf3102bSElvina Yakubova- `--report-stale`
802dcf3102bSElvina Yakubova
803dcf3102bSElvina Yakubova  Print the list of functions with stale profile
804dcf3102bSElvina Yakubova
805dcf3102bSElvina Yakubova- `--runtime-hugify-lib=<string>`
806dcf3102bSElvina Yakubova
807dcf3102bSElvina Yakubova  Specify file name of the runtime hugify library
808dcf3102bSElvina Yakubova
809dcf3102bSElvina Yakubova- `--runtime-instrumentation-lib=<string>`
810dcf3102bSElvina Yakubova
811dcf3102bSElvina Yakubova  Specify file name of the runtime instrumentation library
812dcf3102bSElvina Yakubova
813dcf3102bSElvina Yakubova- `--sctc-mode=<value>`
814dcf3102bSElvina Yakubova
815dcf3102bSElvina Yakubova  Mode for simplify conditional tail calls
816dcf3102bSElvina Yakubova  - `always`: always perform sctc
817dcf3102bSElvina Yakubova  - `preserve`: only perform sctc when branch direction is preserved
818dcf3102bSElvina Yakubova  - `heuristic`: use branch prediction data to control sctc
819dcf3102bSElvina Yakubova
820dcf3102bSElvina Yakubova- `--sequential-disassembly`
821dcf3102bSElvina Yakubova
822dcf3102bSElvina Yakubova  Performs disassembly sequentially
823dcf3102bSElvina Yakubova
824dcf3102bSElvina Yakubova- `--shrink-wrapping-threshold=<uint>`
825dcf3102bSElvina Yakubova
826dcf3102bSElvina Yakubova  Percentage of prologue execution count to use as threshold when evaluating
827dcf3102bSElvina Yakubova  whether a block is cold enough to be profitable to move eligible spills there
828dcf3102bSElvina Yakubova
829dcf3102bSElvina Yakubova- `--simplify-conditional-tail-calls`
830dcf3102bSElvina Yakubova
831dcf3102bSElvina Yakubova  Simplify conditional tail calls by removing unnecessary jumps
832dcf3102bSElvina Yakubova
833dcf3102bSElvina Yakubova- `--simplify-rodata-loads`
834dcf3102bSElvina Yakubova
835dcf3102bSElvina Yakubova  Simplify loads from read-only sections by replacing the memory operand with
836dcf3102bSElvina Yakubova  the constant found in the corresponding section
837dcf3102bSElvina Yakubova
838dcf3102bSElvina Yakubova- `--split-align-threshold=<uint>`
839dcf3102bSElvina Yakubova
840dcf3102bSElvina Yakubova  When deciding to split a function, apply this alignment while doing the size
841dcf3102bSElvina Yakubova  comparison (see -split-threshold). Default value: 2.
842dcf3102bSElvina Yakubova
843dcf3102bSElvina Yakubova- `--split-all-cold`
844dcf3102bSElvina Yakubova
845dcf3102bSElvina Yakubova  Outline as many cold basic blocks as possible
846dcf3102bSElvina Yakubova
847dcf3102bSElvina Yakubova- `--split-eh`
848dcf3102bSElvina Yakubova
849dcf3102bSElvina Yakubova  Split C++ exception handling code
850dcf3102bSElvina Yakubova
851dcf3102bSElvina Yakubova- `--split-functions`
852dcf3102bSElvina Yakubova
853dcf3102bSElvina Yakubova  Split functions into fragments
854dcf3102bSElvina Yakubova
855dcf3102bSElvina Yakubova- `--split-strategy=<value>`
856dcf3102bSElvina Yakubova
857dcf3102bSElvina Yakubova  Strategy used to partition blocks into fragments
858765ce869SElvina Yakubova  - `profile2`: split each function into a hot and cold fragment using profiling
859765ce869SElvina Yakubova  information
860dcf3102bSElvina Yakubova  - `cdsplit`: split each function into a hot, warm, and cold fragment using
861dcf3102bSElvina Yakubova  profiling information
862dcf3102bSElvina Yakubova  - `random2`: split each function into a hot and cold fragment at a randomly
863dcf3102bSElvina Yakubova  chosen split point (ignoring any available profiling information)
864765ce869SElvina Yakubova  - `randomN`: split each function into N fragments at a randomly chosen split
865dcf3102bSElvina Yakubova  points (ignoring any available profiling information)
866765ce869SElvina Yakubova  - `all`: split all basic blocks of each function into fragments such that each
867765ce869SElvina Yakubova  fragment contains exactly a single basic block
868dcf3102bSElvina Yakubova
869dcf3102bSElvina Yakubova- `--split-threshold=<uint>`
870dcf3102bSElvina Yakubova
871dcf3102bSElvina Yakubova  Split function only if its main size is reduced by more than given amount of
872765ce869SElvina Yakubova  bytes. Default value: 0, i.e. split iff the size is reduced. Note that on some
873765ce869SElvina Yakubova  architectures the size can increase after splitting.
874dcf3102bSElvina Yakubova
875dcf3102bSElvina Yakubova- `--stale-matching-max-func-size=<uint>`
876dcf3102bSElvina Yakubova
877dcf3102bSElvina Yakubova  The maximum size of a function to consider for inference.
878dcf3102bSElvina Yakubova
87968fc8dffSshaw young- `--stale-matching-min-matched-block=<uint>`
88068fc8dffSshaw young
88175ac887aSshaw young  Percentage threshold of matched basic blocks at which stale profile inference
88275ac887aSshaw young  is executed.
88368fc8dffSshaw young
884dcf3102bSElvina Yakubova- `--stale-threshold=<uint>`
885dcf3102bSElvina Yakubova
886dcf3102bSElvina Yakubova  Maximum percentage of stale functions to tolerate (default: 100)
887dcf3102bSElvina Yakubova
888dcf3102bSElvina Yakubova- `--stoke`
889dcf3102bSElvina Yakubova
890dcf3102bSElvina Yakubova  Turn on the stoke analysis
891dcf3102bSElvina Yakubova
892dcf3102bSElvina Yakubova- `--strip-rep-ret`
893dcf3102bSElvina Yakubova
894dcf3102bSElvina Yakubova  Strip 'repz' prefix from 'repz retq' sequence (on by default)
895dcf3102bSElvina Yakubova
896dcf3102bSElvina Yakubova- `--tail-duplication=<value>`
897dcf3102bSElvina Yakubova
898dcf3102bSElvina Yakubova  Duplicate unconditional branches that cross a cache line
899765ce869SElvina Yakubova  - `none`: do not apply
900765ce869SElvina Yakubova  - `aggressive`: aggressive strategy
901765ce869SElvina Yakubova  - `moderate`: moderate strategy
902765ce869SElvina Yakubova  - `cache`: cache-aware duplication strategy
903dcf3102bSElvina Yakubova
904dcf3102bSElvina Yakubova- `--tsp-threshold=<uint>`
905dcf3102bSElvina Yakubova
906765ce869SElvina Yakubova  Maximum number of hot basic blocks in a function for which to use a precise
907765ce869SElvina Yakubova  TSP solution while re-ordering basic blocks
908dcf3102bSElvina Yakubova
909dcf3102bSElvina Yakubova- `--use-aggr-reg-reassign`
910dcf3102bSElvina Yakubova
911765ce869SElvina Yakubova  Use register liveness analysis to try to find more opportunities for -reg-
912765ce869SElvina Yakubova  reassign optimization
913dcf3102bSElvina Yakubova
914dcf3102bSElvina Yakubova- `--use-compact-aligner`
915dcf3102bSElvina Yakubova
916dcf3102bSElvina Yakubova  Use compact approach for aligning functions
917dcf3102bSElvina Yakubova
918dcf3102bSElvina Yakubova- `--use-edge-counts`
919dcf3102bSElvina Yakubova
920dcf3102bSElvina Yakubova  Use edge count data when doing clustering
921dcf3102bSElvina Yakubova
922dcf3102bSElvina Yakubova- `--verify-cfg`
923dcf3102bSElvina Yakubova
924dcf3102bSElvina Yakubova  Verify the CFG after every pass
925dcf3102bSElvina Yakubova
926dcf3102bSElvina Yakubova- `--x86-align-branch-boundary-hot-only`
927dcf3102bSElvina Yakubova
928dcf3102bSElvina Yakubova  Only apply branch boundary alignment in hot code
929dcf3102bSElvina Yakubova
93075ac887aSshaw young- `--x86-strip-redundant-address-size`
93175ac887aSshaw young
93275ac887aSshaw young  Remove redundant Address-Size override prefix
93375ac887aSshaw young
934765ce869SElvina Yakubova### BOLT instrumentation options:
935dcf3102bSElvina Yakubova
936dcf3102bSElvina Yakubova`llvm-bolt <executable> -instrument [-o outputfile] <instrumented-executable>`
937dcf3102bSElvina Yakubova
938dcf3102bSElvina Yakubova- `--conservative-instrumentation`
939dcf3102bSElvina Yakubova
940dcf3102bSElvina Yakubova  Disable instrumentation optimizations that sacrifice profile accuracy (for
941dcf3102bSElvina Yakubova  debugging, default: false)
942dcf3102bSElvina Yakubova
943dcf3102bSElvina Yakubova- `--instrument-calls`
944dcf3102bSElvina Yakubova
945dcf3102bSElvina Yakubova  Record profile for inter-function control flow activity (default: true)
946dcf3102bSElvina Yakubova
947dcf3102bSElvina Yakubova- `--instrument-hot-only`
948dcf3102bSElvina Yakubova
949dcf3102bSElvina Yakubova  Only insert instrumentation on hot functions (needs profile, default: false)
950dcf3102bSElvina Yakubova
951dcf3102bSElvina Yakubova- `--instrumentation-binpath=<string>`
952dcf3102bSElvina Yakubova
953dcf3102bSElvina Yakubova  Path to instrumented binary in case if /proc/self/map_files is not accessible
954dcf3102bSElvina Yakubova  due to access restriction issues
955dcf3102bSElvina Yakubova
956dcf3102bSElvina Yakubova- `--instrumentation-file=<string>`
957dcf3102bSElvina Yakubova
958dcf3102bSElvina Yakubova  File name where instrumented profile will be saved (default: /tmp/prof.fdata)
959dcf3102bSElvina Yakubova
960dcf3102bSElvina Yakubova- `--instrumentation-file-append-pid`
961dcf3102bSElvina Yakubova
962dcf3102bSElvina Yakubova  Append PID to saved profile file name (default: false)
963dcf3102bSElvina Yakubova
964dcf3102bSElvina Yakubova- `--instrumentation-no-counters-clear`
965dcf3102bSElvina Yakubova
966765ce869SElvina Yakubova  Don't clear counters across dumps (use with instrumentation-sleep-time option)
967dcf3102bSElvina Yakubova
968dcf3102bSElvina Yakubova- `--instrumentation-sleep-time=<uint>`
969dcf3102bSElvina Yakubova
970dcf3102bSElvina Yakubova  Interval between profile writes (default: 0 = write only at program end).
971dcf3102bSElvina Yakubova  This is useful for service workloads when you want to dump profile every X
972765ce869SElvina Yakubova  minutes or if you are killing the program and the profile is not being dumped
973765ce869SElvina Yakubova  at the end.
974dcf3102bSElvina Yakubova
975dcf3102bSElvina Yakubova- `--instrumentation-wait-forks`
976dcf3102bSElvina Yakubova
977dcf3102bSElvina Yakubova  Wait until all forks of instrumented process will finish (use with
978765ce869SElvina Yakubova  instrumentation-sleep-time option)
979dcf3102bSElvina Yakubova
980765ce869SElvina Yakubova### BOLT printing options:
981dcf3102bSElvina Yakubova
982dcf3102bSElvina Yakubova- `--print-aliases`
983dcf3102bSElvina Yakubova
984dcf3102bSElvina Yakubova  Print aliases when printing objects
985dcf3102bSElvina Yakubova
986dcf3102bSElvina Yakubova- `--print-all`
987dcf3102bSElvina Yakubova
988dcf3102bSElvina Yakubova  Print functions after each stage
989dcf3102bSElvina Yakubova
990dcf3102bSElvina Yakubova- `--print-cfg`
991dcf3102bSElvina Yakubova
992dcf3102bSElvina Yakubova  Print functions after CFG construction
993dcf3102bSElvina Yakubova
994dcf3102bSElvina Yakubova- `--print-debug-info`
995dcf3102bSElvina Yakubova
996dcf3102bSElvina Yakubova  Print debug info when printing functions
997dcf3102bSElvina Yakubova
998dcf3102bSElvina Yakubova- `--print-disasm`
999dcf3102bSElvina Yakubova
1000dcf3102bSElvina Yakubova  Print function after disassembly
1001dcf3102bSElvina Yakubova
1002dcf3102bSElvina Yakubova- `--print-dyno-opcode-stats=<uint>`
1003dcf3102bSElvina Yakubova
1004dcf3102bSElvina Yakubova  Print per instruction opcode dyno stats and the functionnames:BB offsets of
1005dcf3102bSElvina Yakubova  the nth highest execution counts
1006dcf3102bSElvina Yakubova
1007dcf3102bSElvina Yakubova- `--print-dyno-stats-only`
1008dcf3102bSElvina Yakubova
1009dcf3102bSElvina Yakubova  While printing functions output dyno-stats and skip instructions
1010dcf3102bSElvina Yakubova
1011dcf3102bSElvina Yakubova- `--print-exceptions`
1012dcf3102bSElvina Yakubova
1013dcf3102bSElvina Yakubova  Print exception handling data
1014dcf3102bSElvina Yakubova
1015dcf3102bSElvina Yakubova- `--print-globals`
1016dcf3102bSElvina Yakubova
1017dcf3102bSElvina Yakubova  Print global symbols after disassembly
1018dcf3102bSElvina Yakubova
1019dcf3102bSElvina Yakubova- `--print-jump-tables`
1020dcf3102bSElvina Yakubova
1021dcf3102bSElvina Yakubova  Print jump tables
1022dcf3102bSElvina Yakubova
1023dcf3102bSElvina Yakubova- `--print-loops`
1024dcf3102bSElvina Yakubova
1025dcf3102bSElvina Yakubova  Print loop related information
1026dcf3102bSElvina Yakubova
1027dcf3102bSElvina Yakubova- `--print-mem-data`
1028dcf3102bSElvina Yakubova
1029dcf3102bSElvina Yakubova  Print memory data annotations when printing functions
1030dcf3102bSElvina Yakubova
1031dcf3102bSElvina Yakubova- `--print-normalized`
1032dcf3102bSElvina Yakubova
1033dcf3102bSElvina Yakubova  Print functions after CFG is normalized
1034dcf3102bSElvina Yakubova
1035dcf3102bSElvina Yakubova- `--print-only=<func1,func2,func3,...>`
1036dcf3102bSElvina Yakubova
1037dcf3102bSElvina Yakubova  List of functions to print
1038dcf3102bSElvina Yakubova
1039dcf3102bSElvina Yakubova- `--print-orc`
1040dcf3102bSElvina Yakubova
1041dcf3102bSElvina Yakubova  Print ORC unwind information for instructions
1042dcf3102bSElvina Yakubova
1043dcf3102bSElvina Yakubova- `--print-profile`
1044dcf3102bSElvina Yakubova
1045dcf3102bSElvina Yakubova  Print functions after attaching profile
1046dcf3102bSElvina Yakubova
1047dcf3102bSElvina Yakubova- `--print-profile-stats`
1048dcf3102bSElvina Yakubova
1049dcf3102bSElvina Yakubova  Print profile quality/bias analysis
1050dcf3102bSElvina Yakubova
1051dcf3102bSElvina Yakubova- `--print-pseudo-probes=<value>`
1052dcf3102bSElvina Yakubova
1053dcf3102bSElvina Yakubova  Print pseudo probe info
1054765ce869SElvina Yakubova  - `decode`: decode probes section from binary
1055765ce869SElvina Yakubova  - `address_conversion`: update address2ProbesMap with output block address
1056765ce869SElvina Yakubova  - `encoded_probes`: display the encoded probes in binary section
1057765ce869SElvina Yakubova  - `all`: enable all debugging printout
1058dcf3102bSElvina Yakubova
1059dcf3102bSElvina Yakubova- `--print-relocations`
1060dcf3102bSElvina Yakubova
1061dcf3102bSElvina Yakubova  Print relocations when printing functions/objects
1062dcf3102bSElvina Yakubova
1063dcf3102bSElvina Yakubova- `--print-reordered-data`
1064dcf3102bSElvina Yakubova
1065dcf3102bSElvina Yakubova  Print section contents after reordering
1066dcf3102bSElvina Yakubova
1067dcf3102bSElvina Yakubova- `--print-retpoline-insertion`
1068dcf3102bSElvina Yakubova
1069dcf3102bSElvina Yakubova  Print functions after retpoline insertion pass
1070dcf3102bSElvina Yakubova
1071dcf3102bSElvina Yakubova- `--print-sdt`
1072dcf3102bSElvina Yakubova
1073dcf3102bSElvina Yakubova  Print all SDT markers
1074dcf3102bSElvina Yakubova
1075dcf3102bSElvina Yakubova- `--print-sections`
1076dcf3102bSElvina Yakubova
1077dcf3102bSElvina Yakubova  Print all registered sections
1078dcf3102bSElvina Yakubova
1079dcf3102bSElvina Yakubova- `--print-unknown`
1080dcf3102bSElvina Yakubova
1081dcf3102bSElvina Yakubova  Print names of functions with unknown control flow
1082dcf3102bSElvina Yakubova
1083765ce869SElvina Yakubova- `--time-build`
1084dcf3102bSElvina Yakubova
1085765ce869SElvina Yakubova  Print time spent constructing binary functions
1086dcf3102bSElvina Yakubova
1087765ce869SElvina Yakubova- `--time-rewrite`
1088765ce869SElvina Yakubova
1089765ce869SElvina Yakubova  Print time spent in rewriting passes
1090dcf3102bSElvina Yakubova
1091dcf3102bSElvina Yakubova- `--print-after-branch-fixup`
1092dcf3102bSElvina Yakubova
1093dcf3102bSElvina Yakubova  Print function after fixing local branches
1094dcf3102bSElvina Yakubova
1095dcf3102bSElvina Yakubova- `--print-after-jt-footprint-reduction`
1096dcf3102bSElvina Yakubova
1097dcf3102bSElvina Yakubova  Print function after jt-footprint-reduction pass
1098dcf3102bSElvina Yakubova
1099dcf3102bSElvina Yakubova- `--print-after-lowering`
1100dcf3102bSElvina Yakubova
1101dcf3102bSElvina Yakubova  Print function after instruction lowering
1102dcf3102bSElvina Yakubova
1103dcf3102bSElvina Yakubova- `--print-cache-metrics`
1104dcf3102bSElvina Yakubova
1105dcf3102bSElvina Yakubova  Calculate and print various metrics for instruction cache
1106dcf3102bSElvina Yakubova
1107dcf3102bSElvina Yakubova- `--print-clusters`
1108dcf3102bSElvina Yakubova
1109dcf3102bSElvina Yakubova  Print clusters
1110dcf3102bSElvina Yakubova
111175ac887aSshaw young- `--print-estimate-edge-counts`
111275ac887aSshaw young
111375ac887aSshaw young  Print function after edge counts are set for no-LBR profile
111475ac887aSshaw young
1115dcf3102bSElvina Yakubova- `--print-finalized`
1116dcf3102bSElvina Yakubova
1117dcf3102bSElvina Yakubova  Print function after CFG is finalized
1118dcf3102bSElvina Yakubova
1119dcf3102bSElvina Yakubova- `--print-fix-relaxations`
1120dcf3102bSElvina Yakubova
1121dcf3102bSElvina Yakubova  Print functions after fix relaxations pass
1122dcf3102bSElvina Yakubova
1123dcf3102bSElvina Yakubova- `--print-fix-riscv-calls`
1124dcf3102bSElvina Yakubova
1125dcf3102bSElvina Yakubova  Print functions after fix RISCV calls pass
1126dcf3102bSElvina Yakubova
1127dcf3102bSElvina Yakubova- `--print-fop`
1128dcf3102bSElvina Yakubova
1129dcf3102bSElvina Yakubova  Print functions after frame optimizer pass
1130dcf3102bSElvina Yakubova
1131dcf3102bSElvina Yakubova- `--print-function-statistics=<uint>`
1132dcf3102bSElvina Yakubova
1133dcf3102bSElvina Yakubova  Print statistics about basic block ordering
1134dcf3102bSElvina Yakubova
1135dcf3102bSElvina Yakubova- `--print-icf`
1136dcf3102bSElvina Yakubova
1137dcf3102bSElvina Yakubova  Print functions after ICF optimization
1138dcf3102bSElvina Yakubova
1139dcf3102bSElvina Yakubova- `--print-icp`
1140dcf3102bSElvina Yakubova
1141dcf3102bSElvina Yakubova  Print functions after indirect call promotion
1142dcf3102bSElvina Yakubova
1143dcf3102bSElvina Yakubova- `--print-inline`
1144dcf3102bSElvina Yakubova
1145dcf3102bSElvina Yakubova  Print functions after inlining optimization
1146dcf3102bSElvina Yakubova
114775ac887aSshaw young- `--print-large-functions`
114875ac887aSshaw young
114975ac887aSshaw young  Print functions that could not be overwritten due to excessive size
115075ac887aSshaw young
1151dcf3102bSElvina Yakubova- `--print-longjmp`
1152dcf3102bSElvina Yakubova
1153dcf3102bSElvina Yakubova  Print functions after longjmp pass
1154dcf3102bSElvina Yakubova
1155dcf3102bSElvina Yakubova- `--print-optimize-bodyless`
1156dcf3102bSElvina Yakubova
1157dcf3102bSElvina Yakubova  Print functions after bodyless optimization
1158dcf3102bSElvina Yakubova
1159dcf3102bSElvina Yakubova- `--print-output-address-range`
1160dcf3102bSElvina Yakubova
1161dcf3102bSElvina Yakubova  Print output address range for each basic block in the function
1162dcf3102bSElvina Yakubova  whenBinaryFunction::print is called
1163dcf3102bSElvina Yakubova
1164dcf3102bSElvina Yakubova- `--print-peepholes`
1165dcf3102bSElvina Yakubova
1166dcf3102bSElvina Yakubova  Print functions after peephole optimization
1167dcf3102bSElvina Yakubova
1168dcf3102bSElvina Yakubova- `--print-plt`
1169dcf3102bSElvina Yakubova
1170dcf3102bSElvina Yakubova  Print functions after PLT optimization
1171dcf3102bSElvina Yakubova
1172dcf3102bSElvina Yakubova- `--print-regreassign`
1173dcf3102bSElvina Yakubova
1174dcf3102bSElvina Yakubova  Print functions after regreassign pass
1175dcf3102bSElvina Yakubova
1176dcf3102bSElvina Yakubova- `--print-reordered`
1177dcf3102bSElvina Yakubova
1178dcf3102bSElvina Yakubova  Print functions after layout optimization
1179dcf3102bSElvina Yakubova
1180dcf3102bSElvina Yakubova- `--print-reordered-functions`
1181dcf3102bSElvina Yakubova
1182dcf3102bSElvina Yakubova  Print functions after clustering
1183dcf3102bSElvina Yakubova
1184dcf3102bSElvina Yakubova- `--print-sctc`
1185dcf3102bSElvina Yakubova
1186dcf3102bSElvina Yakubova  Print functions after conditional tail call simplification
1187dcf3102bSElvina Yakubova
1188dcf3102bSElvina Yakubova- `--print-simplify-rodata-loads`
1189dcf3102bSElvina Yakubova
1190dcf3102bSElvina Yakubova  Print functions after simplification of RO data loads
1191dcf3102bSElvina Yakubova
1192dcf3102bSElvina Yakubova- `--print-sorted-by=<value>`
1193dcf3102bSElvina Yakubova
1194dcf3102bSElvina Yakubova  Print functions sorted by order of dyno stats
1195dcf3102bSElvina Yakubova  - `executed-forward-branches`: executed forward branches
1196dcf3102bSElvina Yakubova  - `taken-forward-branches`: taken forward branches
1197dcf3102bSElvina Yakubova  - `executed-backward-branches`: executed backward branches
1198dcf3102bSElvina Yakubova  - `taken-backward-branches`: taken backward branches
1199dcf3102bSElvina Yakubova  - `executed-unconditional-branches`: executed unconditional branches
1200dcf3102bSElvina Yakubova  - `all-function-calls`: all function calls
1201dcf3102bSElvina Yakubova  - `indirect-calls`: indirect calls
1202dcf3102bSElvina Yakubova  - `PLT-calls`: PLT calls
1203dcf3102bSElvina Yakubova  - `executed-instructions`: executed instructions
1204dcf3102bSElvina Yakubova  - `executed-load-instructions`: executed load instructions
1205dcf3102bSElvina Yakubova  - `executed-store-instructions`: executed store instructions
1206dcf3102bSElvina Yakubova  - `taken-jump-table-branches`: taken jump table branches
1207dcf3102bSElvina Yakubova  - `taken-unknown-indirect-branches`: taken unknown indirect branches
1208dcf3102bSElvina Yakubova  - `total-branches`: total branches
1209dcf3102bSElvina Yakubova  - `taken-branches`: taken branches
1210dcf3102bSElvina Yakubova  - `non-taken-conditional-branches`: non-taken conditional branches
1211dcf3102bSElvina Yakubova  - `taken-conditional-branches`: taken conditional branches
1212dcf3102bSElvina Yakubova  - `all-conditional-branches`: all conditional branches
1213dcf3102bSElvina Yakubova  - `linker-inserted-veneer-calls`: linker-inserted veneer calls
1214dcf3102bSElvina Yakubova  - `all`: sorted by all names
1215dcf3102bSElvina Yakubova
1216dcf3102bSElvina Yakubova- `--print-sorted-by-order=<value>`
1217dcf3102bSElvina Yakubova
1218dcf3102bSElvina Yakubova  Use ascending or descending order when printing functions ordered by dyno stats
1219dcf3102bSElvina Yakubova
1220dcf3102bSElvina Yakubova- `--print-split`
1221dcf3102bSElvina Yakubova
1222dcf3102bSElvina Yakubova  Print functions after code splitting
1223dcf3102bSElvina Yakubova
1224dcf3102bSElvina Yakubova- `--print-stoke`
1225dcf3102bSElvina Yakubova
1226dcf3102bSElvina Yakubova  Print functions after stoke analysis
1227dcf3102bSElvina Yakubova
1228dcf3102bSElvina Yakubova- `--print-uce`
1229dcf3102bSElvina Yakubova
1230dcf3102bSElvina Yakubova  Print functions after unreachable code elimination
1231dcf3102bSElvina Yakubova
1232dcf3102bSElvina Yakubova- `--print-veneer-elimination`
1233dcf3102bSElvina Yakubova
1234dcf3102bSElvina Yakubova  Print functions after veneer elimination pass
1235dcf3102bSElvina Yakubova
1236765ce869SElvina Yakubova- `--time-opts`
1237dcf3102bSElvina Yakubova
1238765ce869SElvina Yakubova  Print time spent in each optimization
1239dcf3102bSElvina Yakubova
1240765ce869SElvina Yakubova- `--print-all-options`
1241dcf3102bSElvina Yakubova
1242765ce869SElvina Yakubova  Print all option values after command line parsing
1243765ce869SElvina Yakubova
1244765ce869SElvina Yakubova- `--print-options`
1245765ce869SElvina Yakubova
1246765ce869SElvina Yakubova  Print non-default options after command line parsing
1247