LLI(1)

๐Ÿ’… NAME ๐Ÿ’…

okay so welcome to lli(1), bestie โ€” this is the manual page for lli 18. She's the LLVM interpreter & dynamic compiler, and yes, she's literally iconic. ๐Ÿฆ‹

lli โ€” manual page for lli 18. No cap, this is the whole vibe. ๐Ÿ’–


โœจ DESCRIPTION โœจ

OVERVIEW: llvm interpreter & dynamic compiler โ€” she interprets, she dynamically compiles, she does the most. ๐Ÿ’…

USAGE:

lli [options] <input bitcode> <program arguments>...

OPTIONS: buckle up, bestie, there are a LOT of them and they all matter. ๐ŸŒธ

๐ŸŽจ Color Options ๐ŸŽจ

  • --color โ€” Use colors in output (default=autodetect). Let her serve some color, or let autodetect decide the vibe. ๐ŸŒˆ

โš™๏ธ General options โš™๏ธ

  • -O <char> โ€” Optimization level. Pick from [-O0, -O1, -O2, or -O3] (default = '-O2'). Choose your chaos level wisely. ๐Ÿ”ฅ
  • --aarch64-neon-syntax=<value> โ€” Choose the style of NEON code to emit from the AArch64 backend:
    • =generic โ€” Emit generic NEON assembly
    • =apple โ€” Emit Apple-style NEON assembly
  • --aarch64-use-aa โ€” Enable the use of AA during codegen. AA said yes. โœจ
  • --abort-on-max-devirt-iterations-reached โ€” Abort when the max iterations for the devirtualization CGSCC repeat pass is reached. Dramatic exit unlocked. ๐Ÿ’€
  • --addrsig โ€” Emit an address-significance table. Very signature, very slay. ๐ŸŽ€
  • --align-loops=<uint> โ€” Default alignment for loops. Keep those loops lined up. ๐Ÿงš
  • --allow-ginsert-as-artifact โ€” Allow G_INSERT to be considered an artifact. Hack around AMDGPU test infinite loops. Respect the hack. ๐Ÿ› ๏ธ
  • --amdgpu-atomic-optimizer-strategy=<value> โ€” Select DPP or Iterative strategy for scan:
    • =DPP โ€” Use DPP operations for scan
    • =Iterative โ€” Use Iterative approach for scan
    • =None โ€” Disable atomic optimizer
  • --amdgpu-bypass-slow-div โ€” Skip 64-bit divide for dynamic 32-bit values. Bye, slow div. ๐Ÿ‘‹
  • --amdgpu-disable-loop-alignment โ€” Do not align and prefetch loops. Loops get zero alignment energy today. ๐Ÿ™ˆ
  • --amdgpu-dpp-combine โ€” Enable DPP combiner. Combine the DPP. That's the whole note. ๐Ÿ’œ
  • --amdgpu-dump-hsa-metadata โ€” Dump AMDGPU HSA Metadata. Dump it, queen. ๐Ÿ—‘๏ธ
  • --amdgpu-enable-merge-m0 โ€” Merge and hoist M0 initializations. M0 is getting merged and hoisted. ๐ŸŒธ
  • --amdgpu-enable-power-sched โ€” Enable scheduling to minimize mAI power bursts. Power-conscious scheduling, we love to see it. โšก
  • --amdgpu-kernarg-preload-count=<uint> โ€” How many kernel arguments to preload onto SGPRs. Preload the args, bestie. ๐Ÿซถ
  • --amdgpu-promote-alloca-to-vector-limit=<uint> โ€” Maximum byte size to consider promote alloca to vector. Size limit for the alloca-to-vector promotion moment. ๐Ÿ“
  • --amdgpu-sdwa-peephole โ€” Enable SDWA peepholer. Peephole, but make it SDWA. ๐Ÿ‘€
  • --amdgpu-use-aa-in-codegen โ€” Enable the use of AA during codegen. AA is back and she's in codegen. โœจ
  • --amdgpu-verify-hsa-metadata โ€” Verify AMDGPU HSA Metadata. Trust but verify, bestie. ๐Ÿ”
  • --amdgpu-vgpr-index-mode โ€” Use GPR indexing mode instead of movrel for vector indexing. Index mode switch-up. ๐Ÿ’…
  • --arm-add-build-attributes โ€” no description given here โ€” she just exists, mysterious and iconic. ๐ŸŽ€
  • --arm-implicit-it=<value> โ€” Allow conditional instructions outside of an IT block:
    • =always โ€” Accept in both ISAs, emit implicit ITs in Thumb
    • =never โ€” Warn in ARM, reject in Thumb
    • =arm โ€” Accept in ARM, reject in Thumb
    • =thumb โ€” Warn in ARM, emit implicit ITs in Thumb
  • --asm-show-inst โ€” Emit internal instruction representation to assembly file. Show the internal representation, no hiding. ๐Ÿซฃ
  • --atomic-counter-update-promoted โ€” Do counter update using atomic fetch add for promoted counters only. Atomic fetch add, but only for the promoted ones. ๐Ÿ”ฅ
  • --atomic-first-counter โ€” Use atomic fetch add for first counter in a function (usually the entry counter). First counter gets the atomic treatment. ๐Ÿ‘‘
  • --basic-block-sections=<all | <function list (file)> | labels | none> โ€” Emit basic blocks into separate sections. Pick your basic-block section situation. ๐Ÿงฉ
  • --bounds-checking-single-trap โ€” Use one trap block per function. One trap, one function. ๐Ÿ’€
  • --bounds-checking-unique-traps โ€” Always use one trap per check. Every check gets its own trap. ๐Ÿ™ˆ
  • --bpf-stack-size=<int> โ€” Specify the BPF stack size limit. Stack size, specified. ๐Ÿ“š
  • --cfg-hide-cold-paths=<number> โ€” Hide blocks with relative frequency below the given value. Cold paths? Hidden. ๐ŸงŠ
  • --cfg-hide-deoptimize-paths โ€” listed with no description here. She's giving mystery. ๐Ÿ•ต๏ธ
  • --cfg-hide-unreachable-paths โ€” listed with no description here too. Also mysterious. ๐ŸŒ€
  • --code-model=<value> โ€” Choose code model:
    • =tiny โ€” Tiny code model
    • =small โ€” Small code model
    • =kernel โ€” Kernel code model
    • =medium โ€” Medium code model
    • =large โ€” Large code model
  • --compile-threads=<uint> โ€” Choose the number of compile threads (jit-kind=orc-lazy only). Thread count, but only for jit-kind=orc-lazy. ๐Ÿงต
  • --cost-kind=<value> โ€” Target cost kind:
    • =throughput โ€” Reciprocal throughput
    • =latency โ€” Instruction latency
    • =code-size โ€” Code size
    • =size-latency โ€” Code size and latency
  • --cs-profile-generate โ€” Perform context sensitive PGO instrumentation. Context sensitive PGO, periodt. ๐Ÿ“ˆ
  • --cs-profile-path=<string> โ€” Context sensitive profile file path. Drop the path. ๐Ÿ›ฃ๏ธ
  • --data-sections โ€” Emit data into separate sections. Data said separate sections, actually. ๐Ÿ“
  • --debug-entry-values โ€” Enable debug info for the debug entry values. Debug entry values get debug info. ๐Ÿ›
  • --debug-info-correlate โ€” Use debug info to correlate profiles. Deprecated, use -profile-correlate=debug-info. She said what she said. โš ๏ธ
  • --debugger-tune=<value> โ€” Tune debug info for a particular debugger:
    • =gdb โ€” gdb
    • =lldb โ€” lldb
    • =dbx โ€” dbx
    • =sce โ€” SCE targets (e.g. PS4)
  • --debugify-func-limit=<ulong> โ€” Set max number of processed functions per pass. Limit the functions per pass, bestie. ๐Ÿ”ข
  • --debugify-level=<value> โ€” Kind of debug info to add:
    • =locations โ€” Locations only
    • =location+variables โ€” Locations and Variables
  • --debugify-quiet โ€” Suppress verbose debugify output. Quiet mode: activated. ๐Ÿคซ
  • --denormal-fp-math=<value> โ€” Select which denormal numbers the code is permitted to require:
    • =ieee โ€” IEEE 754 denormal numbers
    • =preserve-sign โ€” the sign of a flushed-to-zero number is preserved in the sign of 0
    • =positive-zero โ€” denormals are flushed to positive zero
    • =dynamic โ€” denormals have unknown treatment
  • --denormal-fp-math-f32=<value> โ€” Select which denormal numbers the code is permitted to require for float:
    • =ieee โ€” IEEE 754 denormal numbers
    • =preserve-sign โ€” the sign of a flushed-to-zero number is preserved in the sign of 0
    • =positive-zero โ€” denormals are flushed to positive zero
    • =dynamic โ€” denormals have unknown treatment
  • --disable-auto-upgrade-debug-info โ€” Disable autoupgrade of debug info. No autoupgrade today. ๐Ÿšซ
  • --disable-i2p-p2i-opt โ€” Disables inttoptr/ptrtoint roundtrip optimization. The roundtrip optimization is disabled. ๐Ÿ˜ญ
  • --disable-lazy-compilation โ€” Disable JIT lazy compilation. No lazy compilation, we're doing this now. ๐Ÿ’…
  • --disable-promote-alloca-to-lds โ€” Disable promote alloca to LDS. Alloca-to-LDS promotion: off. ๐Ÿ™…
  • --disable-promote-alloca-to-vector โ€” Disable promote alloca to vector. Alloca-to-vector promotion: also off. ๐Ÿ™…
  • --disable-tail-calls โ€” Never emit tail calls. Never. Emit. Tail calls. ๐Ÿ’€
  • --dlopen=<string> โ€” Dynamic libraries to load before linking. Load the libraries first, then link. ๐Ÿซถ
  • --do-counter-promotion โ€” Do counter register promotion. Promote the counter register. ๐Ÿ‘‘
  • --dot-cfg-mssa=<file name for generated dot file> โ€” file name for generated dot file. Literally the file name for the generated dot file. ๐Ÿ“„
  • --dwarf-version=<int> โ€” Dwarf version. Pick the number. ๐Ÿงš
  • --dwarf64 โ€” Generate debugging info in the 64-bit DWARF format. 64-bit DWARF debug info, we love her. ๐ŸŒŸ
  • --emit-call-site-info โ€” Emit call site debug information, if debug information is enabled. Only if debug info is enabled, bestie. ๐Ÿ“ž
  • --emit-compact-unwind-non-canonical โ€” Whether to try to emit Compact Unwind for non canonical entries. Non-canonical entries might get Compact Unwind. ๐ŸŒ€
  • --emit-dwarf-unwind=<value> โ€” Whether to emit DWARF EH frame entries:
    • =always โ€” Always emit EH frame entries
    • =no-compact-unwind โ€” Only emit EH frame entries when compact unwind is not available
    • =default โ€” Use target platform default
  • --emscripten-cxx-exceptions-allowed=<string> โ€” The list of function names in which Emscripten-style exception handling is enabled (see emscripten EMSCRIPTEN_CATCHING_ALLOWED options). Function-name allowlist for the exception-handling vibe. ๐ŸŒธ
  • --emulated-tls โ€” Use emulated TLS model. TLS, but emulated. โœจ
  • --enable-approx-func-fp-math โ€” Enable FP math optimizations that assume approx func. FP math optimizations with approx func assumptions. ๐Ÿ”ฅ
  • --enable-cache-manager โ€” Use cache manager to save/load modules. Cache manager is handling save/load. ๐Ÿ—‚๏ธ
  • --enable-cse-in-irtranslator โ€” Should enable CSE in irtranslator. CSE in irtranslator, if enabled. ๐Ÿง 
  • --enable-cse-in-legalizer โ€” Should enable CSE in Legalizer. CSE in Legalizer, if enabled. ๐Ÿง 
  • --enable-emscripten-cxx-exceptions โ€” WebAssembly Emscripten-style exception handling. Emscripten-style exceptions, enabled. ๐Ÿฆ‹
  • --enable-emscripten-sjlj โ€” WebAssembly Emscripten-style setjmp/longjmp handling. setjmp/longjmp, but Emscripten-style. ๐ŸŽ€
  • --enable-gvn-hoist โ€” turn on the GVN hoisting pass (default = off). she lifts stuff out of loops, she's that girl โœจ
  • --enable-gvn-memdep โ€” no blurb on this one in the page, it's giving mysterious ๐Ÿ’…
  • --enable-gvn-sink โ€” turn on the GVN sinking pass (default = off). opposite energy from hoisting, equally iconic ๐Ÿซถ
  • --enable-jmc-instrument โ€” instrument functions with a call to __CheckForDebuggerJustMyCode
  • --enable-load-in-loop-pre โ€” no blurb, she's just there ๐Ÿ”ฅ
  • --enable-load-pre โ€” same deal, no description given ๐Ÿ˜ญ
  • --enable-loop-simplifycfg-term-folding โ€” no description in the page, lowkey a mystery ๐Ÿฆ‹
  • --enable-name-compression โ€” enable name/filename string compression โœจ
  • --enable-no-infs-fp-math โ€” enable FP math optimizations that assume no +-Infs
  • --enable-no-nans-fp-math โ€” enable FP math optimizations that assume no NaNs
  • --enable-no-signed-zeros-fp-math โ€” enable FP math optimizations that assume the sign of 0 is insignificant
  • --enable-no-trapping-fp-math โ€” enable setting the FP exceptions build attribute not to use exceptions
  • --enable-split-backedge-in-load-pre โ€” no blurb given ๐ŸŒธ
  • --enable-split-loopiv-heuristic โ€” enable loop iv regalloc heuristic
  • --enable-tlsdesc โ€” enable the use of TLS Descriptors
  • --enable-unsafe-fp-math โ€” enable optimizations that may decrease FP precision. heads up bestie, "unsafe" is right there in the name ๐Ÿ’€
  • --entry-function=<function> โ€” specify the entry function (default = 'main') of the executable
  • --exception-model=<value> โ€” exception model. pick your fighter:
    • =default โ€” default exception handling model
    • =dwarf โ€” DWARF-like CFI based exception handling
    • =sjlj โ€” SjLj exception handling
    • =arm โ€” ARM EHABI exceptions
    • =wineh โ€” Windows exception model
    • =wasm โ€” WebAssembly exception handling
  • --experimental-debug-variable-locations โ€” use experimental new value-tracking variable locations
  • --experimental-debuginfo-iterators โ€” enable communicating debuginfo positions through iterators, eliminating intrinsics
  • --extra-archive=<input archive> โ€” extra archive files to be loaded
  • --extra-module=<input bitcode> โ€” extra modules to be loaded
  • --extra-object=<input object> โ€” extra object files to be loaded
  • --fake-argv0=<executable> โ€” override the 'argv[0]' value passed into the executing program. catfish but make it processes ๐ŸŸ
  • --fatal-warnings โ€” treat warnings as errors. no more "it's just a warning" coping ๐Ÿ’…
  • --filetype=<value> โ€” choose a file type (not all types are supported by all targets):
    • =asm โ€” emit an assembly ('.s') file
    • =obj โ€” emit a native object ('.o') file
    • =null โ€” emit nothing, for performance testing
  • --float-abi=<value> โ€” choose float ABI type:
    • =default โ€” target default float ABI type
    • =soft โ€” soft float ABI (implied by -soft-float)
    • =hard โ€” hard float ABI (uses FP registers)
  • --force-dwarf-frame-section โ€” always emit a debug frame section.
  • --force-interpreter โ€” force interpretation: disable JIT
  • --force-tail-folding-style=<value> โ€” force the tail folding style:
    • =none โ€” disable tail folding
    • =data โ€” create lane mask for data only, using active.lane.mask intrinsic
    • =data-without-lane-mask โ€” create lane mask with compare/stepvector
    • =data-and-control โ€” create lane mask using active.lane.mask intrinsic, and use it for both data and control flow
    • =data-and-control-without-rt-check โ€” similar to data-and-control, but remove the runtime check
  • --fp-contract=<value> โ€” enable aggressive formation of fused FP ops:
    • =fast โ€” fuse FP ops whenever profitable
    • =on โ€” only fuse 'blessed' FP ops.
    • =off โ€” only fuse FP ops when the result won't be affected.
  • --frame-pointer=<value> โ€” specify frame pointer elimination optimization:
    • =all โ€” disable frame pointer elimination
    • =non-leaf โ€” disable frame pointer elimination for non-leaf frame
    • =none โ€” enable frame pointer elimination
  • --fs-profile-debug-bw-threshold=<uint> โ€” only show debug message if the source branch weight is greater than this value.
  • --fs-profile-debug-prob-diff-threshold=<uint> โ€” only show debug message if the branch probability is greater than this value (in percentage).
  • --function-sections โ€” emit functions into separate sections
  • --generate-merged-base-profiles โ€” when generating nested context-sensitive profiles, always generate extra base profile for function with all its context profiles merged into it.
  • --gpsize=<uint> โ€” Global Pointer Addressing Size. the default size is 8.
  • --hash-based-counter-split โ€” rename counter variable of a comdat function based on cfg hash
  • --hexagon-rdf-limit=<uint> โ€” no description, she's mysterious ๐ŸŽ€
  • --hot-cold-split โ€” enable hot-cold splitting pass
  • --ignore-xcoff-visibility โ€” not emit the visibility attribute for asm in AIX OS or give all symbols 'unspecified' visibility in XCOFF object file
  • --import-all-index โ€” import all external functions in index.
  • --incremental-linker-compatible โ€” when used with filetype=obj, emit an object file which can be used with an incremental linker
  • --instcombine-code-sinking โ€” enable code sinking
  • --instcombine-guard-widening-window=<uint> โ€” how wide an instruction window to bypass looking for another guard
  • --instcombine-max-num-phis=<uint> โ€” maximum number phis to handle in intptr/ptrint folding
  • --instcombine-max-sink-users=<uint> โ€” maximum number of undroppable users for instruction sinking
  • --instcombine-maxarray-size=<uint> โ€” maximum array size considered when doing a combine
  • --instcombine-negator-enabled โ€” should we attempt to sink negations? (yes bestie we should ๐Ÿ˜Œ)
  • --instcombine-negator-max-depth=<uint> โ€” what is the maximal lookup depth when trying to check for viability of negation sinking.
  • --instrprof-atomic-counter-update-all โ€” make all profile counter updates atomic (for testing only)
  • --internalize-public-api-file=<filename> โ€” a file containing list of symbol names to preserve
  • --internalize-public-api-list=<list> โ€” a list of symbol names to preserve
  • --iterative-counter-promotion โ€” allow counter promotion across the whole loop nest.
  • --jd=<string> โ€” specifies the JITDylib to be used for any subsequent -extra-module arguments.
  • --jit-kind=<value> โ€” choose underlying JIT kind:
    • =mcjit โ€” MCJIT
    • =orc โ€” Orc JIT
    • =orc-lazy โ€” Orc-based lazy JIT.
  • --jit-linker=<value> โ€” choose the dynamic linker/loader:
    • =default โ€” default for platform and JIT-kind
    • =rtdyld โ€” RuntimeDyld
    • =jitlink โ€” Orc-specific linker
  • --large-data-threshold=<ulong> โ€” choose large data threshold for x86_64 medium code model
  • --load=<pluginfilename> โ€” load the specified plugin
  • --lto-aix-system-assembler=<path> โ€” path to a system assembler, picked up on AIX only
  • --lto-embed-bitcode=<value> โ€” embed LLVM bitcode in object files produced by LTO:
    • =none โ€” do not embed
    • =optimized โ€” embed after all optimization passes
    • =post-merge-pre-opt โ€” embed post merge, but before optimizations
  • --lto-pass-remarks-filter=<regex> โ€” only record optimization remarks from passes whose names match the given regular expression
  • --lto-pass-remarks-format=<format> โ€” the format used for serializing remarks (default: YAML)
  • --lto-pass-remarks-output=<filename> โ€” output filename for pass remarks
  • --march=<string> โ€” architecture to generate code for (see --version)
  • --matrix-default-layout=<value> โ€” sets the default matrix layout:
    • =column-major โ€” use column-major layout
    • =row-major โ€” use row-major layout
  • --matrix-print-after-transpose-opt โ€” no blurb given, she speaks for herself ๐Ÿ’œ
  • --mattr=<a1,+a2,-a3,...> โ€” target specific attributes (-mattr=help for details)
  • --max-counter-promotions=<int> โ€” max number of allowed counter promotions
  • --max-counter-promotions-per-loop=<uint> โ€” caps how many counter promotions you're allowed per loop, so register pressure doesn't get out of control. little guardrail, big slay ๐Ÿ’…
  • --mc-relax-all โ€” when you're using it with filetype=obj, this relaxes all the fixups in the object file you're emitting. no leftover tension, all relaxed โœจ
  • --mcabac โ€” tbd. that's it. that's the whole description. the docs literally said "tbd" and left ๐Ÿ˜ญ we respect the mystery tho ๐Ÿซถ
  • --mcjit-remote-process=<filename> โ€” gives you the filename of the process to launch for remote MCJIT execution. if you don't specify one? no worries bestie, remote execution just gets simulated in-process instead ๐ŸŒ€
  • --mcpu=<cpu-name> โ€” target one specific cpu type. and hey, -mcpu=help has the details if you wanna peek ๐Ÿ‘€
  • --meabi=<value> โ€” sets the EABI type. the default depends on triple, so it's giving โœจsituationalโœจ
    • =default โ€” Triple default EABI version
    • =4 โ€” EABI version 4
    • =5 โ€” EABI version 5
    • =gnu โ€” EABI GNU
  • --merror-missing-parenthesis โ€” throws an error when a parenthesis around predicate registers is missing. strict queen behavior ๐Ÿ‘‘
  • --merror-noncontigious-register โ€” errors out on register names that aren't contigious (spelling straight from the source, we do not fix, we do not judge ๐Ÿ’€)
  • --mhvx โ€” turns on Hexagon Vector eXtensions ๐Ÿ
  • --mhvx=<value> โ€” same thing, but you pick your version:
    • =v60 โ€” Build for HVX v60
    • =v62 โ€” Build for HVX v62
    • =v65 โ€” Build for HVX v65
    • =v66 โ€” Build for HVX v66
    • =v67 โ€” Build for HVX v67
    • =v68 โ€” Build for HVX v68
    • =v69 โ€” Build for HVX v69
    • =v71 โ€” Build for HVX v71
    • =v73 โ€” Build for HVX v73
  • --mips-compact-branches=<value> โ€” MIPS specific! it's the compact branch policy, and yes there are three moods:
    • =never โ€” Do not use compact branches if possible.
    • =optimal โ€” Use compact branches where appropriate (default).
    • =always โ€” Always use compact branches if possible.
  • --mips16-constant-islands โ€” enables mips16 constant islands ๐Ÿ๏ธ
  • --mips16-hard-float โ€” enables mips16 hard float.
  • --mir-strip-debugify-only โ€” controls whether mir-strip-debug only strips debug info from debugified modules, by default. very "only in this specific circumstance" energy ๐Ÿ™ˆ
  • --misexpect-tolerance=<uint> โ€” stops diagnostics from being emitted while profile counts sit within N% of the threshold. (yes, the original really ends with a double period .. โ€” iconique ๐Ÿ’…)
  • --mno-compound โ€” disables looking for compound instructions for Hexagon.
  • --mno-fixup โ€” disables fixing up resolved relocations for Hexagon.
  • --mno-ldc1-sdc1 โ€” expands double precision loads and stores into their single precision counterparts. one becomes two, the math is mathing ๐Ÿงฎ
  • --mno-pairing โ€” disables looking for duplex instructions for Hexagon.
  • --mtriple=<string> โ€” overrides the target triple for the module.
  • --mwarn-missing-parenthesis โ€” warns (instead of erroring) when the parenthesis around predicate registers is missing. gentle reminder vibes ๐ŸŒธ
  • --mwarn-noncontigious-register โ€” warns about register names that arent contigious (again: their spelling, not mine ๐Ÿซถ)
  • --mwarn-sign-mismatch โ€” warns when a signed and an unsigned value don't match. the red flag detector ๐Ÿšฉ
  • --mxcoff-roptr โ€” when set to true, const objects with relocatable address values get put into the RO data section.
  • --no-deprecated-warn โ€” suppresses all deprecated warnings. living unbothered, we ignore the past ๐Ÿ’€
  • --no-discriminators โ€” disables generation of discriminator information.
  • --no-integrated-as โ€” disables the integrated assembler.
  • --no-process-syms โ€” does not resolve lli process symbols in JIT'd code.
  • --no-type-check โ€” suppresses type errors (Wasm).
  • --no-warn โ€” suppresses all warnings. full peace and quiet mode ๐Ÿ”‡
  • --nozero-initialized-in-bss โ€” doesn't place zero-initialized symbols into the bss section.
  • --nvptx-sched4reg โ€” NVPTX Specific: schedule for register pressue (their spelling again bestie, we're keeping it ๐Ÿ’œ)
  • --object-cache-dir=<string> โ€” the directory where cached object files go. it must be user writable โ€” no writable, no cache, no slay ๐Ÿ”ฅ
  • --object-size-offset-visitor-max-visit-instructions=<uint> โ€” the maximum number of instructions ObjectSizeOffsetVisitor is allowed to look at.
  • --orc-runtime=<string> โ€” uses the ORC runtime from the given path.
  • --per-module-lazy โ€” lazy compilation happens on whole module boundaries instead of on individual functions. zoom out, look at the whole picture ๐Ÿฆ‹
  • --pgo-block-coverage โ€” use this one to enable basic block coverage instrumentation.
  • --pgo-temporal-instrumentation โ€” use this one to enable temporal instrumentation.
  • --pgo-view-block-coverage-graph โ€” creates a dot file of CFGs with block coverage inference information. graph girlies rise ๐ŸŽ€
  • --poison-checking-function-local โ€” checks that returns are non-poison. (for testing!)
  • --print-pipeline-passes โ€” prints a -passes compatible string describing the pipeline. and it's best-effort only โ€” no promises, we're doing our best ๐Ÿ˜ญ
  • --profile-correlate=<value> โ€” uses debug info or a binary file to correlate profiles:
    • =<empty> โ€” No profile correlation
    • =debug-info โ€” Use debug info to correlate
    • =binary โ€” Use binary to correlate
  • --r600-ir-structurize โ€” use the StructurizeCFG IR pass.
  • --relax-elf-relocations โ€” emits GOTPCRELX/REX_GOTPCRELX instead of GOTPCREL on x86-64 ELF.
  • --relocation-model=<value> โ€” picks your relocation model, and the menu is long:
    • =static โ€” Non-relocatable code
    • =pic โ€” Fully relocatable, position independent code
    • =dynamic-no-pic โ€” Relocatable external references, non-relocatable code
    • =ropi โ€” Code and read-only data relocatable, accessed PC-relative
    • =rwpi โ€” Read-write data relocatable, accessed relative to static base
    • =ropi-rwpi โ€” Combination of ropi and rwpi
  • --remote-mcjit โ€” executes MCJIT'ed code in a separate process.
  • --riscv-add-build-attributes โ€” (no description given, it simply exists and it's iconic for that ๐Ÿ‘‘)
  • --riscv-use-aa โ€” enables the use of AA during codegen.
  • --runtime-counter-relocation โ€” enables relocating counters at runtime.
  • --safepoint-ir-verifier-print-only โ€” (again, no description โ€” it's mysterious, it's lowkey main character energy ๐Ÿ–ค)
  • --sample-profile-check-record-coverage=<N> โ€” emits a warning if less than N% of records in the input profile are matched to the IR.
  • --sample-profile-check-sample-coverage=<N> โ€” emits a warning if less than N% of samples in the input profile are matched to the IR.
  • --sample-profile-max-propagate-iterations=<uint> โ€” the maximum number of iterations it'll go through when propagating sample block/edge weights through the CFG. โœจboundariesโœจ
  • --skip-ret-exit-block โ€” suppresses counter promotion if exit blocks contain ret.
  • --soft-float โ€” generates software floating point library calls.
  • --speculative-counter-promotion-max-exiting=<uint> โ€” the max number of exiting blocks of a loop that's allowed for speculative counter promotion.
  • --speculative-counter-promotion-to-loop โ€” when this option is false, and the target block is in a loop, promotion gets disallowed โ€” unless the promoted counter update can be further/iteratively promoted into an acyclic region. yes it's a whole conditional, we love a plot twist ๐Ÿ˜ญ
  • --split-machine-functions โ€” splits out cold basic blocks from machine functions, based on profile information. the cold blocks get their own little section โ„๏ธ
  • --stack-size-section โ€” emits a section containing stack size metadata.
  • --stack-symbol-ordering โ€” orders local stack symbols.
  • --stackrealign โ€” forces the stack to align to the minimum alignment. get in line bestie ๐Ÿ“
  • --strict-dwarf โ€” use strict dwarf.
  • --summary-file=<string> โ€” the summary file to use for function importing.
  • --sve-tail-folding=<string> โ€” controls the use of vectorisation using tail-folding for SVE, and the option gets specified in the form (Initial)[+(Flag1|Flag2|...)]:
    • disabled โ€” (Initial) No loop types will vectorize using tail-folding
    • default โ€” (Initial) Uses the default tail-folding settings for the target CPU
    • all โ€” (Initial) All legal loop types will vectorize using tail-folding
    • simple โ€” (Initial) Use tail-folding for simple loops (not reductions or recurrences)
    • reductions โ€” Use tail-folding for loops containing reductions
    • noreductions โ€” Inverse of above
    • recurrences โ€” Use tail-folding for loops containing fixed order recurrences
    • norecurrences โ€” Inverse of above
    • reverse โ€” Use tail-folding for loops requiring reversed predicates
    • noreverse โ€” Inverse of above
  • --swift-async-fp=<value> โ€” tells the compiler when it should set the Swift async frame pointer bit ๐Ÿ’…
    • =auto โ€” just figure it out from the deployment target, queen decides
    • =always โ€” always set the bit, no questions
    • =never โ€” never set the bit, periodt
  • --tail-predication=<value> โ€” the MVE tail-predication pass options, aka loop glow-up settings โœจ
    • =disabled โ€” don't tail-predicate loops at all
    • =enabled-no-reductions โ€” enable tail-predication, but not for reduction loops
    • =enabled โ€” enable tail-predication, reduction loops included, we're going all in
    • =force-enabled-no-reductions โ€” enable tail-predication but not for reduction loops, and force it, which might be unsafe ๐Ÿ˜ญ
    • =force-enabled โ€” enable tail-predication including reduction loops, and force it, which might be unsafe ๐Ÿ˜ญ
  • --tailcallopt โ€” turns fastcc calls into tail calls by (potentially) changing the ABI, lowkey chaotic but ok
  • --thinlto-assume-merged โ€” assumes the input has already gone through ThinLTO function importing and the other pre-optimization pipeline changes, so don't come for it
  • --thread-entry=<string> โ€” calls the given entry-point on a new thread (only for jit-kind=orc-lazy btw)
  • --thread-model=<value> โ€” pick your threading model ๐Ÿงต
    • =posix โ€” POSIX thread model
    • =single โ€” single thread model, main character energy only
  • --threads=<int> โ€” ok so the page literally gives no description for this one, it's giving mysterious ๐Ÿ™ˆ
  • --tls-size=<uint> โ€” bit size of immediate TLS offsets
  • --type-based-intrinsic-cost โ€” calculate intrinsics cost based only on argument types, no cap
  • --unique-basic-block-section-names โ€” gives a unique name to every basic block section ๐Ÿ’–
  • --unique-section-names โ€” gives a unique name to every section, everybody gets their own little name tag ๐ŸŽ€
  • --use-ctors โ€” use .ctors instead of .init_array.
  • --vec-extabi โ€” enable the AIX Extended Altivec ABI.
  • --verify-region-info โ€” verify region info (heads up: time consuming ๐ŸŒ)
  • --vp-counters-per-site=<number> โ€” the average number of profile counters allocated per value profiling site
  • --vp-static-alloc โ€” do static counter allocation for value profiler
  • --wasm-enable-eh โ€” WebAssembly exception handling
  • --wasm-enable-sjlj โ€” WebAssembly setjmp/longjmp handling
  • --x86-align-branch=<string> โ€” specify types of branches to align (it's a plus-separated list of types, slay):
    • jcc โ€” indicates conditional jumps
    • fused โ€” indicates fused conditional jumps
    • jmp โ€” indicates direct unconditional jumps
    • call โ€” indicates direct and indirect calls
    • ret โ€” indicates rets
    • indirect โ€” indicates indirect unconditional jumps
  • --x86-align-branch-boundary=<uint> โ€” controls how the assembler should align branches with NOP. If the boundary's size is not 0, it must be a power of 2 and no less than 32. Branches get aligned so they're not across or against the boundary of the specified size. The default value 0 does not align branches.
  • --x86-branches-within-32B-boundaries โ€” aligns selected instructions to mitigate the negative performance impact of Intel's micro code update for errata skx102. โš ๏ธ This may break assumptions about labels corresponding to particular instructions, and should be used with caution.
  • --x86-pad-max-prefix-size=<uint> โ€” maximum number of prefixes to use for padding
  • --xcoff-traceback-table โ€” emit the XCOFF traceback table
  • --xray-function-index โ€” emit xray_fn_idx section

โœจ Generic Options โœจ

  • --help โ€” display available options (there's --help-hidden for more ๐Ÿ‘€)
  • --help-list โ€” display list of available options (again, --help-list-hidden for more ๐Ÿ‘€)
  • --version โ€” display the version of this program

๐ŸŽ€ Polly Options ๐ŸŽ€

Configure the polly loop optimizer, bestie ๐Ÿ’œ

  • --polly โ€” enable the polly optimizer (works with -O1, -O2 or -O3)
  • --polly-2nd-level-tiling โ€” enable a 2nd level loop of loop tiling, tiling on tiling fr fr
  • --polly-ast-print-accesses โ€” print memory access functions
  • --polly-context=<isl parameter set> โ€” provide additional constraints on the context parameters
  • --polly-dce-precise-steps=<int> โ€” the number of precise steps between two approximating iterations. (A value of -1 schedules another approximation stage before the actual dead code elimination.
  • --polly-delicm-max-ops=<int> โ€” maximum number of isl operations to invest for lifetime analysis; 0 means no limit ๐ŸŒˆ
  • --polly-detect-full-functions โ€” allow the detection of full functions
  • --polly-dump-after โ€” dump the module after Polly transformations into a file suffixed with "-after"
  • --polly-dump-after-file=<string> โ€” dump the module after Polly transformations to the given file
  • --polly-dump-before โ€” dump the module before Polly transformations into a file suffixed with "-before"
  • --polly-dump-before-file=<string> โ€” dump the module before Polly transformations to the given file
  • --polly-enable-simplify โ€” simplify SCoP after optimizations
  • --polly-ignore-func=<string> โ€” ignore functions that match a regex. Multiple regexes can be comma separated. Scop detection will ignore all functions that match ANY of the regexes provided.
  • --polly-isl-arg=<argument> โ€” option passed to ISL
  • --polly-matmul-opt โ€” perform optimizations of matrix multiplications based on pattern matching
  • --polly-on-isl-error-abort โ€” abort if an isl error is encountered ๐Ÿ’€
  • --polly-only-func=<string> โ€” only run on functions that match a regex. Multiple regexes can be comma separated. Scop detection will run on all functions that match ANY of the regexes provided.
  • --polly-only-region=<identifier> โ€” only run on certain regions (the provided identifier must appear in the name of the region's entry block
  • --polly-only-scop-detection โ€” only run scop detection, but no other optimizations
  • --polly-optimized-scops โ€” Polly - dump polyhedral description of Scops optimized with the isl scheduling optimizer and the set of post-scheduling transformations applied on the schedule tree
  • --polly-parallel โ€” generate thread parallel code (isl codegen only)
  • --polly-parallel-force โ€” force generation of thread parallel code, ignoring any cost model ๐Ÿ˜ค
  • --polly-pattern-matching-based-opts โ€” perform optimizations based on pattern matching
  • --polly-postopts โ€” apply post-rescheduling optimizations such as tiling (requires -polly-reschedule)
  • --polly-pragma-based-opts โ€” apply user-directed transformation from metadata
  • --polly-pragma-ignore-depcheck โ€” skip the dependency check for pragma-based transformations
  • --polly-process-unprofitable โ€” process scops that are unlikely to benefit from Polly optimizations.
  • --polly-register-tiling โ€” enable register tiling
  • --polly-report โ€” print information about the activities of Polly
  • --polly-reschedule โ€” optimize SCoPs using ISL
  • --polly-show โ€” highlight the code regions that will be optimized in a (CFG BBs and LLVM-IR instructions)
  • --polly-show-only โ€” highlight the code regions that will be optimized in a (CFG only BBs)
  • --polly-stmt-granularity=<value> โ€” algorithm to use for splitting basic blocks into multiple statements
    • =bb โ€” one statement per basic block
    • =scalar-indep โ€” scalar independence heuristic
    • =store โ€” store-level granularity
  • --polly-tc-opt โ€” perform optimizations of tensor contractions based on pattern matching
  • --polly-tiling โ€” enable loop tiling
  • --polly-vectorizer=<value> โ€” select the vectorization strategy
    • =none โ€” no vectorization
    • =stripmine โ€” strip-mine outer loops for the loop-vectorizer to trigger

And that's a wrap on the options, bestie ๐Ÿซถ this page is from lli 18, dated June 2025, and it belongs to the LLI(1) manual. Go forth and flag responsibly ๐Ÿ’–โœจ

๐Ÿ“ฆ where this page comes from