[clang-repl] [codegen] Reduce the state in TBAA. NFC for static compilation. (#98138)
[llvm-project.git] / bolt / docs / CommandLineArgumentReference.md
blob0c8935457366dbb702a633190d9a6958af0e7951
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 - `--dot-tooltip-code`
118   Add basic block instructions as tool tips on nodes
120 - `--dump-alt-instructions`
122   Dump Linux alternative instructions info
124 - `--dump-cg=<string>`
126   Dump callgraph to the given file
128 - `--dump-data`
130   Dump parsed bolt data for debugging
132 - `--dump-dot-all`
134   Dump function CFGs to graphviz format after each stage;enable '-print-loops'
135   for color-coded blocks
137 - `--dump-linux-exceptions`
139   Dump Linux kernel exception table
141 - `--dump-orc`
143   Dump raw ORC unwind information (sorted)
145 - `--dump-para-sites`
147   Dump Linux kernel paravitual patch sites
149 - `--dump-pci-fixups`
151   Dump Linux kernel PCI fixup table
153 - `--dump-smp-locks`
155   Dump Linux kernel SMP locks
157 - `--dump-static-calls`
159   Dump Linux kernel static calls
161 - `--dump-static-keys`
163   Dump Linux kernel static keys jump table
165 - `--dwarf-output-path=<string>`
167   Path to where .dwo files or dwp file will be written out to.
169 - `--dwp=<string>`
171   Path and name to DWP file.
173 - `--dyno-stats`
175   Print execution info based on profile
177 - `--dyno-stats-all`
179   Print dyno stats after each stage
181 - `--dyno-stats-scale=<uint>`
183   Scale to be applied while reporting dyno stats
185 - `--enable-bat`
187   Write BOLT Address Translation tables
189 - `--force-data-relocations`
191   Force relocations to data sections to always be processed
193 - `--force-patch`
195   Force patching of original entry points
197 - `--funcs=<func1,func2,func3,...>`
199   Limit optimizations to functions from the list
201 - `--funcs-file=<string>`
203   File with list of functions to optimize
205 - `--funcs-file-no-regex=<string>`
207   File with list of functions to optimize (non-regex)
209 - `--funcs-no-regex=<func1,func2,func3,...>`
211   Limit optimizations to functions from the list (non-regex)
213 - `--hot-data`
215   Hot data symbols support (relocation mode)
217 - `--hot-functions-at-end`
219   If reorder-functions is used, order functions putting hottest last
221 - `--hot-text`
223   Generate hot text symbols. Apply this option to a precompiled binary that
224   manually calls into hugify, such that at runtime hugify call will put hot code
225   into 2M pages. This requires relocation.
227 - `--hot-text-move-sections=<sec1,sec2,sec3,...>`
229   List of sections containing functions used for hugifying hot text. BOLT makes
230   sure these functions are not placed on the same page as the hot text.
231   (default='.stub,.mover').
233 - `--insert-retpolines`
235   Run retpoline insertion pass
237 - `--keep-aranges`
239   Keep or generate .debug_aranges section if .gdb_index is written
241 - `--keep-tmp`
243   Preserve intermediate .o file
245 - `--lite`
247   Skip processing of cold functions
249 - `--log-file=<string>`
251   Redirect journaling to a file instead of stdout/stderr
253 - `--long-jump-labels`
255   Always use long jumps/nops for Linux kernel static keys
257 - `--match-profile-with-function-hash`
259   Match profile with function hash
261 - `--max-data-relocations=<uint>`
263   Maximum number of data relocations to process
265 - `--max-funcs=<uint>`
267   Maximum number of functions to process
269 - `--no-huge-pages`
271   Use regular size pages for code alignment
273 - `--no-threads`
275   Disable multithreading
277 - `--pad-funcs=<func1:pad1,func2:pad2,func3:pad3,...>`
279   List of functions to pad with amount of bytes
281 - `--print-mappings`
283   Print mappings in the legend, between characters/blocks and text sections
284   (default false).
287 - `--profile-format=<value>`
289   Format to dump profile output in aggregation mode, default is fdata
290   - `fdata`: offset-based plaintext format
291   - `yaml`: dense YAML representation
293 - `--r11-availability=<value>`
295   Determine the availability of r11 before indirect branches
296   - `never`: r11 not available
297   - `always`: r11 available before calls and jumps
298   - `abi`: r11 available before calls but not before jumps
300 - `--relocs`
302   Use relocations in the binary (default=autodetect)
304 - `--remove-symtab`
306   Remove .symtab section
308 - `--reorder-skip-symbols=<symbol1,symbol2,symbol3,...>`
310   List of symbol names that cannot be reordered
312 - `--reorder-symbols=<symbol1,symbol2,symbol3,...>`
314   List of symbol names that can be reordered
316 - `--retpoline-lfence`
318   Determine if lfence instruction should exist in the retpoline
320 - `--skip-funcs=<func1,func2,func3,...>`
322   List of functions to skip
324 - `--skip-funcs-file=<string>`
326   File with list of functions to skip
328 - `--strict`
330   Trust the input to be from a well-formed source
332 - `--tasks-per-thread=<uint>`
334   Number of tasks to be created per thread
336 - `--terminal-trap`
338   Assume that execution stops at trap instruction
340 - `--thread-count=<uint>`
342   Number of threads
344 - `--top-called-limit=<uint>`
346   Maximum number of functions to print in top called functions section
348 - `--trap-avx512`
350   In relocation mode trap upon entry to any function that uses AVX-512
351   instructions
353 - `--trap-old-code`
355   Insert traps in old function bodies (relocation mode)
357 - `--update-debug-sections`
359   Update DWARF debug sections of the executable
361 - `--use-gnu-stack`
363   Use GNU_STACK program header for new segment (workaround for issues with
364   strip/objcopy)
366 - `--use-old-text`
368   Re-use space in old .text if possible (relocation mode)
370 - `-v <uint>`
372   Set verbosity level for diagnostic output
374 - `--write-dwp`
376   Output a single dwarf package file (dwp) instead of multiple non-relocatable
377   dwarf object files (dwo).
379 ### BOLT optimization options:
381 - `--align-blocks`
383   Align basic blocks
385 - `--align-blocks-min-size=<uint>`
387   Minimal size of the basic block that should be aligned
389 - `--align-blocks-threshold=<uint>`
391   Align only blocks with frequency larger than containing function execution
392   frequency specified in percent. E.g. 1000 means aligning blocks that are 10
393   times more frequently executed than the containing function.
395 - `--align-functions=<uint>`
397   Align functions at a given value (relocation mode)
399 - `--align-functions-max-bytes=<uint>`
401   Maximum number of bytes to use to align functions
403 - `--assume-abi`
405   Assume the ABI is never violated
407 - `--block-alignment=<uint>`
409   Boundary to use for alignment of basic blocks
411 - `--bolt-seed=<uint>`
413   Seed for randomization
415 - `--cg-from-perf-data`
417   Use perf data directly when constructing the call graph for stale functions
419 - `--cg-ignore-recursive-calls`
421   Ignore recursive calls when constructing the call graph
423 - `--cg-use-split-hot-size`
425   Use hot/cold data on basic blocks to determine hot sizes for call graph
426   functions
428 - `--cold-threshold=<uint>`
430   Tenths of percents of main entry frequency to use as a threshold when
431   evaluating whether a basic block is cold (0 means it is only considered cold
432   if the block has zero samples). Default: 0
434 - `--elim-link-veneers`
436   Run veneer elimination pass
438 - `--eliminate-unreachable`
440   Eliminate unreachable code
442 - `--equalize-bb-counts`
444   Use same count for BBs that should have equivalent count (used in non-LBR and
445   shrink wrapping)
447 - `--execution-count-threshold=<uint>`
449   Perform profiling accuracy-sensitive optimizations only if function execution
450   count >= the threshold (default: 0)
452 - `--fix-block-counts`
454   Adjust block counts based on outgoing branch counts
456 - `--fix-func-counts`
458   Adjust function counts based on basic blocks execution count
460 - `--force-inline=<func1,func2,func3,...>`
462   List of functions to always consider for inlining
464 - `--frame-opt=<value>`
466   Optimize stack frame accesses
467   - `none`: do not perform frame optimization
468   - `hot`: perform FOP on hot functions
469   - `all`: perform FOP on all functions
471 - `--frame-opt-rm-stores`
473   Apply additional analysis to remove stores (experimental)
475 - `--function-order=<string>`
477   File containing an ordered list of functions to use for function reordering
479 - `--generate-function-order=<string>`
481   File to dump the ordered list of functions to use for function reordering
483 - `--generate-link-sections=<string>`
485   Generate a list of function sections in a format suitable for inclusion in a
486   linker script
488 - `--group-stubs`
490   Share stubs across functions
492 - `--hugify`
494   Automatically put hot code on 2MB page(s) (hugify) at runtime. No manual call
495   to hugify is needed in the binary (which is what --hot-text relies on).
497 - `--icf`
499   Fold functions with identical code
501 - `--icp`
503   Alias for --indirect-call-promotion
505 - `--icp-calls-remaining-percent-threshold=<uint>`
507   The percentage threshold against remaining unpromoted indirect call count for
508   the promotion for calls
510 - `--icp-calls-topn`
512   Alias for --indirect-call-promotion-calls-topn
514 - `--icp-calls-total-percent-threshold=<uint>`
516   The percentage threshold against total count for the promotion for calls
518 - `--icp-eliminate-loads`
520   Enable load elimination using memory profiling data when performing ICP
522 - `--icp-funcs=<func1,func2,func3,...>`
524   List of functions to enable ICP for
526 - `--icp-inline`
528   Only promote call targets eligible for inlining
530 - `--icp-jt-remaining-percent-threshold=<uint>`
532   The percentage threshold against remaining unpromoted indirect call count for
533   the promotion for jump tables
535 - `--icp-jt-targets`
537   Alias for --icp-jump-tables-targets
539 - `--icp-jt-topn`
541   Alias for --indirect-call-promotion-jump-tables-topn
543 - `--icp-jt-total-percent-threshold=<uint>`
545   The percentage threshold against total count for the promotion for jump tables
547 - `--icp-jump-tables-targets`
549   For jump tables, optimize indirect jmp targets instead of indices
551 - `--icp-mp-threshold`
553   Alias for --indirect-call-promotion-mispredict-threshold
555 - `--icp-old-code-sequence`
557   Use old code sequence for promoted calls
559 - `--icp-top-callsites=<uint>`
561   Optimize hottest calls until at least this percentage of all indirect calls
562   frequency is covered. 0 = all callsites
564 - `--icp-topn`
566   Alias for --indirect-call-promotion-topn
568 - `--icp-use-mp`
570   Alias for --indirect-call-promotion-use-mispredicts
572 - `--indirect-call-promotion=<value>`
574   Indirect call promotion
575   - `none`: do not perform indirect call promotion
576   - `calls`: perform ICP on indirect calls
577   - `jump-tables`: perform ICP on jump tables
578   - `all`: perform ICP on calls and jump tables
580 - `--indirect-call-promotion-calls-topn=<uint>`
582   Limit number of targets to consider when doing indirect call promotion on
583   calls. 0 = no limit
585 - `--indirect-call-promotion-jump-tables-topn=<uint>`
587   Limit number of targets to consider when doing indirect call promotion on jump
588   tables. 0 = no limit
590 - `--indirect-call-promotion-topn=<uint>`
592   Limit number of targets to consider when doing indirect call promotion. 0 = no
593   limit
595 - `--indirect-call-promotion-use-mispredicts`
597   Use misprediction frequency for determining whether or not ICP should be
598   applied at a callsite.  The -indirect-call-promotion-mispredict-threshold
599   value will be used by this heuristic
601 - `--infer-fall-throughs`
603   Infer execution count for fall-through blocks
605 - `--infer-stale-profile`
607   Infer counts from stale profile data.
609 - `--inline-all`
611   Inline all functions
613 - `--inline-ap`
615   Adjust function profile after inlining
617 - `--inline-limit=<uint>`
619   Maximum number of call sites to inline
621 - `--inline-max-iters=<uint>`
623   Maximum number of inline iterations
625 - `--inline-memcpy`
627   Inline memcpy using 'rep movsb' instruction (X86-only)
629 - `--inline-small-functions`
631   Inline functions if increase in size is less than defined by -inline-small-
632   functions-bytes
634 - `--inline-small-functions-bytes=<uint>`
636   Max number of bytes for the function to be considered small for inlining
637   purposes
639 - `--instrument`
641   Instrument code to generate accurate profile data
643 - `--iterative-guess`
645   In non-LBR mode, guess edge counts using iterative technique
647 - `--jt-footprint-optimize-for-icache`
649   With jt-footprint-reduction, only process PIC jumptables and turn off other
650   transformations that increase code size
652 - `--jt-footprint-reduction`
654   Make jump tables size smaller at the cost of using more instructions at jump
655   sites
657 - `--jump-tables=<value>`
659   Jump tables support (default=basic)
660   - `none`: do not optimize functions with jump tables
661   - `basic`: optimize functions with jump tables
662   - `move`: move jump tables to a separate section
663   - `split`: split jump tables section into hot and cold based on function
664   execution frequency
665   - `aggressive`: aggressively split jump tables section based on usage of the
666   tables
668 - `--keep-nops`
670   Keep no-op instructions. By default they are removed.
672 - `--lite-threshold-count=<uint>`
674   Similar to '-lite-threshold-pct' but specify threshold using absolute function
675   call count. I.e. limit processing to functions executed at least the specified
676   number of times.
678 - `--lite-threshold-pct=<uint>`
680   Threshold (in percent) for selecting functions to process in lite mode. Higher
681   threshold means fewer functions to process. E.g threshold of 90 means only top
682   10 percent of functions with profile will be processed.
684 - `--match-with-call-graph`
686   Match functions with call graph
688 - `--memcpy1-spec=<func1,func2:cs1:cs2,func3:cs1,...>`
690   List of functions with call sites for which to specialize memcpy() for size 1
692 - `--min-branch-clusters`
694   Use a modified clustering algorithm geared towards minimizing branches
696 - `--name-similarity-function-matching-threshold=<uint>`
698   Match functions using namespace and edit distance.
700 - `--no-inline`
702   Disable all inlining (overrides other inlining options)
704 - `--no-scan`
706   Do not scan cold functions for external references (may result in slower binary)
708 - `--peepholes=<value>`
710   Enable peephole optimizations
711   - `none`: disable peepholes
712   - `double-jumps`: remove double jumps when able
713   - `tailcall-traps`: insert tail call traps
714   - `useless-branches`: remove useless conditional branches
715   - `all`: enable all peephole optimizations
717 - `--plt=<value>`
719   Optimize PLT calls (requires linking with -znow)
720   - `none`: do not optimize PLT calls
721   - `hot`: optimize executed (hot) PLT calls
722   - `all`: optimize all PLT calls
724 - `--preserve-blocks-alignment`
726   Try to preserve basic block alignment
728 - `--profile-ignore-hash`
730   Ignore hash while reading function profile
732 - `--profile-use-dfs`
734   Use DFS order for YAML profile
736 - `--reg-reassign`
738   Reassign registers so as to avoid using REX prefixes in hot code
740 - `--reorder-blocks=<value>`
742   Change layout of basic blocks in a function
743   - `none`: do not reorder basic blocks
744   - `reverse`: layout blocks in reverse order
745   - `normal`: perform optimal layout based on profile
746   - `branch-predictor`: perform optimal layout prioritizing branch predictions
747   - `cache`: perform optimal layout prioritizing I-cache behavior
748   - `cache+`: perform layout optimizing I-cache behavior
749   - `ext-tsp`: perform layout optimizing I-cache behavior
750   - `cluster-shuffle`: perform random layout of clusters
752 - `--reorder-data=<section1,section2,section3,...>`
754   List of sections to reorder
756 - `--reorder-data-algo=<value>`
758   Algorithm used to reorder data sections
759   - `count`: sort hot data by read counts
760   - `funcs`: sort hot data by hot function usage and count
762 - `--reorder-data-inplace`
764   Reorder data sections in place
766 - `--reorder-data-max-bytes=<uint>`
768   Maximum number of bytes to reorder
770 - `--reorder-data-max-symbols=<uint>`
772   Maximum number of symbols to reorder
774 - `--reorder-functions=<value>`
776   Reorder and cluster functions (works only with relocations)
777   - `none`: do not reorder functions
778   - `exec-count`: order by execution count
779   - `hfsort`: use hfsort algorithm
780   - `hfsort+`: use cache-directed sort
781   - `cdsort`: use cache-directed sort
782   - `pettis-hansen`: use Pettis-Hansen algorithm
783   - `random`: reorder functions randomly
784   - `user`: use function order specified by -function-order
786 - `--reorder-functions-use-hot-size`
788   Use a function's hot size when doing clustering
790 - `--report-bad-layout=<uint>`
792   Print top <uint> functions with suboptimal code layout on input
794 - `--report-stale`
796   Print the list of functions with stale profile
798 - `--runtime-hugify-lib=<string>`
800   Specify file name of the runtime hugify library
802 - `--runtime-instrumentation-lib=<string>`
804   Specify file name of the runtime instrumentation library
806 - `--sctc-mode=<value>`
808   Mode for simplify conditional tail calls
809   - `always`: always perform sctc
810   - `preserve`: only perform sctc when branch direction is preserved
811   - `heuristic`: use branch prediction data to control sctc
813 - `--sequential-disassembly`
815   Performs disassembly sequentially
817 - `--shrink-wrapping-threshold=<uint>`
819   Percentage of prologue execution count to use as threshold when evaluating
820   whether a block is cold enough to be profitable to move eligible spills there
822 - `--simplify-conditional-tail-calls`
824   Simplify conditional tail calls by removing unnecessary jumps
826 - `--simplify-rodata-loads`
828   Simplify loads from read-only sections by replacing the memory operand with
829   the constant found in the corresponding section
831 - `--split-align-threshold=<uint>`
833   When deciding to split a function, apply this alignment while doing the size
834   comparison (see -split-threshold). Default value: 2.
836 - `--split-all-cold`
838   Outline as many cold basic blocks as possible
840 - `--split-eh`
842   Split C++ exception handling code
844 - `--split-functions`
846   Split functions into fragments
848 - `--split-strategy=<value>`
850   Strategy used to partition blocks into fragments
851   - `profile2`: split each function into a hot and cold fragment using profiling
852   information
853   - `cdsplit`: split each function into a hot, warm, and cold fragment using
854   profiling information
855   - `random2`: split each function into a hot and cold fragment at a randomly
856   chosen split point (ignoring any available profiling information)
857   - `randomN`: split each function into N fragments at a randomly chosen split
858   points (ignoring any available profiling information)
859   - `all`: split all basic blocks of each function into fragments such that each
860   fragment contains exactly a single basic block
862 - `--split-threshold=<uint>`
864   Split function only if its main size is reduced by more than given amount of
865   bytes. Default value: 0, i.e. split iff the size is reduced. Note that on some
866   architectures the size can increase after splitting.
868 - `--stale-matching-max-func-size=<uint>`
870   The maximum size of a function to consider for inference.
872 - `--stale-matching-min-matched-block=<uint>`
874   Percentage threshold of matched basic blocks at which stale profile inference
875   is executed.
877 - `--stale-threshold=<uint>`
879   Maximum percentage of stale functions to tolerate (default: 100)
881 - `--stoke`
883   Turn on the stoke analysis
885 - `--strip-rep-ret`
887   Strip 'repz' prefix from 'repz retq' sequence (on by default)
889 - `--tail-duplication=<value>`
891   Duplicate unconditional branches that cross a cache line
892   - `none`: do not apply
893   - `aggressive`: aggressive strategy
894   - `moderate`: moderate strategy
895   - `cache`: cache-aware duplication strategy
897 - `--tsp-threshold=<uint>`
899   Maximum number of hot basic blocks in a function for which to use a precise
900   TSP solution while re-ordering basic blocks
902 - `--use-aggr-reg-reassign`
904   Use register liveness analysis to try to find more opportunities for -reg-
905   reassign optimization
907 - `--use-compact-aligner`
909   Use compact approach for aligning functions
911 - `--use-edge-counts`
913   Use edge count data when doing clustering
915 - `--verify-cfg`
917   Verify the CFG after every pass
919 - `--x86-align-branch-boundary-hot-only`
921   Only apply branch boundary alignment in hot code
923 - `--x86-strip-redundant-address-size`
925   Remove redundant Address-Size override prefix
927 ### BOLT options in relocation mode:
929 - `--align-macro-fusion=<value>`
931   Fix instruction alignment for macro-fusion (x86 relocation mode)
932   - `none`: do not insert alignment no-ops for macro-fusion
933   - `hot`: only insert alignment no-ops on hot execution paths (default)
934   - `all`: always align instructions to allow macro-fusion
936 ### BOLT instrumentation options:
938 `llvm-bolt <executable> -instrument [-o outputfile] <instrumented-executable>`
940 - `--conservative-instrumentation`
942   Disable instrumentation optimizations that sacrifice profile accuracy (for
943   debugging, default: false)
945 - `--instrument-calls`
947   Record profile for inter-function control flow activity (default: true)
949 - `--instrument-hot-only`
951   Only insert instrumentation on hot functions (needs profile, default: false)
953 - `--instrumentation-binpath=<string>`
955   Path to instrumented binary in case if /proc/self/map_files is not accessible
956   due to access restriction issues
958 - `--instrumentation-file=<string>`
960   File name where instrumented profile will be saved (default: /tmp/prof.fdata)
962 - `--instrumentation-file-append-pid`
964   Append PID to saved profile file name (default: false)
966 - `--instrumentation-no-counters-clear`
968   Don't clear counters across dumps (use with instrumentation-sleep-time option)
970 - `--instrumentation-sleep-time=<uint>`
972   Interval between profile writes (default: 0 = write only at program end).
973   This is useful for service workloads when you want to dump profile every X
974   minutes or if you are killing the program and the profile is not being dumped
975   at the end.
977 - `--instrumentation-wait-forks`
979   Wait until all forks of instrumented process will finish (use with
980   instrumentation-sleep-time option)
982 ### BOLT printing options:
984 - `--print-aliases`
986   Print aliases when printing objects
988 - `--print-all`
990   Print functions after each stage
992 - `--print-cfg`
994   Print functions after CFG construction
996 - `--print-debug-info`
998   Print debug info when printing functions
1000 - `--print-disasm`
1002   Print function after disassembly
1004 - `--print-dyno-opcode-stats=<uint>`
1006   Print per instruction opcode dyno stats and the functionnames:BB offsets of
1007   the nth highest execution counts
1009 - `--print-dyno-stats-only`
1011   While printing functions output dyno-stats and skip instructions
1013 - `--print-exceptions`
1015   Print exception handling data
1017 - `--print-globals`
1019   Print global symbols after disassembly
1021 - `--print-jump-tables`
1023   Print jump tables
1025 - `--print-loops`
1027   Print loop related information
1029 - `--print-mem-data`
1031   Print memory data annotations when printing functions
1033 - `--print-normalized`
1035   Print functions after CFG is normalized
1037 - `--print-only=<func1,func2,func3,...>`
1039   List of functions to print
1041 - `--print-orc`
1043   Print ORC unwind information for instructions
1045 - `--print-profile`
1047   Print functions after attaching profile
1049 - `--print-profile-stats`
1051   Print profile quality/bias analysis
1053 - `--print-pseudo-probes=<value>`
1055   Print pseudo probe info
1056   - `decode`: decode probes section from binary
1057   - `address_conversion`: update address2ProbesMap with output block address
1058   - `encoded_probes`: display the encoded probes in binary section
1059   - `all`: enable all debugging printout
1061 - `--print-relocations`
1063   Print relocations when printing functions/objects
1065 - `--print-reordered-data`
1067   Print section contents after reordering
1069 - `--print-retpoline-insertion`
1071   Print functions after retpoline insertion pass
1073 - `--print-sdt`
1075   Print all SDT markers
1077 - `--print-sections`
1079   Print all registered sections
1081 - `--print-unknown`
1083   Print names of functions with unknown control flow
1085 - `--time-build`
1087   Print time spent constructing binary functions
1089 - `--time-rewrite`
1091   Print time spent in rewriting passes
1093 - `--print-after-branch-fixup`
1095   Print function after fixing local branches
1097 - `--print-after-jt-footprint-reduction`
1099   Print function after jt-footprint-reduction pass
1101 - `--print-after-lowering`
1103   Print function after instruction lowering
1105 - `--print-cache-metrics`
1107   Calculate and print various metrics for instruction cache
1109 - `--print-clusters`
1111   Print clusters
1113 - `--print-estimate-edge-counts`
1115   Print function after edge counts are set for no-LBR profile
1117 - `--print-finalized`
1119   Print function after CFG is finalized
1121 - `--print-fix-relaxations`
1123   Print functions after fix relaxations pass
1125 - `--print-fix-riscv-calls`
1127   Print functions after fix RISCV calls pass
1129 - `--print-fop`
1131   Print functions after frame optimizer pass
1133 - `--print-function-statistics=<uint>`
1135   Print statistics about basic block ordering
1137 - `--print-icf`
1139   Print functions after ICF optimization
1141 - `--print-icp`
1143   Print functions after indirect call promotion
1145 - `--print-inline`
1147   Print functions after inlining optimization
1149 - `--print-large-functions`
1151   Print functions that could not be overwritten due to excessive size
1153 - `--print-longjmp`
1155   Print functions after longjmp pass
1157 - `--print-optimize-bodyless`
1159   Print functions after bodyless optimization
1161 - `--print-output-address-range`
1163   Print output address range for each basic block in the function
1164   whenBinaryFunction::print is called
1166 - `--print-peepholes`
1168   Print functions after peephole optimization
1170 - `--print-plt`
1172   Print functions after PLT optimization
1174 - `--print-regreassign`
1176   Print functions after regreassign pass
1178 - `--print-reordered`
1180   Print functions after layout optimization
1182 - `--print-reordered-functions`
1184   Print functions after clustering
1186 - `--print-sctc`
1188   Print functions after conditional tail call simplification
1190 - `--print-simplify-rodata-loads`
1192   Print functions after simplification of RO data loads
1194 - `--print-sorted-by=<value>`
1196   Print functions sorted by order of dyno stats
1197   - `executed-forward-branches`: executed forward branches
1198   - `taken-forward-branches`: taken forward branches
1199   - `executed-backward-branches`: executed backward branches
1200   - `taken-backward-branches`: taken backward branches
1201   - `executed-unconditional-branches`: executed unconditional branches
1202   - `all-function-calls`: all function calls
1203   - `indirect-calls`: indirect calls
1204   - `PLT-calls`: PLT calls
1205   - `executed-instructions`: executed instructions
1206   - `executed-load-instructions`: executed load instructions
1207   - `executed-store-instructions`: executed store instructions
1208   - `taken-jump-table-branches`: taken jump table branches
1209   - `taken-unknown-indirect-branches`: taken unknown indirect branches
1210   - `total-branches`: total branches
1211   - `taken-branches`: taken branches
1212   - `non-taken-conditional-branches`: non-taken conditional branches
1213   - `taken-conditional-branches`: taken conditional branches
1214   - `all-conditional-branches`: all conditional branches
1215   - `linker-inserted-veneer-calls`: linker-inserted veneer calls
1216   - `all`: sorted by all names
1218 - `--print-sorted-by-order=<value>`
1220   Use ascending or descending order when printing functions ordered by dyno stats
1222 - `--print-split`
1224   Print functions after code splitting
1226 - `--print-stoke`
1228   Print functions after stoke analysis
1230 - `--print-uce`
1232   Print functions after unreachable code elimination
1234 - `--print-veneer-elimination`
1236   Print functions after veneer elimination pass
1238 - `--time-opts`
1240   Print time spent in each optimization
1242 - `--print-all-options`
1244   Print all option values after command line parsing
1246 - `--print-options`
1248   Print non-default options after command line parsing