Revert "[libc] Use best-fit binary trie to make malloc logarithmic" (#117065)
[llvm-project.git] / bolt / docs / CommandLineArgumentReference.md
blob6d3b797da3787e3c10502f55c24fa1f8f4eca4b9
1 # BOLT - a post-link optimizer developed to speed up large applications
3 ## SYNOPSIS
5 `llvm-bolt <executable> [-o outputfile] <executable>.bolt [-data=perf.fdata] [options]`
7 ## OPTIONS
9 ### Generic options:
11 - `-h`
13   Alias for --help
15 - `--help`
17   Display available options (--help-hidden for more)
19 - `--help-hidden`
21   Display all available options
23 - `--help-list`
25   Display list of available options (--help-list-hidden for more)
27 - `--help-list-hidden`
29   Display list of all available options
31 - `--version`
33   Display the version of this program
35 ### Output options:
37 - `--bolt-info`
39   Write bolt info section in the output binary
41 - `-o <string>`
43   output file
45 - `-w <string>`
47   Save recorded profile to a file
49 ### BOLT generic options:
51 - `--align-text=<uint>`
53   Alignment of .text section
55 - `--allow-stripped`
57   Allow processing of stripped binaries
59 - `--alt-inst-feature-size=<uint>`
61   Size of feature field in .altinstructions
63 - `--alt-inst-has-padlen`
65   Specify that .altinstructions has padlen field
67 - `--asm-dump[=<dump folder>]`
69   Dump function into assembly
71 - `-b`
73   Alias for -data
75 - `--bolt-id=<string>`
77   Add any string to tag this execution in the output binary via bolt info section
79 - `--break-funcs=<func1,func2,func3,...>`
81   List of functions to core dump on (debugging)
83 - `--check-encoding`
85   Perform verification of LLVM instruction encoding/decoding. Every instruction
86   in the input is decoded and re-encoded. If the resulting bytes do not match
87   the input, a warning message is printed.
89 - `--comp-dir-override=<string>`
91   Overrides DW_AT_comp_dir, and provides an alternative base location, which is
92   used with DW_AT_dwo_name to construct a path to *.dwo files.
94 - `--create-debug-names-section`
96   Creates .debug_names section, if the input binary doesn't have it already, for
97   DWARF5 CU/TUs.
99 - `--cu-processing-batch-size=<uint>`
101   Specifies the size of batches for processing CUs. Higher number has better
102   performance, but more memory usage. Default value is 1.
104 - `--data=<string>`
106   data file
108 - `--data2=<string>`
110   data file
112 - `--debug-skeleton-cu`
114   Prints out offsets for abbrev and debug_info of Skeleton CUs that get patched.
116 - `--debug-thread-count=<uint>`
118   Specifies the number of threads to be used when processing DWO debug information.
120 - `--dot-tooltip-code`
122   Add basic block instructions as tool tips on nodes
124 - `--dump-alt-instructions`
126   Dump Linux alternative instructions info
128 - `--dump-cg=<string>`
130   Dump callgraph to the given file
132 - `--dump-data`
134   Dump parsed bolt data for debugging
136 - `--dump-dot-all`
138   Dump function CFGs to graphviz format after each stage;enable '-print-loops'
139   for color-coded blocks
141 - `--dump-linux-exceptions`
143   Dump Linux kernel exception table
145 - `--dump-orc`
147   Dump raw ORC unwind information (sorted)
149 - `--dump-para-sites`
151   Dump Linux kernel paravitual patch sites
153 - `--dump-pci-fixups`
155   Dump Linux kernel PCI fixup table
157 - `--dump-smp-locks`
159   Dump Linux kernel SMP locks
161 - `--dump-static-calls`
163   Dump Linux kernel static calls
165 - `--dump-static-keys`
167   Dump Linux kernel static keys jump table
169 - `--dwarf-output-path=<string>`
171   Path to where .dwo files or dwp file will be written out to.
173 - `--dwp=<string>`
175   Path and name to DWP file.
177 - `--dyno-stats`
179   Print execution info based on profile
181 - `--dyno-stats-all`
183   Print dyno stats after each stage
185 - `--dyno-stats-scale=<uint>`
187   Scale to be applied while reporting dyno stats
189 - `--enable-bat`
191   Write BOLT Address Translation tables
193 - `--force-data-relocations`
195   Force relocations to data sections to always be processed
197 - `--force-patch`
199   Force patching of original entry points
201 - `--funcs=<func1,func2,func3,...>`
203   Limit optimizations to functions from the list
205 - `--funcs-file=<string>`
207   File with list of functions to optimize
209 - `--funcs-file-no-regex=<string>`
211   File with list of functions to optimize (non-regex)
213 - `--funcs-no-regex=<func1,func2,func3,...>`
215   Limit optimizations to functions from the list (non-regex)
217 - `--hot-data`
219   Hot data symbols support (relocation mode)
221 - `--hot-functions-at-end`
223   If reorder-functions is used, order functions putting hottest last
225 - `--hot-text`
227   Generate hot text symbols. Apply this option to a precompiled binary that
228   manually calls into hugify, such that at runtime hugify call will put hot code
229   into 2M pages. This requires relocation.
231 - `--hot-text-move-sections=<sec1,sec2,sec3,...>`
233   List of sections containing functions used for hugifying hot text. BOLT makes
234   sure these functions are not placed on the same page as the hot text.
235   (default='.stub,.mover').
237 - `--insert-retpolines`
239   Run retpoline insertion pass
241 - `--keep-aranges`
243   Keep or generate .debug_aranges section if .gdb_index is written
245 - `--keep-tmp`
247   Preserve intermediate .o file
249 - `--lite`
251   Skip processing of cold functions
253 - `--log-file=<string>`
255   Redirect journaling to a file instead of stdout/stderr
257 - `--long-jump-labels`
259   Always use long jumps/nops for Linux kernel static keys
261 - `--match-profile-with-function-hash`
263   Match profile with function hash
265 - `--max-data-relocations=<uint>`
267   Maximum number of data relocations to process
269 - `--max-funcs=<uint>`
271   Maximum number of functions to process
273 - `--no-huge-pages`
275   Use regular size pages for code alignment
277 - `--no-threads`
279   Disable multithreading
281 - `--pad-funcs=<func1:pad1,func2:pad2,func3:pad3,...>`
283   List of functions to pad with amount of bytes
285 - `--print-mappings`
287   Print mappings in the legend, between characters/blocks and text sections
288   (default false).
291 - `--profile-format=<value>`
293   Format to dump profile output in aggregation mode, default is fdata
294   - `fdata`: offset-based plaintext format
295   - `yaml`: dense YAML representation
297 - `--r11-availability=<value>`
299   Determine the availability of r11 before indirect branches
300   - `never`: r11 not available
301   - `always`: r11 available before calls and jumps
302   - `abi`: r11 available before calls but not before jumps
304 - `--relocs`
306   Use relocations in the binary (default=autodetect)
308 - `--remove-symtab`
310   Remove .symtab section
312 - `--reorder-skip-symbols=<symbol1,symbol2,symbol3,...>`
314   List of symbol names that cannot be reordered
316 - `--reorder-symbols=<symbol1,symbol2,symbol3,...>`
318   List of symbol names that can be reordered
320 - `--retpoline-lfence`
322   Determine if lfence instruction should exist in the retpoline
324 - `--skip-funcs=<func1,func2,func3,...>`
326   List of functions to skip
328 - `--skip-funcs-file=<string>`
330   File with list of functions to skip
332 - `--strict`
334   Trust the input to be from a well-formed source
336 - `--tasks-per-thread=<uint>`
338   Number of tasks to be created per thread
340 - `--terminal-trap`
342   Assume that execution stops at trap instruction
344 - `--thread-count=<uint>`
346   Number of threads
348 - `--top-called-limit=<uint>`
350   Maximum number of functions to print in top called functions section
352 - `--trap-avx512`
354   In relocation mode trap upon entry to any function that uses AVX-512
355   instructions
357 - `--trap-old-code`
359   Insert traps in old function bodies (relocation mode)
361 - `--update-debug-sections`
363   Update DWARF debug sections of the executable
365 - `--use-gnu-stack`
367   Use GNU_STACK program header for new segment (workaround for issues with
368   strip/objcopy)
370 - `--use-old-text`
372   Re-use space in old .text if possible (relocation mode)
374 - `-v <uint>`
376   Set verbosity level for diagnostic output
378 - `--write-dwp`
380   Output a single dwarf package file (dwp) instead of multiple non-relocatable
381   dwarf object files (dwo).
383 ### BOLT optimization options:
385 - `--align-blocks`
387   Align basic blocks
389 - `--align-blocks-min-size=<uint>`
391   Minimal size of the basic block that should be aligned
393 - `--align-blocks-threshold=<uint>`
395   Align only blocks with frequency larger than containing function execution
396   frequency specified in percent. E.g. 1000 means aligning blocks that are 10
397   times more frequently executed than the containing function.
399 - `--align-functions=<uint>`
401   Align functions at a given value (relocation mode)
403 - `--align-functions-max-bytes=<uint>`
405   Maximum number of bytes to use to align functions
407 - `--assume-abi`
409   Assume the ABI is never violated
411 - `--block-alignment=<uint>`
413   Boundary to use for alignment of basic blocks
415 - `--bolt-seed=<uint>`
417   Seed for randomization
419 - `--cg-from-perf-data`
421   Use perf data directly when constructing the call graph for stale functions
423 - `--cg-ignore-recursive-calls`
425   Ignore recursive calls when constructing the call graph
427 - `--cg-use-split-hot-size`
429   Use hot/cold data on basic blocks to determine hot sizes for call graph
430   functions
432 - `--cold-threshold=<uint>`
434   Tenths of percents of main entry frequency to use as a threshold when
435   evaluating whether a basic block is cold (0 means it is only considered cold
436   if the block has zero samples). Default: 0
438 - `--elim-link-veneers`
440   Run veneer elimination pass
442 - `--eliminate-unreachable`
444   Eliminate unreachable code
446 - `--equalize-bb-counts`
448   Use same count for BBs that should have equivalent count (used in non-LBR and
449   shrink wrapping)
451 - `--execution-count-threshold=<uint>`
453   Perform profiling accuracy-sensitive optimizations only if function execution
454   count >= the threshold (default: 0)
456 - `--fix-block-counts`
458   Adjust block counts based on outgoing branch counts
460 - `--fix-func-counts`
462   Adjust function counts based on basic blocks execution count
464 - `--force-inline=<func1,func2,func3,...>`
466   List of functions to always consider for inlining
468 - `--frame-opt=<value>`
470   Optimize stack frame accesses
471   - `none`: do not perform frame optimization
472   - `hot`: perform FOP on hot functions
473   - `all`: perform FOP on all functions
475 - `--frame-opt-rm-stores`
477   Apply additional analysis to remove stores (experimental)
479 - `--function-order=<string>`
481   File containing an ordered list of functions to use for function reordering
483 - `--generate-function-order=<string>`
485   File to dump the ordered list of functions to use for function reordering
487 - `--generate-link-sections=<string>`
489   Generate a list of function sections in a format suitable for inclusion in a
490   linker script
492 - `--group-stubs`
494   Share stubs across functions
496 - `--hugify`
498   Automatically put hot code on 2MB page(s) (hugify) at runtime. No manual call
499   to hugify is needed in the binary (which is what --hot-text relies on).
501 - `--icf`
503   Fold functions with identical code
505 - `--icp`
507   Alias for --indirect-call-promotion
509 - `--icp-calls-remaining-percent-threshold=<uint>`
511   The percentage threshold against remaining unpromoted indirect call count for
512   the promotion for calls
514 - `--icp-calls-topn`
516   Alias for --indirect-call-promotion-calls-topn
518 - `--icp-calls-total-percent-threshold=<uint>`
520   The percentage threshold against total count for the promotion for calls
522 - `--icp-eliminate-loads`
524   Enable load elimination using memory profiling data when performing ICP
526 - `--icp-funcs=<func1,func2,func3,...>`
528   List of functions to enable ICP for
530 - `--icp-inline`
532   Only promote call targets eligible for inlining
534 - `--icp-jt-remaining-percent-threshold=<uint>`
536   The percentage threshold against remaining unpromoted indirect call count for
537   the promotion for jump tables
539 - `--icp-jt-targets`
541   Alias for --icp-jump-tables-targets
543 - `--icp-jt-topn`
545   Alias for --indirect-call-promotion-jump-tables-topn
547 - `--icp-jt-total-percent-threshold=<uint>`
549   The percentage threshold against total count for the promotion for jump tables
551 - `--icp-jump-tables-targets`
553   For jump tables, optimize indirect jmp targets instead of indices
555 - `--icp-mp-threshold`
557   Alias for --indirect-call-promotion-mispredict-threshold
559 - `--icp-old-code-sequence`
561   Use old code sequence for promoted calls
563 - `--icp-top-callsites=<uint>`
565   Optimize hottest calls until at least this percentage of all indirect calls
566   frequency is covered. 0 = all callsites
568 - `--icp-topn`
570   Alias for --indirect-call-promotion-topn
572 - `--icp-use-mp`
574   Alias for --indirect-call-promotion-use-mispredicts
576 - `--indirect-call-promotion=<value>`
578   Indirect call promotion
579   - `none`: do not perform indirect call promotion
580   - `calls`: perform ICP on indirect calls
581   - `jump-tables`: perform ICP on jump tables
582   - `all`: perform ICP on calls and jump tables
584 - `--indirect-call-promotion-calls-topn=<uint>`
586   Limit number of targets to consider when doing indirect call promotion on
587   calls. 0 = no limit
589 - `--indirect-call-promotion-jump-tables-topn=<uint>`
591   Limit number of targets to consider when doing indirect call promotion on jump
592   tables. 0 = no limit
594 - `--indirect-call-promotion-topn=<uint>`
596   Limit number of targets to consider when doing indirect call promotion. 0 = no
597   limit
599 - `--indirect-call-promotion-use-mispredicts`
601   Use misprediction frequency for determining whether or not ICP should be
602   applied at a callsite.  The -indirect-call-promotion-mispredict-threshold
603   value will be used by this heuristic
605 - `--infer-fall-throughs`
607   Infer execution count for fall-through blocks
609 - `--infer-stale-profile`
611   Infer counts from stale profile data.
613 - `--inline-all`
615   Inline all functions
617 - `--inline-ap`
619   Adjust function profile after inlining
621 - `--inline-limit=<uint>`
623   Maximum number of call sites to inline
625 - `--inline-max-iters=<uint>`
627   Maximum number of inline iterations
629 - `--inline-memcpy`
631   Inline memcpy using 'rep movsb' instruction (X86-only)
633 - `--inline-small-functions`
635   Inline functions if increase in size is less than defined by -inline-small-
636   functions-bytes
638 - `--inline-small-functions-bytes=<uint>`
640   Max number of bytes for the function to be considered small for inlining
641   purposes
643 - `--instrument`
645   Instrument code to generate accurate profile data
647 - `--iterative-guess`
649   In non-LBR mode, guess edge counts using iterative technique
651 - `--jt-footprint-optimize-for-icache`
653   With jt-footprint-reduction, only process PIC jumptables and turn off other
654   transformations that increase code size
656 - `--jt-footprint-reduction`
658   Make jump tables size smaller at the cost of using more instructions at jump
659   sites
661 - `--jump-tables=<value>`
663   Jump tables support (default=basic)
664   - `none`: do not optimize functions with jump tables
665   - `basic`: optimize functions with jump tables
666   - `move`: move jump tables to a separate section
667   - `split`: split jump tables section into hot and cold based on function
668   execution frequency
669   - `aggressive`: aggressively split jump tables section based on usage of the
670   tables
672 - `--keep-nops`
674   Keep no-op instructions. By default they are removed.
676 - `--lite-threshold-count=<uint>`
678   Similar to '-lite-threshold-pct' but specify threshold using absolute function
679   call count. I.e. limit processing to functions executed at least the specified
680   number of times.
682 - `--lite-threshold-pct=<uint>`
684   Threshold (in percent) for selecting functions to process in lite mode. Higher
685   threshold means fewer functions to process. E.g threshold of 90 means only top
686   10 percent of functions with profile will be processed.
688 - `--match-with-call-graph`
690   Match functions with call graph
692 - `--memcpy1-spec=<func1,func2:cs1:cs2,func3:cs1,...>`
694   List of functions with call sites for which to specialize memcpy() for size 1
696 - `--min-branch-clusters`
698   Use a modified clustering algorithm geared towards minimizing branches
700 - `--name-similarity-function-matching-threshold=<uint>`
702   Match functions using namespace and edit distance.
704 - `--no-inline`
706   Disable all inlining (overrides other inlining options)
708 - `--no-scan`
710   Do not scan cold functions for external references (may result in slower binary)
712 - `--peepholes=<value>`
714   Enable peephole optimizations
715   - `none`: disable peepholes
716   - `double-jumps`: remove double jumps when able
717   - `tailcall-traps`: insert tail call traps
718   - `useless-branches`: remove useless conditional branches
719   - `all`: enable all peephole optimizations
721 - `--plt=<value>`
723   Optimize PLT calls (requires linking with -znow)
724   - `none`: do not optimize PLT calls
725   - `hot`: optimize executed (hot) PLT calls
726   - `all`: optimize all PLT calls
728 - `--preserve-blocks-alignment`
730   Try to preserve basic block alignment
732 - `--profile-ignore-hash`
734   Ignore hash while reading function profile
736 - `--profile-use-dfs`
738   Use DFS order for YAML profile
740 - `--reg-reassign`
742   Reassign registers so as to avoid using REX prefixes in hot code
744 - `--reorder-blocks=<value>`
746   Change layout of basic blocks in a function
747   - `none`: do not reorder basic blocks
748   - `reverse`: layout blocks in reverse order
749   - `normal`: perform optimal layout based on profile
750   - `branch-predictor`: perform optimal layout prioritizing branch predictions
751   - `cache`: perform optimal layout prioritizing I-cache behavior
752   - `cache+`: perform layout optimizing I-cache behavior
753   - `ext-tsp`: perform layout optimizing I-cache behavior
754   - `cluster-shuffle`: perform random layout of clusters
756 - `--reorder-data=<section1,section2,section3,...>`
758   List of sections to reorder
760 - `--reorder-data-algo=<value>`
762   Algorithm used to reorder data sections
763   - `count`: sort hot data by read counts
764   - `funcs`: sort hot data by hot function usage and count
766 - `--reorder-data-inplace`
768   Reorder data sections in place
770 - `--reorder-data-max-bytes=<uint>`
772   Maximum number of bytes to reorder
774 - `--reorder-data-max-symbols=<uint>`
776   Maximum number of symbols to reorder
778 - `--reorder-functions=<value>`
780   Reorder and cluster functions (works only with relocations)
781   - `none`: do not reorder functions
782   - `exec-count`: order by execution count
783   - `hfsort`: use hfsort algorithm
784   - `hfsort+`: use cache-directed sort
785   - `cdsort`: use cache-directed sort
786   - `pettis-hansen`: use Pettis-Hansen algorithm
787   - `random`: reorder functions randomly
788   - `user`: use function order specified by -function-order
790 - `--reorder-functions-use-hot-size`
792   Use a function's hot size when doing clustering
794 - `--report-bad-layout=<uint>`
796   Print top <uint> functions with suboptimal code layout on input
798 - `--report-stale`
800   Print the list of functions with stale profile
802 - `--runtime-hugify-lib=<string>`
804   Specify file name of the runtime hugify library
806 - `--runtime-instrumentation-lib=<string>`
808   Specify file name of the runtime instrumentation library
810 - `--sctc-mode=<value>`
812   Mode for simplify conditional tail calls
813   - `always`: always perform sctc
814   - `preserve`: only perform sctc when branch direction is preserved
815   - `heuristic`: use branch prediction data to control sctc
817 - `--sequential-disassembly`
819   Performs disassembly sequentially
821 - `--shrink-wrapping-threshold=<uint>`
823   Percentage of prologue execution count to use as threshold when evaluating
824   whether a block is cold enough to be profitable to move eligible spills there
826 - `--simplify-conditional-tail-calls`
828   Simplify conditional tail calls by removing unnecessary jumps
830 - `--simplify-rodata-loads`
832   Simplify loads from read-only sections by replacing the memory operand with
833   the constant found in the corresponding section
835 - `--split-align-threshold=<uint>`
837   When deciding to split a function, apply this alignment while doing the size
838   comparison (see -split-threshold). Default value: 2.
840 - `--split-all-cold`
842   Outline as many cold basic blocks as possible
844 - `--split-eh`
846   Split C++ exception handling code
848 - `--split-functions`
850   Split functions into fragments
852 - `--split-strategy=<value>`
854   Strategy used to partition blocks into fragments
855   - `profile2`: split each function into a hot and cold fragment using profiling
856   information
857   - `cdsplit`: split each function into a hot, warm, and cold fragment using
858   profiling information
859   - `random2`: split each function into a hot and cold fragment at a randomly
860   chosen split point (ignoring any available profiling information)
861   - `randomN`: split each function into N fragments at a randomly chosen split
862   points (ignoring any available profiling information)
863   - `all`: split all basic blocks of each function into fragments such that each
864   fragment contains exactly a single basic block
866 - `--split-threshold=<uint>`
868   Split function only if its main size is reduced by more than given amount of
869   bytes. Default value: 0, i.e. split iff the size is reduced. Note that on some
870   architectures the size can increase after splitting.
872 - `--stale-matching-max-func-size=<uint>`
874   The maximum size of a function to consider for inference.
876 - `--stale-matching-min-matched-block=<uint>`
878   Percentage threshold of matched basic blocks at which stale profile inference
879   is executed.
881 - `--stale-threshold=<uint>`
883   Maximum percentage of stale functions to tolerate (default: 100)
885 - `--stoke`
887   Turn on the stoke analysis
889 - `--strip-rep-ret`
891   Strip 'repz' prefix from 'repz retq' sequence (on by default)
893 - `--tail-duplication=<value>`
895   Duplicate unconditional branches that cross a cache line
896   - `none`: do not apply
897   - `aggressive`: aggressive strategy
898   - `moderate`: moderate strategy
899   - `cache`: cache-aware duplication strategy
901 - `--tsp-threshold=<uint>`
903   Maximum number of hot basic blocks in a function for which to use a precise
904   TSP solution while re-ordering basic blocks
906 - `--use-aggr-reg-reassign`
908   Use register liveness analysis to try to find more opportunities for -reg-
909   reassign optimization
911 - `--use-compact-aligner`
913   Use compact approach for aligning functions
915 - `--use-edge-counts`
917   Use edge count data when doing clustering
919 - `--verify-cfg`
921   Verify the CFG after every pass
923 - `--x86-align-branch-boundary-hot-only`
925   Only apply branch boundary alignment in hot code
927 - `--x86-strip-redundant-address-size`
929   Remove redundant Address-Size override prefix
931 ### BOLT options in relocation mode:
933 - `--align-macro-fusion=<value>`
935   Fix instruction alignment for macro-fusion (x86 relocation mode)
936   - `none`: do not insert alignment no-ops for macro-fusion
937   - `hot`: only insert alignment no-ops on hot execution paths (default)
938   - `all`: always align instructions to allow macro-fusion
940 ### BOLT instrumentation options:
942 `llvm-bolt <executable> -instrument [-o outputfile] <instrumented-executable>`
944 - `--conservative-instrumentation`
946   Disable instrumentation optimizations that sacrifice profile accuracy (for
947   debugging, default: false)
949 - `--instrument-calls`
951   Record profile for inter-function control flow activity (default: true)
953 - `--instrument-hot-only`
955   Only insert instrumentation on hot functions (needs profile, default: false)
957 - `--instrumentation-binpath=<string>`
959   Path to instrumented binary in case if /proc/self/map_files is not accessible
960   due to access restriction issues
962 - `--instrumentation-file=<string>`
964   File name where instrumented profile will be saved (default: /tmp/prof.fdata)
966 - `--instrumentation-file-append-pid`
968   Append PID to saved profile file name (default: false)
970 - `--instrumentation-no-counters-clear`
972   Don't clear counters across dumps (use with instrumentation-sleep-time option)
974 - `--instrumentation-sleep-time=<uint>`
976   Interval between profile writes (default: 0 = write only at program end).
977   This is useful for service workloads when you want to dump profile every X
978   minutes or if you are killing the program and the profile is not being dumped
979   at the end.
981 - `--instrumentation-wait-forks`
983   Wait until all forks of instrumented process will finish (use with
984   instrumentation-sleep-time option)
986 ### BOLT printing options:
988 - `--print-aliases`
990   Print aliases when printing objects
992 - `--print-all`
994   Print functions after each stage
996 - `--print-cfg`
998   Print functions after CFG construction
1000 - `--print-debug-info`
1002   Print debug info when printing functions
1004 - `--print-disasm`
1006   Print function after disassembly
1008 - `--print-dyno-opcode-stats=<uint>`
1010   Print per instruction opcode dyno stats and the functionnames:BB offsets of
1011   the nth highest execution counts
1013 - `--print-dyno-stats-only`
1015   While printing functions output dyno-stats and skip instructions
1017 - `--print-exceptions`
1019   Print exception handling data
1021 - `--print-globals`
1023   Print global symbols after disassembly
1025 - `--print-jump-tables`
1027   Print jump tables
1029 - `--print-loops`
1031   Print loop related information
1033 - `--print-mem-data`
1035   Print memory data annotations when printing functions
1037 - `--print-normalized`
1039   Print functions after CFG is normalized
1041 - `--print-only=<func1,func2,func3,...>`
1043   List of functions to print
1045 - `--print-orc`
1047   Print ORC unwind information for instructions
1049 - `--print-profile`
1051   Print functions after attaching profile
1053 - `--print-profile-stats`
1055   Print profile quality/bias analysis
1057 - `--print-pseudo-probes=<value>`
1059   Print pseudo probe info
1060   - `decode`: decode probes section from binary
1061   - `address_conversion`: update address2ProbesMap with output block address
1062   - `encoded_probes`: display the encoded probes in binary section
1063   - `all`: enable all debugging printout
1065 - `--print-relocations`
1067   Print relocations when printing functions/objects
1069 - `--print-reordered-data`
1071   Print section contents after reordering
1073 - `--print-retpoline-insertion`
1075   Print functions after retpoline insertion pass
1077 - `--print-sdt`
1079   Print all SDT markers
1081 - `--print-sections`
1083   Print all registered sections
1085 - `--print-unknown`
1087   Print names of functions with unknown control flow
1089 - `--time-build`
1091   Print time spent constructing binary functions
1093 - `--time-rewrite`
1095   Print time spent in rewriting passes
1097 - `--print-after-branch-fixup`
1099   Print function after fixing local branches
1101 - `--print-after-jt-footprint-reduction`
1103   Print function after jt-footprint-reduction pass
1105 - `--print-after-lowering`
1107   Print function after instruction lowering
1109 - `--print-cache-metrics`
1111   Calculate and print various metrics for instruction cache
1113 - `--print-clusters`
1115   Print clusters
1117 - `--print-estimate-edge-counts`
1119   Print function after edge counts are set for no-LBR profile
1121 - `--print-finalized`
1123   Print function after CFG is finalized
1125 - `--print-fix-relaxations`
1127   Print functions after fix relaxations pass
1129 - `--print-fix-riscv-calls`
1131   Print functions after fix RISCV calls pass
1133 - `--print-fop`
1135   Print functions after frame optimizer pass
1137 - `--print-function-statistics=<uint>`
1139   Print statistics about basic block ordering
1141 - `--print-icf`
1143   Print functions after ICF optimization
1145 - `--print-icp`
1147   Print functions after indirect call promotion
1149 - `--print-inline`
1151   Print functions after inlining optimization
1153 - `--print-large-functions`
1155   Print functions that could not be overwritten due to excessive size
1157 - `--print-longjmp`
1159   Print functions after longjmp pass
1161 - `--print-optimize-bodyless`
1163   Print functions after bodyless optimization
1165 - `--print-output-address-range`
1167   Print output address range for each basic block in the function
1168   whenBinaryFunction::print is called
1170 - `--print-peepholes`
1172   Print functions after peephole optimization
1174 - `--print-plt`
1176   Print functions after PLT optimization
1178 - `--print-regreassign`
1180   Print functions after regreassign pass
1182 - `--print-reordered`
1184   Print functions after layout optimization
1186 - `--print-reordered-functions`
1188   Print functions after clustering
1190 - `--print-sctc`
1192   Print functions after conditional tail call simplification
1194 - `--print-simplify-rodata-loads`
1196   Print functions after simplification of RO data loads
1198 - `--print-sorted-by=<value>`
1200   Print functions sorted by order of dyno stats
1201   - `executed-forward-branches`: executed forward branches
1202   - `taken-forward-branches`: taken forward branches
1203   - `executed-backward-branches`: executed backward branches
1204   - `taken-backward-branches`: taken backward branches
1205   - `executed-unconditional-branches`: executed unconditional branches
1206   - `all-function-calls`: all function calls
1207   - `indirect-calls`: indirect calls
1208   - `PLT-calls`: PLT calls
1209   - `executed-instructions`: executed instructions
1210   - `executed-load-instructions`: executed load instructions
1211   - `executed-store-instructions`: executed store instructions
1212   - `taken-jump-table-branches`: taken jump table branches
1213   - `taken-unknown-indirect-branches`: taken unknown indirect branches
1214   - `total-branches`: total branches
1215   - `taken-branches`: taken branches
1216   - `non-taken-conditional-branches`: non-taken conditional branches
1217   - `taken-conditional-branches`: taken conditional branches
1218   - `all-conditional-branches`: all conditional branches
1219   - `linker-inserted-veneer-calls`: linker-inserted veneer calls
1220   - `all`: sorted by all names
1222 - `--print-sorted-by-order=<value>`
1224   Use ascending or descending order when printing functions ordered by dyno stats
1226 - `--print-split`
1228   Print functions after code splitting
1230 - `--print-stoke`
1232   Print functions after stoke analysis
1234 - `--print-uce`
1236   Print functions after unreachable code elimination
1238 - `--print-veneer-elimination`
1240   Print functions after veneer elimination pass
1242 - `--time-opts`
1244   Print time spent in each optimization
1246 - `--print-all-options`
1248   Print all option values after command line parsing
1250 - `--print-options`
1252   Print non-default options after command line parsing