MODULARIZE(1)

๐Ÿ“ฆ
version 20.1.8 ยท 4 versions
, in ubuntu stonking

MODULARIZE(1) ๐ŸŒธ

User Commands energy, bestie โ€” this is the manual page for modularize 20 ๐Ÿ’…. Part 1, and we are not skipping a single flag. Periodt.

NAME ๐ŸŽ€

modularize โ€” manual page for modularize 20 โœจ

DESCRIPTION ๐Ÿ’–

OVERVIEW: modularize.

USAGE:

modularize [options] <list of one or more header list files> <arguments to be passed to front end>...

Okay so now we get into the options, and there are a lot of them. Grab a snack. ๐Ÿ“

OPTIONS ๐Ÿ‘‘

Color Options ๐ŸŒˆ

  • --color โ€” use colors in output. Default is autodetect, so it checks the vibe first. (default=autodetect) ๐Ÿ’…

General options โญ

  • -I <path> โ€” include path for coverage check.
  • --aarch64-neon-syntax=<value> โ€” choose the style of NEON code the AArch64 backend emits.
    • =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 the devirtualization CGSCC repeat pass is reached.
  • --allow-ginsert-as-artifact โ€” allow G_INSERT to be considered an artifact. It's a hack around AMDGPU test infinite loops.
  • --amdgpu-atomic-optimizer-strategy=<value> โ€” select DPP or Iterative strategy for scan.
    • =DPP โ€” use DPP operations for scan.
    • =Iterative โ€” use the Iterative approach for scan.
    • =None โ€” disable atomic optimizer.
  • --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-indirect-call-specialization-threshold=<uint> โ€” a threshold controls whether an indirect call will be specialized.
  • --amdgpu-kernarg-preload-count=<uint> โ€” how many kernel arguments to preload onto SGPRs.
  • --amdgpu-module-splitting-max-depth=<uint> โ€” maximum search depth. 0 forces a greedy approach. warning: the algorithm is up to O(2^N), where N is the max depth.
  • --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.
  • --argext-abi-check โ€” verify that narrow int args are properly extended per the SystemZ ABI.
  • --arm-add-build-attributes โ€” (no description in the original, bestie โ€” just a flag living its truth) ๐Ÿ™ˆ
  • --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.
  • --atomic-counter-update-promoted โ€” do counter update using atomic fetch add for promoted counters only.
  • --atomic-first-counter โ€” use atomic fetch add for the first counter in a function (usually the entry counter).
  • --block-check-header-list-only โ€” only warn if #include directives are inside extern or namespace blocks if the included header is in the header list.
  • --bounds-checking-single-trap โ€” use one trap block per function.
  • --bpf-stack-size=<int> โ€” specify the BPF stack size limit.
  • --cfg-hide-cold-paths=<number> โ€” hide blocks with relative frequency below the given value.
  • --cfg-hide-deoptimize-paths โ€” (no description in the original).
  • --cfg-hide-unreachable-paths โ€” (no description in the original).
  • --check-functions-filter=<regex> โ€” only emit checks for arguments of functions whose names match the given regular expression.
  • --conditional-counter-update โ€” do conditional counter updates in single byte counters mode) โ€” yes, that trailing paren is really in the original, bestie.
  • --cost-kind=<value> โ€” target cost kind.
    • =throughput โ€” reciprocal throughput.
    • =latency โ€” instruction latency.
    • =code-size โ€” code size.
    • =size-latency โ€” code size and latency.
  • --coverage-check-only โ€” only do the coverage check.
  • --crel โ€” use CREL relocation format for ELF.
  • --cs-profile-generate โ€” perform context sensitive PGO instrumentation.
  • --cs-profile-path=<string> โ€” context sensitive profile file path.
  • --debug-info-correlate โ€” use debug info to correlate profiles. โš ๏ธ Deprecated, so use -profile-correlate=debug-info instead.
  • --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.
  • --disable-auto-upgrade-debug-info โ€” disable autoupgrade of debug info.
  • --disable-i2p-p2i-opt โ€” disables inttoptr/ptrtoint roundtrip optimization.
  • --disable-promote-alloca-to-lds โ€” disable promote alloca to LDS.
  • --disable-promote-alloca-to-vector โ€” disable promote alloca to vector.
  • --display-file-lists โ€” display lists of good files (no compile errors), problem files, and a combined list with problem files preceded by a '#'.
  • --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-compact-unwind-non-canonical โ€” whether to try to emit Compact Unwind for non canonical entries.
  • --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).
  • --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 in the original).
  • --enable-gvn-memoryssa โ€” (no description in the original).
  • --enable-gvn-sink โ€” enable the GVN sinking pass (default = off).
  • --enable-jump-table-to-switch โ€” enable JumpTableToSwitch pass (default = off).
  • --enable-load-in-loop-pre โ€” (no description in the original).
  • --enable-load-pre โ€” (no description in the original).
  • --enable-loop-simplifycfg-term-folding โ€” (no description in the original).
  • --enable-name-compression โ€” enable name/filename string compression.
  • --enable-split-backedge-in-load-pre โ€” (no description in the original).
  • --enable-split-loopiv-heuristic โ€” enable loop iv regalloc heuristic.
  • --enable-vtable-profile-use โ€” if ThinLTO and WPD is enabled and this option is true, vtable profiles will be used by the ICP pass for a more efficient indirect call sequence. If false, type profiles won't be used.
  • --enable-vtable-value-profiling โ€” if true, the virtual table address will be instrumented to know the types of a C++ pointer. The information is used in indirect call promotion to do selective vtable-based comparison.
  • --execute-concurrency=<uint> โ€” the number of threads used to process all files in parallel. Set to 0 for hardware concurrency. This flag only applies to all-TUs.
  • --executor=<string> โ€” the name of the executor to use.
  • --expand-variadics-override=<value> โ€” override the behaviour of expand-variadics.
    • =unspecified โ€” use the implementation defaults.
    • =disable โ€” disable the pass entirely.
    • =optimize โ€” optimise without changing ABI.
    • =lowering โ€” change variadic calling convention.
  • --experimental-debug-variable-locations โ€” use experimental new value-tracking variable locations.
  • --experimental-debuginfo-iterators โ€” bestie this one makes us pass debuginfo positions around through iterators instead of intrinsics โœจ no cap, it does literally nothing if --preserve-input-debuginfo-format=true is set, so don't come for it.
  • --fatal-warnings โ€” warnings?? we don't do warnings here ๐Ÿ’€ every little warning gets upgraded to a full-blown error. mean but iconic.
  • --fdpic โ€” use the FDPIC ABI. periodt.
  • --filter=<string> โ€” only process files that match string. heads up tho: this flag only applies to all-TUs ๐ŸŽ€
  • --force-tail-folding-style=<value> โ€” lowkey forcing the tail folding style. pick ur fighter:
    • =none โ€” disable tail folding entirely ๐Ÿ™ˆ
    • =data โ€” create the lane mask for data only, using the active.lane.mask intrinsic
    • =data-without-lane-mask โ€” create lane mask with compare/stepvector
    • =data-and-control โ€” create lane mask using the active.lane.mask intrinsic, then use it for both data and control flow, main character energy fr
    • =data-and-control-without-rt-check โ€” same vibe as data-and-control but the runtime check gets removed
    • =data-with-evl โ€” use predicated EVL instructions for tail folding; if EVL isn't supported it falls back to data-without-lane-mask
  • --fs-profile-debug-bw-threshold=<uint> โ€” only shows the debug message if the source branch weight is greater than this value.
  • --fs-profile-debug-prob-diff-threshold=<uint> โ€” only shows the debug message if the branch probability is greater than this value โ€” and that's in percentage, iykyk.
  • --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. the way that it just merges everything?? obsessed.
  • --gpsize=<uint> โ€” Global Pointer Addressing Size ๐Ÿ’… the default size is 8.
  • --hash-based-counter-split โ€” renames the counter variable of a comdat function based on cfg hash. slay.
  • --hexagon-add-build-attributes โ€” no description given, it's giving mystery ๐Ÿฆ‹
  • --hexagon-rdf-limit=<uint> โ€” also no description. we move.
  • --hot-cold-split โ€” enables the hot-cold splitting pass ๐Ÿ”ฅโ„๏ธ
  • --hwasan-percentile-cutoff-hot=<int> โ€” hot percentile cutoff.
  • --hwasan-random-rate=<number> โ€” probability value in the range [0.0, 1.0] that decides whether to keep instrumentation of a function.
  • --implicit-mapsyms โ€” lets a mapping symbol at the beginning of a section be implicit, which lowers the number of mapping symbols but costs u some portability ๐Ÿ˜ญ recommended for projects that can build all their object files using this option.
  • --import-all-index โ€” imports all external functions in index. iconic.
  • --incremental-linker-compatible โ€” when used with filetype=obj, emits an object file that can be used with an incremental linker ๐Ÿซถ
  • --instcombine-code-sinking โ€” enables 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 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> โ€” what is the maximal lookup depth when trying to check for viability of negation sinking.
  • --instrprof-atomic-counter-update-all โ€” makes all profile counter updates atomic. note: for testing only โญ
  • --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 โ€” allows counter promotion across the whole loop nest. periodt.
  • --lint-abort-on-error โ€” in the Lint pass, abort on errors ๐Ÿ’€
  • --loongarch-use-aa โ€” enables the use of AA during codegen.
  • --lower-allow-check-percentile-cutoff-hot=<int> โ€” hot percentile cutoff.
  • --lower-allow-check-random-rate=<number> โ€” probability value in the range [0.0, 1.0] of unconditional pseudo-random checks.
  • --lto-aix-system-assembler=<path> โ€” path to a system assembler, picked up on AIX only.
  • --lto-embed-bitcode=<value> โ€” embeds LLVM bitcode in object files produced by LTO. the options:
    • =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 records optimization remarks from passes whose names match the given regular expression โœจ
  • --lto-pass-remarks-format=<format> โ€” the format used for serializing remarks โ€” default is YAML.
  • --lto-pass-remarks-output=<filename> โ€” output filename for pass remarks.
  • --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 description, just vibes ๐ŸŒธ
  • --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 crank up register pressure too much ๐Ÿ˜ญ
  • --mc-relax-all โ€” when used with filetype=obj, relaxes all fixups in the emitted object file.
  • --mcabac โ€” tbd. that's it. that's the entry ๐Ÿ’€
  • --merror-missing-parenthesis โ€” error for missing parenthesis around predicate registers.
  • --merror-noncontigious-register โ€” error for register names that aren't contigious. (yes, spelled exactly like that, don't @ me โœจ)
  • --mhvx โ€” enables Hexagon Vector eXtensions ๐Ÿ‘‘
  • --mhvx=<value> โ€” also enables Hexagon Vector eXtensions, but u pick which one:
    • =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
    • =v75 โ€” build for HVX v75
    • =v79 โ€” build for HVX v79
  • --mips-compact-branches=<value> โ€” MIPS specific: compact branch policy ๐ŸŒˆ
    • =never โ€” do not use compact branches if possible
    • =optimal โ€” use compact branches where appropriate โ€” this is the 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 โ€” should mir-strip-debug only strip debug info from debugified modules by default?
  • --misexpect-tolerance=<uint> โ€” prevents emitting diagnostics when profile counts are within N% of the threshold. (yes there are two dots at the end in the original, we keep the lore ๐Ÿซถ)
  • --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.
  • --mno-pairing โ€” disables looking for duplex instructions for Hexagon.
  • --module-map-path=<string> โ€” turns on module map output and specifies the output path or file name โœจ if no path is specified and the prefix option is specified, the prefix gets used for the file path.
  • --mwarn-missing-parenthesis โ€” warn for missing parenthesis around predicate registers.
  • --mwarn-noncontigious-register โ€” warn for register names that arent contigious. (again, spelling preserved, character for character ๐Ÿ˜Œ)
  • --mwarn-sign-mismatch โ€” warn for mismatching a signed and unsigned value.
  • --no-coverage-check โ€” don't do the coverage check ๐Ÿ™ˆ
  • --no-deprecated-warn โ€” suppresses all deprecated warnings.
  • --no-discriminators โ€” disables generation of discriminator information.
  • --no-type-check โ€” suppresses type errors (Wasm).
  • --no-warn โ€” suppresses all warnings. silence is golden fr fr.
  • --nvptx-approx-log2f32 โ€” NVPTX specific: whether to use lg2.approx for log2.
  • --nvptx-sched4reg โ€” NVPTX specific: schedule for register pressue. (kept exactly as written ๐Ÿ’–)
  • --object-size-offset-visitor-max-visit-instructions=<uint> โ€” maximum number of instructions for ObjectSizeOffsetVisitor to look at.
  • --pgo-block-coverage โ€” use this option to enable basic block coverage instrumentation.
  • --pgo-temporal-instrumentation โ€” use this option to enable temporal instrumentation โณ
  • --pgo-view-block-coverage-graph โ€” creates a dot file of CFGs with block coverage inference information ๐ŸŽ€
  • --prefix=<string> โ€” bestie, this prepends header file paths with whatever prefix you give it ๐Ÿซถ. And if you don't specify one? The files are just treated as relative to the header list file. that's it, that's the vibe ๐Ÿ’…
  • --print-pipeline-passes โ€” prints a -passes compatible string describing the pipeline. keyword: best-effort only. it's giving โœจcasualโœจ and we respect that ๐Ÿ˜Œ
  • --problem-files-list=<string> โ€” a whole list of files that have compilation or modularization problems, for assistant mode. heads up: this one will be excluded ๐Ÿ™ˆ
  • --profile-correlate=<value> โ€” use debug info or a binary file to correlate profiles. the values are:
    • =<empty> โ€” No profile correlation ๐Ÿ’€ (the void, the nothing, the empty string era)
    • =debug-info โ€” Use debug info to correlate ๐Ÿ”
    • =binary โ€” Use binary to correlate ๐Ÿงฌ
  • --promote-alloca-vector-loop-user-weight=<uint> โ€” the bonus weight of users of allocas within loop when sorting profitable allocas. very "who's the main character alloca" energy fr fr ๐Ÿ‘‘
  • --r600-ir-structurize โ€” Use StructurizeCFG IR pass ๐Ÿ”ฅ
  • --riscv-add-build-attributes โ€” okay so the og page literally gives no description for this one. iconic mystery behavior, iykyk ๐Ÿคซ
  • --riscv-use-aa โ€” Enable the use of AA during codegen. slay โญ
  • --root-module=<string> โ€” specify the name of the root module ๐ŸŒฑ
  • --runtime-counter-relocation โ€” Enable relocating counters at runtime. live, laugh, relocate โœจ
  • --safepoint-ir-verifier-print-only โ€” another one where the original page says literally nothing else. no notes, just vibes ๐Ÿ™ˆ
  • --sample-profile-check-record-coverage=<N> โ€” emit a warning if less than N% of records in the input profile are matched to the IR. lowkey a "you okay bestie?" flag ๐Ÿ˜ญ
  • --sample-profile-check-sample-coverage=<N> โ€” emit a warning if less than N% of samples in the input profile are matched to the IR. same energy, sample edition ๐Ÿ“
  • --sample-profile-max-propagate-iterations=<uint> โ€” maximum number of iterations to go through when propagating sample block/edge weights through the CFG. the way it just keeps going through the CFG ๐Ÿ”ฅ
  • --sampled-instr-burst-duration=<uint> โ€” set the profile instrumentation burst duration, which can range from 1 to the value of sampled-instr-period (0 is invalid, do not). this number of samples will be recorded for each sampled-instr-period count update. setting to 1 enables simple sampling, in which case it is recommended to set sampled-instr-period to a prime number. prime numbers stay winning ๐Ÿ’…
  • --sampled-instr-period=<uint> โ€” set the profile instrumentation sample period. a sample period of 0 is invalid. for each sample period, a fixed number of consecutive samples will be recorded. that number is controlled by the sampled-instr-burst-duration flag. the default sample period of 65536 is optimized for generating efficient code that leverages unsigned short integer wrapping in overflow, but this is disabled under simple sampling (burst duration = 1) ๐ŸŒ€
  • --sampled-instrumentation โ€” Do PGO instrumentation sampling โœจ
  • --sanitizer-early-opt-ep โ€” Insert sanitizers on OptimizerEarlyEP. insert, bestie, insert ๐Ÿ’‰
  • --save-temp-labels โ€” Don't discard temporary labels. keep them, they're precious ๐ŸŽ€
  • --skip-ret-exit-block โ€” Suppress counter promotion if exit blocks contain ret. nothing to see here, moving on ๐Ÿšช
  • --speculative-counter-promotion-max-exiting=<uint> โ€” the max number of exiting blocks of a loop to allow speculative counter promotion. cap it, queen ๐Ÿ‘‘
  • --speculative-counter-promotion-to-loop โ€” when the option is false, if the target block is in a loop, the promotion will be disallowed unless the promoted counter update can be further/iteratively promoted into an acyclic region. read that twice, no cap ๐Ÿ”
  • --spirv-ext=<value> โ€” specify list of enabled SPIR-V extensions ๐ŸŒˆ
  • --spv-dump-deps โ€” Dump MIR with SPIR-V dependencies info ๐Ÿ—‘๏ธ
  • --spv-emit-nonsemantic-debug-info โ€” Emit SPIR-V NonSemantic.Shader.DebugInfo.100 instructions. exactly that, character for character, periodt ๐Ÿ’…
  • --summary-file=<string> โ€” the summary file to use for function importing ๐Ÿ“„
  • --sve-tail-folding=<string> โ€” control the use of vectorisation using tail-folding for SVE, where the option is specified in the form (Initial)[+(Flag1|Flag2|...)]:. the options are:
    • 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
  • --tail-predication=<value> โ€” MVE tail-predication pass options. the values:
    • =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 this which might be unsafe โš ๏ธ
    • =force-enabled โ€” Enable tail-predication, including reduction loops, and force this which might be unsafe โš ๏ธ
