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