1 # BOLT - a post-link optimizer developed to speed up large applications
5 `llvm-bolt <executable> [-o outputfile] <executable>.bolt [-data=perf.fdata] [options]`
17 Display available options (--help-hidden for more)
21 Display all available options
25 Display list of available options (--help-list-hidden for more)
27 - `--help-list-hidden`
29 Display list of all available options
33 Display the version of this program
39 Write bolt info section in the output binary
47 Save recorded profile to a file
49 ### BOLT generic options:
51 - `--align-text=<uint>`
53 Alignment of .text section
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
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)
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
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.
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
134 Dump parsed bolt data for debugging
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
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
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.
175 Path and name to DWP file.
179 Print execution info based on profile
183 Print dyno stats after each stage
185 - `--dyno-stats-scale=<uint>`
187 Scale to be applied while reporting dyno stats
191 Write BOLT Address Translation tables
193 - `--force-data-relocations`
195 Force relocations to data sections to always be processed
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)
219 Hot data symbols support (relocation mode)
221 - `--hot-functions-at-end`
223 If reorder-functions is used, order functions putting hottest last
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
243 Keep or generate .debug_aranges section if .gdb_index is written
247 Preserve intermediate .o file
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
275 Use regular size pages for code alignment
279 Disable multithreading
281 - `--pad-funcs=<func1:pad1,func2:pad2,func3:pad3,...>`
283 List of functions to pad with amount of bytes
287 Print mappings in the legend, between characters/blocks and text sections
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
306 Use relocations in the binary (default=autodetect)
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
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
342 Assume that execution stops at trap instruction
344 - `--thread-count=<uint>`
348 - `--top-called-limit=<uint>`
350 Maximum number of functions to print in top called functions section
354 In relocation mode trap upon entry to any function that uses AVX-512
359 Insert traps in old function bodies (relocation mode)
361 - `--update-debug-sections`
363 Update DWARF debug sections of the executable
367 Use GNU_STACK program header for new segment (workaround for issues with
372 Re-use space in old .text if possible (relocation mode)
376 Set verbosity level for diagnostic output
380 Output a single dwarf package file (dwp) instead of multiple non-relocatable
381 dwarf object files (dwo).
383 ### BOLT optimization options:
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
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
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
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
494 Share stubs across functions
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).
503 Fold functions with identical code
504 - `all`: Enable identical code folding
505 - `none`: Disable identical code folding (default)
506 - `safe`: Enable safe identical code folding
510 Alias for --indirect-call-promotion
512 - `--icp-calls-remaining-percent-threshold=<uint>`
514 The percentage threshold against remaining unpromoted indirect call count for
515 the promotion for calls
519 Alias for --indirect-call-promotion-calls-topn
521 - `--icp-calls-total-percent-threshold=<uint>`
523 The percentage threshold against total count for the promotion for calls
525 - `--icp-eliminate-loads`
527 Enable load elimination using memory profiling data when performing ICP
529 - `--icp-funcs=<func1,func2,func3,...>`
531 List of functions to enable ICP for
535 Only promote call targets eligible for inlining
537 - `--icp-jt-remaining-percent-threshold=<uint>`
539 The percentage threshold against remaining unpromoted indirect call count for
540 the promotion for jump tables
544 Alias for --icp-jump-tables-targets
548 Alias for --indirect-call-promotion-jump-tables-topn
550 - `--icp-jt-total-percent-threshold=<uint>`
552 The percentage threshold against total count for the promotion for jump tables
554 - `--icp-jump-tables-targets`
556 For jump tables, optimize indirect jmp targets instead of indices
558 - `--icp-mp-threshold`
560 Alias for --indirect-call-promotion-mispredict-threshold
562 - `--icp-old-code-sequence`
564 Use old code sequence for promoted calls
566 - `--icp-top-callsites=<uint>`
568 Optimize hottest calls until at least this percentage of all indirect calls
569 frequency is covered. 0 = all callsites
573 Alias for --indirect-call-promotion-topn
577 Alias for --indirect-call-promotion-use-mispredicts
579 - `--indirect-call-promotion=<value>`
581 Indirect call promotion
582 - `none`: do not perform indirect call promotion
583 - `calls`: perform ICP on indirect calls
584 - `jump-tables`: perform ICP on jump tables
585 - `all`: perform ICP on calls and jump tables
587 - `--indirect-call-promotion-calls-topn=<uint>`
589 Limit number of targets to consider when doing indirect call promotion on
592 - `--indirect-call-promotion-jump-tables-topn=<uint>`
594 Limit number of targets to consider when doing indirect call promotion on jump
597 - `--indirect-call-promotion-topn=<uint>`
599 Limit number of targets to consider when doing indirect call promotion. 0 = no
602 - `--indirect-call-promotion-use-mispredicts`
604 Use misprediction frequency for determining whether or not ICP should be
605 applied at a callsite. The -indirect-call-promotion-mispredict-threshold
606 value will be used by this heuristic
608 - `--infer-fall-throughs`
610 Infer execution count for fall-through blocks
612 - `--infer-stale-profile`
614 Infer counts from stale profile data.
622 Adjust function profile after inlining
624 - `--inline-limit=<uint>`
626 Maximum number of call sites to inline
628 - `--inline-max-iters=<uint>`
630 Maximum number of inline iterations
634 Inline memcpy using 'rep movsb' instruction (X86-only)
636 - `--inline-small-functions`
638 Inline functions if increase in size is less than defined by -inline-small-
641 - `--inline-small-functions-bytes=<uint>`
643 Max number of bytes for the function to be considered small for inlining
648 Instrument code to generate accurate profile data
650 - `--iterative-guess`
652 In non-LBR mode, guess edge counts using iterative technique
654 - `--jt-footprint-optimize-for-icache`
656 With jt-footprint-reduction, only process PIC jumptables and turn off other
657 transformations that increase code size
659 - `--jt-footprint-reduction`
661 Make jump tables size smaller at the cost of using more instructions at jump
664 - `--jump-tables=<value>`
666 Jump tables support (default=basic)
667 - `none`: do not optimize functions with jump tables
668 - `basic`: optimize functions with jump tables
669 - `move`: move jump tables to a separate section
670 - `split`: split jump tables section into hot and cold based on function
672 - `aggressive`: aggressively split jump tables section based on usage of the
677 Keep no-op instructions. By default they are removed.
679 - `--lite-threshold-count=<uint>`
681 Similar to '-lite-threshold-pct' but specify threshold using absolute function
682 call count. I.e. limit processing to functions executed at least the specified
685 - `--lite-threshold-pct=<uint>`
687 Threshold (in percent) for selecting functions to process in lite mode. Higher
688 threshold means fewer functions to process. E.g threshold of 90 means only top
689 10 percent of functions with profile will be processed.
691 - `--match-with-call-graph`
693 Match functions with call graph
695 - `--memcpy1-spec=<func1,func2:cs1:cs2,func3:cs1,...>`
697 List of functions with call sites for which to specialize memcpy() for size 1
699 - `--min-branch-clusters`
701 Use a modified clustering algorithm geared towards minimizing branches
703 - `--name-similarity-function-matching-threshold=<uint>`
705 Match functions using namespace and edit distance.
709 Disable all inlining (overrides other inlining options)
713 Do not scan cold functions for external references (may result in slower binary)
715 - `--peepholes=<value>`
717 Enable peephole optimizations
718 - `none`: disable peepholes
719 - `double-jumps`: remove double jumps when able
720 - `tailcall-traps`: insert tail call traps
721 - `useless-branches`: remove useless conditional branches
722 - `all`: enable all peephole optimizations
726 Optimize PLT calls (requires linking with -znow)
727 - `none`: do not optimize PLT calls
728 - `hot`: optimize executed (hot) PLT calls
729 - `all`: optimize all PLT calls
731 - `--preserve-blocks-alignment`
733 Try to preserve basic block alignment
735 - `--profile-ignore-hash`
737 Ignore hash while reading function profile
739 - `--profile-use-dfs`
741 Use DFS order for YAML profile
745 Reassign registers so as to avoid using REX prefixes in hot code
747 - `--reorder-blocks=<value>`
749 Change layout of basic blocks in a function
750 - `none`: do not reorder basic blocks
751 - `reverse`: layout blocks in reverse order
752 - `normal`: perform optimal layout based on profile
753 - `branch-predictor`: perform optimal layout prioritizing branch predictions
754 - `cache`: perform optimal layout prioritizing I-cache behavior
755 - `cache+`: perform layout optimizing I-cache behavior
756 - `ext-tsp`: perform layout optimizing I-cache behavior
757 - `cluster-shuffle`: perform random layout of clusters
759 - `--reorder-data=<section1,section2,section3,...>`
761 List of sections to reorder
763 - `--reorder-data-algo=<value>`
765 Algorithm used to reorder data sections
766 - `count`: sort hot data by read counts
767 - `funcs`: sort hot data by hot function usage and count
769 - `--reorder-data-inplace`
771 Reorder data sections in place
773 - `--reorder-data-max-bytes=<uint>`
775 Maximum number of bytes to reorder
777 - `--reorder-data-max-symbols=<uint>`
779 Maximum number of symbols to reorder
781 - `--reorder-functions=<value>`
783 Reorder and cluster functions (works only with relocations)
784 - `none`: do not reorder functions
785 - `exec-count`: order by execution count
786 - `hfsort`: use hfsort algorithm
787 - `hfsort+`: use cache-directed sort
788 - `cdsort`: use cache-directed sort
789 - `pettis-hansen`: use Pettis-Hansen algorithm
790 - `random`: reorder functions randomly
791 - `user`: use function order specified by -function-order
793 - `--reorder-functions-use-hot-size`
795 Use a function's hot size when doing clustering
797 - `--report-bad-layout=<uint>`
799 Print top <uint> functions with suboptimal code layout on input
803 Print the list of functions with stale profile
805 - `--runtime-hugify-lib=<string>`
807 Specify file name of the runtime hugify library
809 - `--runtime-instrumentation-lib=<string>`
811 Specify file name of the runtime instrumentation library
813 - `--sctc-mode=<value>`
815 Mode for simplify conditional tail calls
816 - `always`: always perform sctc
817 - `preserve`: only perform sctc when branch direction is preserved
818 - `heuristic`: use branch prediction data to control sctc
820 - `--sequential-disassembly`
822 Performs disassembly sequentially
824 - `--shrink-wrapping-threshold=<uint>`
826 Percentage of prologue execution count to use as threshold when evaluating
827 whether a block is cold enough to be profitable to move eligible spills there
829 - `--simplify-conditional-tail-calls`
831 Simplify conditional tail calls by removing unnecessary jumps
833 - `--simplify-rodata-loads`
835 Simplify loads from read-only sections by replacing the memory operand with
836 the constant found in the corresponding section
838 - `--split-align-threshold=<uint>`
840 When deciding to split a function, apply this alignment while doing the size
841 comparison (see -split-threshold). Default value: 2.
845 Outline as many cold basic blocks as possible
849 Split C++ exception handling code
851 - `--split-functions`
853 Split functions into fragments
855 - `--split-strategy=<value>`
857 Strategy used to partition blocks into fragments
858 - `profile2`: split each function into a hot and cold fragment using profiling
860 - `cdsplit`: split each function into a hot, warm, and cold fragment using
861 profiling information
862 - `random2`: split each function into a hot and cold fragment at a randomly
863 chosen split point (ignoring any available profiling information)
864 - `randomN`: split each function into N fragments at a randomly chosen split
865 points (ignoring any available profiling information)
866 - `all`: split all basic blocks of each function into fragments such that each
867 fragment contains exactly a single basic block
869 - `--split-threshold=<uint>`
871 Split function only if its main size is reduced by more than given amount of
872 bytes. Default value: 0, i.e. split iff the size is reduced. Note that on some
873 architectures the size can increase after splitting.
875 - `--stale-matching-max-func-size=<uint>`
877 The maximum size of a function to consider for inference.
879 - `--stale-matching-min-matched-block=<uint>`
881 Percentage threshold of matched basic blocks at which stale profile inference
884 - `--stale-threshold=<uint>`
886 Maximum percentage of stale functions to tolerate (default: 100)
890 Turn on the stoke analysis
894 Strip 'repz' prefix from 'repz retq' sequence (on by default)
896 - `--tail-duplication=<value>`
898 Duplicate unconditional branches that cross a cache line
899 - `none`: do not apply
900 - `aggressive`: aggressive strategy
901 - `moderate`: moderate strategy
902 - `cache`: cache-aware duplication strategy
904 - `--tsp-threshold=<uint>`
906 Maximum number of hot basic blocks in a function for which to use a precise
907 TSP solution while re-ordering basic blocks
909 - `--use-aggr-reg-reassign`
911 Use register liveness analysis to try to find more opportunities for -reg-
912 reassign optimization
914 - `--use-compact-aligner`
916 Use compact approach for aligning functions
918 - `--use-edge-counts`
920 Use edge count data when doing clustering
924 Verify the CFG after every pass
926 - `--x86-align-branch-boundary-hot-only`
928 Only apply branch boundary alignment in hot code
930 - `--x86-strip-redundant-address-size`
932 Remove redundant Address-Size override prefix
934 ### BOLT instrumentation options:
936 `llvm-bolt <executable> -instrument [-o outputfile] <instrumented-executable>`
938 - `--conservative-instrumentation`
940 Disable instrumentation optimizations that sacrifice profile accuracy (for
941 debugging, default: false)
943 - `--instrument-calls`
945 Record profile for inter-function control flow activity (default: true)
947 - `--instrument-hot-only`
949 Only insert instrumentation on hot functions (needs profile, default: false)
951 - `--instrumentation-binpath=<string>`
953 Path to instrumented binary in case if /proc/self/map_files is not accessible
954 due to access restriction issues
956 - `--instrumentation-file=<string>`
958 File name where instrumented profile will be saved (default: /tmp/prof.fdata)
960 - `--instrumentation-file-append-pid`
962 Append PID to saved profile file name (default: false)
964 - `--instrumentation-no-counters-clear`
966 Don't clear counters across dumps (use with instrumentation-sleep-time option)
968 - `--instrumentation-sleep-time=<uint>`
970 Interval between profile writes (default: 0 = write only at program end).
971 This is useful for service workloads when you want to dump profile every X
972 minutes or if you are killing the program and the profile is not being dumped
975 - `--instrumentation-wait-forks`
977 Wait until all forks of instrumented process will finish (use with
978 instrumentation-sleep-time option)
980 ### BOLT printing options:
984 Print aliases when printing objects
988 Print functions after each stage
992 Print functions after CFG construction
994 - `--print-debug-info`
996 Print debug info when printing functions
1000 Print function after disassembly
1002 - `--print-dyno-opcode-stats=<uint>`
1004 Print per instruction opcode dyno stats and the functionnames:BB offsets of
1005 the nth highest execution counts
1007 - `--print-dyno-stats-only`
1009 While printing functions output dyno-stats and skip instructions
1011 - `--print-exceptions`
1013 Print exception handling data
1017 Print global symbols after disassembly
1019 - `--print-jump-tables`
1025 Print loop related information
1027 - `--print-mem-data`
1029 Print memory data annotations when printing functions
1031 - `--print-normalized`
1033 Print functions after CFG is normalized
1035 - `--print-only=<func1,func2,func3,...>`
1037 List of functions to print
1041 Print ORC unwind information for instructions
1045 Print functions after attaching profile
1047 - `--print-profile-stats`
1049 Print profile quality/bias analysis
1051 - `--print-pseudo-probes=<value>`
1053 Print pseudo probe info
1054 - `decode`: decode probes section from binary
1055 - `address_conversion`: update address2ProbesMap with output block address
1056 - `encoded_probes`: display the encoded probes in binary section
1057 - `all`: enable all debugging printout
1059 - `--print-relocations`
1061 Print relocations when printing functions/objects
1063 - `--print-reordered-data`
1065 Print section contents after reordering
1067 - `--print-retpoline-insertion`
1069 Print functions after retpoline insertion pass
1073 Print all SDT markers
1075 - `--print-sections`
1077 Print all registered sections
1081 Print names of functions with unknown control flow
1085 Print time spent constructing binary functions
1089 Print time spent in rewriting passes
1091 - `--print-after-branch-fixup`
1093 Print function after fixing local branches
1095 - `--print-after-jt-footprint-reduction`
1097 Print function after jt-footprint-reduction pass
1099 - `--print-after-lowering`
1101 Print function after instruction lowering
1103 - `--print-cache-metrics`
1105 Calculate and print various metrics for instruction cache
1107 - `--print-clusters`
1111 - `--print-estimate-edge-counts`
1113 Print function after edge counts are set for no-LBR profile
1115 - `--print-finalized`
1117 Print function after CFG is finalized
1119 - `--print-fix-relaxations`
1121 Print functions after fix relaxations pass
1123 - `--print-fix-riscv-calls`
1125 Print functions after fix RISCV calls pass
1129 Print functions after frame optimizer pass
1131 - `--print-function-statistics=<uint>`
1133 Print statistics about basic block ordering
1137 Print functions after ICF optimization
1141 Print functions after indirect call promotion
1145 Print functions after inlining optimization
1147 - `--print-large-functions`
1149 Print functions that could not be overwritten due to excessive size
1153 Print functions after longjmp pass
1155 - `--print-optimize-bodyless`
1157 Print functions after bodyless optimization
1159 - `--print-output-address-range`
1161 Print output address range for each basic block in the function
1162 whenBinaryFunction::print is called
1164 - `--print-peepholes`
1166 Print functions after peephole optimization
1170 Print functions after PLT optimization
1172 - `--print-regreassign`
1174 Print functions after regreassign pass
1176 - `--print-reordered`
1178 Print functions after layout optimization
1180 - `--print-reordered-functions`
1182 Print functions after clustering
1186 Print functions after conditional tail call simplification
1188 - `--print-simplify-rodata-loads`
1190 Print functions after simplification of RO data loads
1192 - `--print-sorted-by=<value>`
1194 Print functions sorted by order of dyno stats
1195 - `executed-forward-branches`: executed forward branches
1196 - `taken-forward-branches`: taken forward branches
1197 - `executed-backward-branches`: executed backward branches
1198 - `taken-backward-branches`: taken backward branches
1199 - `executed-unconditional-branches`: executed unconditional branches
1200 - `all-function-calls`: all function calls
1201 - `indirect-calls`: indirect calls
1202 - `PLT-calls`: PLT calls
1203 - `executed-instructions`: executed instructions
1204 - `executed-load-instructions`: executed load instructions
1205 - `executed-store-instructions`: executed store instructions
1206 - `taken-jump-table-branches`: taken jump table branches
1207 - `taken-unknown-indirect-branches`: taken unknown indirect branches
1208 - `total-branches`: total branches
1209 - `taken-branches`: taken branches
1210 - `non-taken-conditional-branches`: non-taken conditional branches
1211 - `taken-conditional-branches`: taken conditional branches
1212 - `all-conditional-branches`: all conditional branches
1213 - `linker-inserted-veneer-calls`: linker-inserted veneer calls
1214 - `all`: sorted by all names
1216 - `--print-sorted-by-order=<value>`
1218 Use ascending or descending order when printing functions ordered by dyno stats
1222 Print functions after code splitting
1226 Print functions after stoke analysis
1230 Print functions after unreachable code elimination
1232 - `--print-veneer-elimination`
1234 Print functions after veneer elimination pass
1238 Print time spent in each optimization
1240 - `--print-all-options`
1242 Print all option values after command line parsing
1246 Print non-default options after command line parsing