okay bestie real talk: those two force- ones literally say "might be unsafe" in the og. that's not me being dramatic, that's the page. proceed with caution ๐Ÿ‘€
  • --target-abi=<string> โ€” the name of the ABI to be targeted from the backend. name it, target it, slay it ๐ŸŽฏ
  • --thinlto-assume-merged โ€” assume the input has already undergone ThinLTO function importing and the other pre-optimization pipeline changes. assumptions, we love them ๐Ÿซถ
  • --threads=<int> โ€” the og page leaves this one blank. no description, just a flag hanging out, living its truth ๐Ÿ˜ถ
  • --translator-compatibility-mode โ€” SPIR-V Translator compatibility mode ๐Ÿค
  • --type-based-intrinsic-cost โ€” Calculate intrinsics cost based only on argument types. types only, nothing else, minimalism โœจ
  • --ubsan-guard-checks โ€” Guard UBSAN checks with llvm.allow.ubsan.check(). literal, exact, no edits ๐Ÿ›ก๏ธ
  • --use-undef โ€” Use undef when generating programs. undef era ๐Ÿ’€
  • --verify-region-info โ€” Verify region info (time consuming). she takes her time, and that's valid, but know it ๐Ÿ˜ญ
  • --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 ๐Ÿ•ธ๏ธ
  • --wasm-use-legacy-eh โ€” WebAssembly exception handling (legacy). legacy era, still iconic ๐Ÿซก
  • --wholeprogramdevirt-cutoff=<uint> โ€” max number of devirtualizations for devirt module pass ๐Ÿ”ช
  • --write-experimental-debuginfo โ€” write debug info in the new non-intrinsic format. has no effect if --preserve-input-debuginfo-format=true ๐Ÿ™ˆ
  • --x86-align-branch=<string> โ€” specify types of branches to align (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> โ€” control how the assembler should align branches with NOP. if the boundary's size is not 0, it should be a power of 2 and no less than 32. branches will be aligned to prevent from being across or against the boundary of specified size. the default value 0 does not align branches ๐Ÿ“
  • --x86-branches-within-32B-boundaries โ€” align selected instructions to mitigate negative performance impact of Intel's micro code update for errata skx102.
โš ๏ธ caveat straight from the og: this may break assumptions about labels corresponding to particular instructions, and should be used with caution. read that again, bestie ๐Ÿซฃ
  • --x86-pad-max-prefix-size=<uint> โ€” maximum number of prefixes to use for padding ๐Ÿงฑ
  • --x86-relax-relocations โ€” emit GOTPCRELX/REX_GOTPCRELX/CODE_4_GOTPCRELX instead of GOTPCREL on x86-64 ELF ๐Ÿ”ง
  • --x86-sse2avx โ€” specify that the assembler should encode SSE instructions with VEX prefix ๐ŸŒธ

โœจ Generic Options โœจ

  • --help โ€” Display available options (--help-hidden for more) ๐Ÿซถ
  • --help-list โ€” Display list of available options (--help-list-hidden for more) ๐Ÿ“œ
  • --version โ€” Display the version of this program ๐Ÿ’ซ

๐Ÿฆ‹ Polly Options ๐Ÿฆ‹

Configure the polly loop optimizer โœจ

  • --polly โ€” Enable the polly optimizer (with -O1, -O2 or -O3) ๐Ÿ”ฅ
  • --polly-2nd-level-tiling โ€” Enable a 2nd level loop of loop tiling ๐Ÿงฑ
  • --polly-annotate-metadata-vectorize โ€” Append vectorize enable/disable metadata from polly ๐Ÿ“
  • --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 = no limit ๐Ÿ’…
  • --polly-detect-full-functions โ€” Allow the detection of full functions ๐Ÿซถ
  • --polly-dump-after โ€” bestie, dump the module after Polly does its transformations, into a file whose name is suffixed with -after โœจ
  • --polly-dump-after-file=<string> โ€” same dump-after vibe but you pick exactly where it goes: dump the module after Polly transformations straight into the file you name in string ๐ŸŽ€
  • --polly-dump-before โ€” the prequel: 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, no suffix guessing, you said the path, it respects the path ๐Ÿซถ
  • --polly-enable-simplify โ€” simplify the SCoP after the optimizations. glow-up post-op, we love to see it ๐Ÿ˜Œ
  • --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. like a blocklist but for regexes ๐Ÿšซ
  • --polly-isl-arg=<argument> โ€” an option passed to ISL. just hand it over, argument, ISL knows what to do ๐Ÿ’Œ
  • --polly-matmul-opt โ€” perform optimizations of matrix multiplications based on pattern matching. math girlies rise ๐Ÿ”ฅ
  • --polly-on-isl-error-abort โ€” abort if an isl error is encountered. zero tolerance policy, we respect it ๐Ÿ’€
  • --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. allowlist energy, main character functions only ๐Ÿ‘‘
  • --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. literally just looking, not touching, window shopping ๐Ÿงš
  • --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 ๐Ÿ’œ that whole sentence is the vibe, keep it close
  • --polly-parallel โ€” generate thread parallel code (isl codegen only) ๐ŸŒˆ multithreading era
  • --polly-parallel-force โ€” force generation of thread parallel code, ignoring any cost model. no thoughts, no cost model, just parallel ๐Ÿ˜ค
  • --polly-pattern-matching-based-opts โ€” perform optimizations based on pattern matching ๐Ÿ”
  • --polly-postopts โ€” apply post-rescheduling optimizations such as tiling (requires -polly-reschedule) โš ๏ธ note the requirement, bestie, you can't skip the reschedule step and expect this to eat
  • --polly-pragma-based-opts โ€” apply user-directed transformation from metadata ๐Ÿช„
  • --polly-pragma-ignore-depcheck โ€” skip the dependency check for pragma-based transformations. yes this skips a safety check. yes it's in the original. be careful out there, fr fr ๐Ÿ˜ญ
  • --polly-process-unprofitable โ€” process scops that are unlikely to benefit from Polly optimizations. doing it anyway for the plot ๐Ÿ’€
  • --polly-register-tiling โ€” enable register tiling ๐Ÿ’…
  • --polly-report โ€” print information about the activities of Polly. Polly's personal diary, published ๐Ÿ““โœจ
  • --polly-reschedule โ€” optimize SCoPs using ISL ๐Ÿฆ‹
  • --polly-show โ€” highlight the code regions that will be optimized in a (CFG BBs and LLVM-IR instructions) โœจ highlighter out, both the CFG BBs and the LLVM-IR instructions get the glow
  • --polly-show-only โ€” highlight the code regions that will be optimized in a (CFG only BBs) ๐ŸŽ€ just the CFG BBs this time, we keep it minimal
  • --polly-stmt-granularity=<value> โ€” algorithm to use for splitting basic blocks into multiple statements. pick your granularity, girlie:
    • =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 ๐Ÿ“ pattern matching again, but make it tensors
  • --polly-tiling โ€” enable loop tiling ๐Ÿ”ฒ
  • --polly-vectorizer=<value> โ€” select the vectorization strategy. choose your fighter:
    • =none โ€” no Vectorization ๐Ÿšซ
    • =stripmine โ€” strip-mine outer loops for the loop-vectorizer to trigger โ›๏ธ

okay that's the whole options list, no skips, no crumbs left behind ๐Ÿ’–

and that's a wrap on modularize fr โ€” this page is modularize 20, dated September 2026, and it lives in section MODULARIZE(1). go forth and modularize, bestie, you ate ๐Ÿซถโœจ๐Ÿ’…

๐Ÿ“ฆ where this page comes from