LLI(1)

πŸ’… LLI(1) β€” User Commands πŸ’…

okay so bestie, welcome to the User Commands manual page for lli 15 β€” the llvm interpreter & dynamic compiler. We are going flag by flag, value by value, default by default. No skips, no cap. πŸ’–


πŸ’– NAME πŸ’–

lli β€” manual page for lli 15

🌸 DESCRIPTION 🌸

OVERVIEW: llvm interpreter & dynamic compiler

USAGE:

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

OPTIONS: okay, here's the whole lineup, bestie. It's giving very technical restaurant menu. ✨

🎨 Color Options 🎨

  • --color β€” Use colors in output (default=autodetect). autodetect is doing its little vibe check πŸ’…

✨ General options ✨

  • -O <char> β€” Optimization level. [-O0, -O1, -O2, or -O3] (default = '-O2'). pick your optimization era ⚑
  • --aarch64-neon-syntax=<value> β€” Choose style of NEON code to emit from AArch64 backend:
    • =generic β€” Emit generic NEON assembly
    • =apple β€” Emit Apple-style NEON assembly
  • --aarch64-use-aa β€” Enable the use of AA during codegen.
  • --abort-on-max-devirt-iterations-reached β€” Abort when the max iterations for devirtualization CGSCC repeat pass is reached.
  • --addrsig β€” Emit an address-significance table.
  • --align-loops=<uint> β€” Default alignment for loops.
  • --allow-ginsert-as-artifact β€” Allow G_INSERT to be considered an artifact. Hack around AMDGPU test infinite loops.
  • --amdgpu-bypass-slow-div β€” Skip 64-bit divide for dynamic 32-bit values.
  • --amdgpu-disable-loop-alignment β€” Do not align and prefetch loops.
  • --amdgpu-dpp-combine β€” Enable DPP combiner.
  • --amdgpu-dump-hsa-metadata β€” Dump AMDGPU HSA Metadata.
  • --amdgpu-enable-merge-m0 β€” Merge and hoist M0 initializations.
  • --amdgpu-enable-power-sched β€” Enable scheduling to minimize mAI power bursts.
  • --amdgpu-igrouplp β€” Enable construction of Instruction Groups and their ordering for scheduling.
  • --amdgpu-promote-alloca-to-vector-limit=<uint> β€” Maximum byte size to consider promote alloca to vector.
  • --amdgpu-sdwa-peephole β€” Enable SDWA peepholer.
  • --amdgpu-use-aa-in-codegen β€” Enable the use of AA during codegen.
  • --amdgpu-verify-hsa-metadata β€” Verify AMDGPU HSA Metadata.
  • --amdgpu-vgpr-index-mode β€” Use GPR indexing mode instead of movrel for vector indexing.
  • --arm-add-build-attributes β€” No description given β€” just a flag doing flag things πŸ’€
  • --arm-implicit-it=<value> β€” Allow conditional instructions outdside of an IT block (yes, outdside β€” we keep the original spelling, bestie 😭):
    • =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.
  • --atomic-counter-update-promoted β€” Do counter update using atomic fetch add for promoted counters only.
  • --atomic-first-counter β€” Use atomic fetch add for first counter in a function (usually the entry counter).
  • --basic-block-sections=<all | <function list (file)> | labels | none> β€” Emit basic blocks into separate sections.
  • --bounds-checking-single-trap β€” Use one trap block per function.
  • --cfg-hide-cold-paths=<number> β€” Hide blocks with relative frequency below the given value.
  • --cfg-hide-deoptimize-paths β€” No description given β€” we move πŸ’…
  • --cfg-hide-unreachable-paths β€” No description given β€” we move πŸ’…
  • --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).
  • --cost-kind=<value> β€” Target cost kind:
    • =throughput β€” Reciprocal throughput
    • =latency β€” Instruction latency
    • =code-size β€” Code size
    • =size-latency β€” Code size and latency
  • --data-sections β€” Emit data into separate sections.
  • --debug-entry-values β€” Enable debug info for the debug entry values.
  • --debug-info-correlate β€” Use debug info to correlate profiles.
  • --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.
  • --debugify-level=<value> β€” Kind of debug info to add:
    • =locations β€” Locations only
    • =location+variables β€” Locations and Variables
  • --debugify-quiet β€” Suppress verbose debugify output.
  • --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
  • --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
  • --disable-i2p-p2i-opt β€” Disables inttoptr/ptrtoint roundtrip optimization.
  • --disable-lazy-compilation β€” Disable JIT lazy compilation.
  • --disable-promote-alloca-to-lds β€” Disable promote alloca to LDS.
  • --disable-promote-alloca-to-vector β€” Disable promote alloca to vector.
  • --disable-tail-calls β€” Never emit tail calls.
  • --dlopen=<string> β€” Dynamic libraries to load before linking.
  • --do-counter-promotion β€” Do counter register promotion.
  • --dot-cfg-mssa=<file name for generated dot file> β€” file name for generated dot file.
  • --dwarf-version=<int> β€” Dwarf version.
  • --dwarf64 β€” Generate debugging info in the 64-bit DWARF format.
  • --emit-call-site-info β€” Emit call site debug information, if debug information is enabled.
  • --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).
  • --emulated-tls β€” Use emulated TLS model.
  • --enable-approx-func-fp-math β€” Enable FP math optimizations that assume approx func.
  • --enable-cache-manager β€” Use cache manager to save/load modules.
  • --enable-cse-in-irtranslator β€” Should enable CSE in irtranslator.
  • --enable-cse-in-legalizer β€” Should enable CSE in Legalizer.
  • --enable-emscripten-cxx-exceptions β€” WebAssembly Emscripten-style exception handling.
  • --enable-emscripten-sjlj β€” WebAssembly Emscripten-style setjmp/longjmp handling.
  • --enable-gvn-hoist β€” Enable the GVN hoisting pass (default = off).
  • --enable-gvn-memdep β€” No description given β€” iconic mystery flag energy πŸ’€
  • --enable-gvn-sink β€” Enable the GVN sinking pass (default = off).
  • --enable-jmc-instrument β€” Instrument functions with a call to __CheckForDebuggerJustMyCode.
  • --enable-load-in-loop-pre β€” No description given β€” we move πŸ’…
  • --enable-load-pre β€” No description given β€” we move πŸ’…
  • --enable-loop-simplifycfg-term-folding β€” No description given β€” we move πŸ’…
  • --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 β€” turns on FP math optimizations that assume the sign of 0 is insignificant. So like, -0.0 and +0.0? bestie they're the same now πŸ’…
  • --enable-no-trapping-fp-math β€” enables setting the FP exceptions build attribute to not use exceptions. no traps, no drama ✨
  • --enable-split-backedge-in-load-pre β€” ok so this one has literally no description in the man page and honestly? main character energy. it's giving mysterious πŸŽ€
  • --enable-unsafe-fp-math β€” enables optimizations that may decrease FP precision 😭 so like, yes it's faster but it might lie to you a little. your call, queen.
  • --entry-function=<function> β€” specifies the entry function of the executable (default = 'main'), because sometimes main isn't the one calling the shots 🫢
  • --exception-model=<value> β€” picks your exception model, and there are options:
    • =default β€” the 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 the experimental new value-tracking variable locations πŸ”₯ it's experimental, so like, proceed with the vibes
  • --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> β€” overrides the 'argv[0]' value passed into the executing program. catfishing your own process, iconic πŸ™ˆ
  • --fatal-warnings β€” treats warnings as errors. no chill mode, we die like adults πŸ’€
  • --filetype=<value> β€” chooses a file type (and heads up: not all types are supported by all targets, ok?):
    • =asm β€” emit an assembly (.s) file
    • =obj β€” emit a native object (.o) file
    • =null β€” emit nothing at all, purely for performance testing πŸ«₯
  • --float-abi=<value> β€” chooses the 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. every time. no exceptions ✨
  • --force-interpreter β€” forces interpretation, which means disables JIT. so long, speed πŸ¦‹
  • --fp-contract=<value> β€” enables 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> β€” specifies frame pointer elimination optimization:
    • =all β€” disable frame pointer elimination
    • =non-leaf β€” disable frame pointer elimination for non-leaf frames
    • =none β€” enable frame pointer elimination
  • --fs-profile-debug-bw-threshold=<uint> β€” only show the debug message if the source branch weight is greater than this value
  • --fs-profile-debug-prob-diff-threshold=<uint> β€” only show the debug message if the branch probility is greater than this value (in percentage). (yes, "probility" β€” I don't make the typos, I just report them 😭)
  • --function-sections β€” emit functions into separate sections πŸŽ€
  • --generate-merged-base-profiles β€” when generating nested context-sensitive profiles, always generate an extra base profile for a 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 the counter variable of a comdat function based on cfg hash
  • --hot-cold-split β€” enable the hot-cold splitting pass πŸ”₯🧊
  • --ignore-xcoff-visibility β€” don't emit the visibility attribute for asm in AIX OS, or give all symbols 'unspecified' visibility in the 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-iterations=<uint> β€” limit the maximum number of instruction combining iterations
  • --instcombine-max-num-phis=<uint> β€” maximum number of 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? (asking for a friend)
  • --instcombine-negator-max-depth=<uint> β€” 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, bestie, don't ship this πŸ™ˆ)
  • --internalize-public-api-file=<filename> β€” a file containing a 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> β€” chooses the underlying JIT kind:
    • =mcjit β€” MCJIT
    • =orc β€” Orc JIT
    • =orc-lazy β€” Orc-based lazy JIT
  • --jit-linker=<value> β€” chooses the dynamic linker/loader:
    • =default β€” default for platform and JIT-kind
    • =rtdyld β€” RuntimeDyld
    • =jitlink β€” Orc-specific linker
  • --load=<pluginfilename> β€” loads the specified plugin 🧚
  • --lower-global-dtors-via-cxa-atexit β€” lower llvm.global_dtors (global destructors) via __cxa_atexit
  • --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
  • --mattr=<a1,+a2,-a3,...> β€” target specific attributes (-mattr=help for details, iykyk)
  • --max-counter-promotions=<int> β€” max number of allowed counter promotions
  • --max-counter-promotions-per-loop=<uint> β€” max number of counter promotions per loop, so we don't increase register pressure too much 🫢
  • --mc-relax-all β€” when used with filetype=obj, relax all fixups in the emitted object file
  • --mcabac β€” tbd. that's it. that's the description. we love an unfinished icon πŸ’€
  • --mcjit-remote-process=<filename> β€” specify the filename of the process to launch for remote MCJIT execution. if none is specified, remote execution will be simulated in-process
  • --mcpu=<cpu-name> β€” target a specific cpu type (-mcpu=help for details)
  • --meabi=<value> β€” set the EABI type (default depends on triple):
    • =default β€” triple default EABI version
    • =4 β€” EABI version 4
    • =5 β€” EABI version 5
    • =gnu β€” EABI GNU
  • --merror-missing-parenthesis β€” error for missing parenthesis around predicate registers
  • --merror-noncontigious-register β€” error for register names that aren't contigious (again: not my typo, I'm just the messenger πŸŽ€)
  • --mhvx β€” enable Hexagon Vector eXtensions
  • --mhvx=<value> β€” enable Hexagon Vector eXtensions, but specific:
    • =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
  • --mips-compact-branches=<value> β€” MIPS Specific: compact branch policy:
    • =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. that's it, that's the whole vibe ✨
  • --mips16-hard-float β€” enables mips16 hard float. floating point but make it hardware πŸ’…
  • --mir-strip-debugify-only β€” controls whether mir-strip-debug only strips debug info from debugified modules by default. very niche, very demure.
  • --misexpect-tolerance=<uint> β€” prevents emitting diagnostics when profile counts are within N% of the threshold.. (yes bestie, two periods, the source said what it said πŸŽ€)
  • --mno-compound β€” Hexagon: stop looking for compound instructions. we're done with that πŸ™…β€β™€οΈ
  • --mno-fixup β€” Hexagon: stop fixing up resolved relocations.
  • --mno-ldc1-sdc1 β€” expands double precision loads and stores into their single precision counterparts. fancy little downgrade ✨
  • --mno-pairing β€” Hexagon: stop looking for duplex instructions.
  • --mtriple=<string> β€” overrides the target triple for the module. main character energy for cross-compiling πŸ‘‘
  • --mwarn-missing-parenthesis β€” warns you about a missing parenthesis around predicate registers. she notices everything πŸ”
  • --mwarn-noncontigious-register β€” warns about register names that aren't contiguous. (the flag itself is spelled noncontigious, we don't fix it, we respect it πŸ’€)
  • --mwarn-sign-mismatch β€” warns when a signed and an unsigned value don't match. red flag behavior, flagged 🌈
  • --no-deprecated-warn β€” suppresses all deprecated warnings. ignorance is bliss, bestie.
  • --no-discriminators β€” disables generation of discriminator information.
  • --no-process-syms β€” do not resolve lli process symbols in JIT'd code.
  • --no-type-check β€” suppresses type errors. Wasm only. yes this is giving chaos but it's right there 😭
  • --no-warn β€” suppresses all warnings. truly unbothered, truly fearless πŸ’…
  • --no-xray-index β€” don't emit the xray_fn_idx section.
  • --nozero-initialized-in-bss β€” don't place zero-initialized symbols into the bss section. they can go elsewhere, they're grown 🫢
  • --nvptx-sched4reg β€” NVPTX specific: schedule for register pressure.
  • --object-cache-dir=<string> β€” directory where cached object files get stored. it must be user writable, no cap πŸ”₯
  • --opaque-pointers β€” use opaque pointers.
  • --orc-runtime=<string> β€” use the ORC runtime from the given path.
  • --per-module-lazy β€” lazy compilation on whole module boundaries rather than individual functions. we love a strategic nap 😴
  • --poison-checking-function-local β€” checks that returns are non-poison. for testing only, bestie πŸ§ͺ
  • --print-pipeline-passes β€” prints a -passes-compatible string describing the pipeline. best-effort only, so manage your expectations 🌸
  • --r600-ir-structurize β€” use the StructurizeCFG IR pass.
  • --rdf-dump β€” no description given. she simply exists πŸ’€
  • --rdf-limit=<uint> β€” also no description. mysterious icon behavior πŸ™ˆ
  • --relax-elf-relocations β€” emit GOTPCRELX/REX_GOTPCRELX instead of GOTPCREL on x86-64 ELF.
  • --relocation-model=<value> β€” choose the relocation model πŸŽ€
    • =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. social distancing, compiler edition πŸ¦‹
  • --runtime-counter-relocation β€” enables relocating counters at runtime.
  • --safepoint-ir-verifier-print-only β€” no description. another silent queen πŸ‘‘
  • --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. yes it's the samples one, read carefully bestie πŸ‘€
  • --sample-profile-max-propagate-iterations=<uint> β€” maximum number of iterations to go through when propagating sample block/edge weights through the CFG.
  • --skip-ret-exit-block β€” suppresses counter promotion if exit blocks contain ret.
  • --soft-float β€” generate software floating point library calls.
  • --speculative-counter-promotion-max-exiting=<uint> β€” the max number of exiting blocks of a loop to allow speculative counter promotion.
  • --speculative-counter-promotion-to-loop β€” when the option is false, if the target block is in a loop, the promotion is disallowed unless the promoted counter update can be further/iteratively promoted into an acyclic region. it's giving conditions on conditions πŸ’…
  • --split-machine-functions β€” splits cold basic blocks out of machine functions based on profile information. cold blocks get their own little apartment 🏠
  • --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. posture check for your stack 🧍
  • --strict-dwarf β€” uses strict dwarf.
  • --summary-file=<string> β€” the summary file to use for function importing.
  • --sve-tail-folding=<string> β€” controls vectorisation using tail-folding for SVE 🌈
    • disabled β€” no loop types vectorize using tail-folding
    • default β€” uses the default tail-folding settings for the target CPU
    • all β€” all legal loop types vectorize using tail-folding
    • simple β€” use tail-folding for simple loops (not reductions or recurrences)
    • reductions β€” use tail-folding for loops containing reductions
    • recurrences β€” use tail-folding for loops containing first order recurrences
  • --swift-async-fp=<value> β€” decides when the Swift async frame pointer should be set πŸ¦‹
    • =auto β€” determine based on deployment target
    • =always β€” always set the bit
    • =never β€” never set the bit
  • --tail-predication=<value> β€” MVE tail-predication pass options ✨
    • =disabled β€” don't tail-predicate loops
    • =enabled-no-reductions β€” enable tail-predication, but not for reduction loops
    • =enabled β€” enable tail-predication, including reduction loops
    • =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. character development for your calling convention πŸ‘‘
  • --thinlto-assume-merged β€” assumes the input already underwent ThinLTO function importing and the other pre-optimization pipeline changes. trust fall 🀝
  • --thread-entry=<string> β€” calls the given entry-point on a new thread. only for jit-kind=orc-lazy, bestie 🧡
  • --thread-model=<value> β€” choose the threading model πŸŽ€
    • =posix β€” POSIX thread model
    • =single β€” single thread model
  • --threads=<int> β€” no description in the source, just a number and a dream πŸ’€
  • --tls-size=<uint> β€” bit size of immediate TLS offsets.
  • --type-based-intrinsic-cost β€” calculates intrinsic cost based only on argument types. no further questions ✨
  • --unique-basic-block-section-names β€” gives every basic block section a unique name. everybody gets their own little name tag πŸŽ€
  • --unique-section-names β€” gives every section a unique name.
  • --use-ctors β€” use .ctors instead of .init_array. retro choice, we support it πŸ‘‘
  • --vec-extabi β€” enables the AIX Extended Altivec ABI.
  • --verify-region-info β€” verifies region info. it is time consuming 😭
  • --vp-counters-per-site=<number> β€” the average number of profile counters allocated per value profiling site.
  • --vp-static-alloc β€” does static counter allocation for the value profiler.
  • --wasm-enable-eh β€” WebAssembly exception handling ✨
  • --wasm-enable-sjlj β€” WebAssembly setjmp/longjmp handling.
  • --x86-align-branch=<string> β€” specifies which types of branches to align, as a plus-separated list of types πŸ’…
    • 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> β€” this one controls how the assembler aligns branches with NOP ✨ so if the boundary's size isn't 0, it has to be a power of 2 and no less than 32, okay? Branches get aligned so they don't end up across or against a boundary of that specified size. The default value 0 means no branch alignment at all, bestie πŸ’…
  • --x86-branches-within-32B-boundaries β€” aligns selected instructions to soften the negative perf hit from Intel's micro code update for errata skx102 🫢
⚠️ Heads up: this one may break assumptions about labels corresponding to particular instructions, so use it with caution, fr fr 😭
  • --x86-pad-max-prefix-size=<uint> β€” max number of prefixes to use for padding πŸŽ€
  • --xcoff-traceback-table β€” emit the XCOFF traceback table πŸ¦‹

🌈 Generic Options 🌈

  • --help β€” show the available options (peep --help-hidden for even more πŸ‘€)
  • --help-list β€” show the list of available options (and --help-list-hidden for more, iykyk πŸ’–)
  • --version β€” show the version of this program, iconic behavior honestly πŸ‘‘

πŸ¦‹ Polly Options πŸ¦‹ β€” Configure the polly loop optimizer

  • --polly β€” turn the polly optimizer on (works with -O1, -O2 or -O3) ✨
  • --polly-2nd-level-tiling β€” enable a 2nd level loop of loop tiling πŸŽ€
  • --polly-ast-print-accesses β€” print memory access functions 🌸
  • --polly-context=<isl parameter set> β€” give extra 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 = no limit, live ur life πŸ¦‹
  • --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-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 is 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, no cap πŸ’…
  • --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-target=<value> β€” the hardware to target:
    • =cpu β€” generate CPU code
  • --polly-tiling β€” enable loop tiling πŸŽ€
  • --polly-vectorizer=<value> β€” select the vectorization strategy:
    • =none β€” no Vectorization
    • =polly β€” Polly internal vectorizer
    • =stripmine β€” strip-mine outer loops for the loop-vectorizer to trigger

That's the whole page bestie, u made it to the end πŸ«ΆπŸ’– this is lli version 15, dated July 2023 β€” go forth and slay ur LLVM IR, periodt βœ¨πŸ‘‘

πŸ“¦ where this page comes from