MODULARIZE(1)

๐Ÿ“ฆ
version 15.0.7 ยท 3 versions
, in ubuntu jammy

๐Ÿ‘‘ MODULARIZE(1) ๐Ÿ‘‘

okay bestie, welcome to the User Commands manual page for modularize โ€” yeah, version 15. and it's giving iconic but also a LOT. like, there are SO many flags on this thing. but we're going through every single one together, no skips, no cap. ๐Ÿ’…

๐ŸŒธ NAME ๐ŸŒธ

modularize โ€” manual page for modularize 15

โœจ DESCRIPTION โœจ

OVERVIEW: modularize.

USAGE:

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

so you hand it one or more header list files, plus whatever arguments you want forwarded along to the front end. that's the whole vibe. ๐Ÿฆ‹

๐ŸŽ€ OPTIONS ๐ŸŽ€

here comes the parade, bestie. every flag, every value, nothing skipped, periodt. ๐Ÿ‘‘

๐ŸŒˆ Color Options

  • --color โ€” throws colors into your output (default=autodetect). yes, it autodetects by default. it's giving sparkle. ๐Ÿ’–

๐Ÿงš General options

  • -I <path> โ€” an include path for the coverage check.
  • --aarch64-neon-syntax=<value> โ€” picks which flavor of NEON code the AArch64 backend spits out:
    • =generic โ€” emit generic NEON assembly
    • =apple โ€” emit Apple-style NEON assembly
  • --aarch64-use-aa โ€” turns on using AA during codegen.
  • --abort-on-max-devirt-iterations-reached โ€” bails out the moment the max iterations for the devirtualization CGSCC repeat pass get hit.
  • --addrsig โ€” emits an address-significance table.
  • --align-loops=<uint> โ€” the default alignment for loops.
  • --allow-ginsert-as-artifact โ€” lets G_INSERT count as an artifact. it's a hack to dodge AMDGPU test infinite loops.
  • --amdgpu-bypass-slow-div โ€” skips the 64-bit divide for dynamic 32-bit values.
  • --amdgpu-disable-loop-alignment โ€” don't align or prefetch loops, thanks.
  • --amdgpu-dpp-combine โ€” turns on the DPP combiner.
  • --amdgpu-dump-hsa-metadata โ€” dumps the AMDGPU HSA Metadata.
  • --amdgpu-enable-merge-m0 โ€” merges and hoists M0 initializations.
  • --amdgpu-enable-power-sched โ€” schedules stuff so mAI power bursts stay minimal.
  • --amdgpu-igrouplp โ€” turns on building Instruction Groups and ordering them for scheduling.
  • --amdgpu-promote-alloca-to-vector-limit=<uint> โ€” the max byte size to even consider promoting alloca to vector.
  • --amdgpu-sdwa-peephole โ€” turns on the SDWA peepholer.
  • --amdgpu-use-aa-in-codegen โ€” turns on using AA during codegen.
  • --amdgpu-verify-hsa-metadata โ€” verifies the AMDGPU HSA Metadata.
  • --amdgpu-vgpr-index-mode โ€” uses GPR indexing mode instead of movrel for vector indexing.
  • --arm-add-build-attributes โ€” no description in the original, it just exists. ๐Ÿ’€
  • --arm-implicit-it=<value> โ€” lets conditional instructions live outside of an IT block:
    • =always โ€” accept in both ISAs, and 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 โ€” emits the internal instruction representation into the assembly file.
  • --atomic-counter-update-promoted โ€” does the counter update with atomic fetch add, but only for promoted counters.
  • --atomic-first-counter โ€” uses atomic fetch add for the first counter in a function (which is usually the entry counter).
  • --basic-block-sections=<all | <function list (file)> | labels | none> โ€” emits basic blocks into separate sections.
  • --block-check-header-list-only โ€” only warns you if #include directives sit inside extern or namespace blocks and the included header is in the header list.
  • --bounds-checking-single-trap โ€” uses one trap block per function.
  • --cfg-hide-cold-paths=<number> โ€” hides blocks whose relative frequency is below the value you gave.
  • --cfg-hide-deoptimize-paths โ€” no description in the original.
  • --cfg-hide-unreachable-paths โ€” no description in the original.
  • --code-model=<value> โ€” picks the code model:
    • =tiny โ€” tiny code model
    • =small โ€” small code model
    • =kernel โ€” kernel code model
    • =medium โ€” medium code model
    • =large โ€” large code model
  • --cost-kind=<value> โ€” the target cost kind:
    • =throughput โ€” reciprocal throughput
    • =latency โ€” instruction latency
    • =code-size โ€” code size
    • =size-latency โ€” code size and latency
  • --coverage-check-only โ€” only does the coverage check. nothing else.
  • --data-sections โ€” emits data into separate sections.
  • --debug-entry-values โ€” turns on debug info for the debug entry values.
  • --debug-info-correlate โ€” uses debug info to correlate profiles.
  • --debugger-tune=<value> โ€” tunes the debug info for a specific debugger:
    • =gdb โ€” gdb
    • =lldb โ€” lldb
    • =dbx โ€” dbx
    • =sce โ€” SCE targets (e.g. PS4)
  • --debugify-func-limit=<ulong> โ€” sets the max number of processed functions per pass.
  • --debugify-level=<value> โ€” the kind of debug info to add:
    • =locations โ€” locations only
    • =location+variables โ€” locations and variables
  • --debugify-quiet โ€” mutes the verbose debugify output.
  • --denormal-fp-math=<value> โ€” selects which denormal numbers the code is allowed 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> โ€” same deal, but for float. selects which denormal numbers the code is allowed 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
  • --disable-i2p-p2i-opt โ€” kills the inttoptr/ptrtoint roundtrip optimization.
  • --disable-promote-alloca-to-lds โ€” disables promoting alloca to LDS.
  • --disable-promote-alloca-to-vector โ€” disables promoting alloca to vector.
  • --disable-tail-calls โ€” never emits tail calls. ever.
  • --display-file-lists โ€” shows you lists of good files (no compile errors), problem files, and a combined list where problem files come with a '#' in front.
  • --do-counter-promotion โ€” does counter register promotion.
  • --dot-cfg-mssa=<file name for generated dot file> โ€” the file name for the generated dot file.
  • --dwarf-version=<int> โ€” the Dwarf version.
  • --dwarf64 โ€” generates debugging info in the 64-bit DWARF format.
  • --emit-call-site-info โ€” emits call site debug information, as long as debug info is enabled.
  • --emit-dwarf-unwind=<value> โ€” controls whether DWARF EH frame entries get emitted:
    • =always โ€” always emit EH frame entries
    • =no-compact-unwind โ€” only emit EH frame entries when compact unwind isn't available
    • =default โ€” use the target platform default
  • --emscripten-cxx-exceptions-allowed=<string> โ€” the list of function names where Emscripten-style exception handling is turned on (peep the emscripten EMSCRIPTEN_CATCHING_ALLOWED options).
  • --emulated-tls โ€” uses the emulated TLS model.
  • --enable-approx-func-fp-math โ€” turns on FP math optimizations that assume approx func.
  • --enable-cse-in-irtranslator โ€” should turn on CSE in irtranslator.
  • --enable-cse-in-legalizer โ€” should turn on CSE in Legalizer.
  • --enable-emscripten-cxx-exceptions โ€” WebAssembly Emscripten-style exception handling.
  • --enable-emscripten-sjlj โ€” WebAssembly Emscripten-style setjmp/longjmp handling.
  • --enable-gvn-hoist โ€” turns on the GVN hoisting pass (default = off).
  • --enable-gvn-memdep โ€” no description in the original.
  • --enable-gvn-sink โ€” turns on the GVN sinking pass (default = off).
  • --enable-jmc-instrument โ€” instruments functions with a call to __CheckForDebuggerJustMyCode.
  • --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 โ€” turns on name/filename string compression.
  • --enable-no-infs-fp-math โ€” turns on FP math optimizations that assume no +-Infs.
  • --enable-no-nans-fp-math โ€” turns on FP math optimizations that assume no NaNs.

and that's only part 1, bestie โ€” the flags keep coming, so don't go anywhere. ๐ŸŒˆ

  • --enable-no-signed-zeros-fp-math โ€” bestie, this turns on FP math optimizations that just assume the sign of 0 doesn't matter ๐Ÿ’… like okay sure
  • --enable-no-trapping-fp-math โ€” enables setting the FP exceptions build attribute to not use exceptions ๐Ÿซถ
  • --enable-split-backedge-in-load-pre โ€” no description given, it's just vibing there, mysterious โœจ
  • --enable-unsafe-fp-math โ€” enables optimizations that may decrease FP precision ๐Ÿ˜ญ so like, fast but slightly unhinged, know what you're signing up for
  • --exception-model=<value> โ€” the exception model, pick your fighter ๐ŸฅŠ
    • =default โ€” the default exception handling model ๐Ÿ’–
    • =dwarf โ€” DWARF-like CFI based exception handling ๐Ÿงš
    • =sjlj โ€” SjLj exception handling
    • =arm โ€” ARM EHABI exceptions
    • =wineh โ€” the Windows exception model ๐ŸชŸ
    • =wasm โ€” WebAssembly exception handling ๐ŸŒ
  • --execute-concurrency=<uint> โ€” how many threads get used to process all the files in parallel ๐Ÿƒโ€โ™€๏ธ๐Ÿ’จ set it to 0 for hardware concurrency. Heads up though, this flag only applies to all-TUs (iykyk)
  • --executor=<string> โ€” the name of the executor to use, that's it, that's the whole thing ๐Ÿ‘‘
  • --experimental-debug-variable-locations โ€” use the experimental new value-tracking variable locations ๐Ÿงช lowkey mad scientist energy
  • --fatal-warnings โ€” treat warnings as errors ๐Ÿ˜ค no chill, no mercy
  • --filetype=<value> โ€” choose a file type. not all types are supported by all targets, so don't come for me when yours isn't there ๐Ÿ™ˆ
    • =asm โ€” emit an assembly (.s) file
    • =obj โ€” emit a native object (.o) file
    • =null โ€” emit nothing, for performance testing ๐Ÿ•ณ๏ธ
  • --filter=<string> โ€” only process files that match this filter ๐ŸŽฏ again, this flag only applies to all-TUs
  • --float-abi=<value> โ€” choose your 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, periodt ๐Ÿ’…
  • --fp-contract=<value> โ€” enables aggressive formation of fused FP ops โœจ
    • =fast โ€” fuse FP ops whenever it's profitable ๐Ÿ’ฐ
    • =on โ€” only fuse the 'blessed' FP ops ๐Ÿ™
    • =off โ€” only fuse FP ops when the result won't be affected ๐Ÿง˜
  • --frame-pointer=<value> โ€” specifies the 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 a debug message if the source branch weight is greater than this value ๐Ÿ“Š
  • --fs-profile-debug-prob-diff-threshold=<uint> โ€” only show a debug message if the branch probility is greater than this value (in percentage) ๐Ÿ“ˆ (yes it says "probility", we don't edit the ancestors' typo, we preserve the lore)
  • --function-sections โ€” emit functions into separate sections โœ‚๏ธ main character gets her own room
  • --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 an XCOFF object file ๐Ÿ™ˆ
  • --import-all-index โ€” import all external functions in index ๐Ÿ“ฅ
  • --incremental-linker-compatible โ€” when used with filetype=obj, emit an object file that 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 max number of instruction combining iterations ๐Ÿ”
  • --instcombine-max-num-phis=<uint> โ€” max number phis to handle in intptr/ptrint folding ๐ŸŒ€
  • --instcombine-max-sink-users=<uint> โ€” max number of undroppable users for instruction sinking โš“
  • --instcombine-maxarray-size=<uint> โ€” max array size considered when doing a combine ๐Ÿ“
  • --instcombine-negator-enabled โ€” should we attempt to sink negations? ๐Ÿค” big question honestly
  • --instcombine-negator-max-depth=<uint> โ€” what's 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 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 ๐Ÿ”„
  • --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) ๐ŸŽ›๏ธ
  • --max-counter-promotions=<int> โ€” max number of allowed counter promotions
  • --max-counter-promotions-per-loop=<uint> โ€” max number counter promotions per loop, to avoid increasing register pressure too much ๐Ÿ˜ฎโ€๐Ÿ’จ
  • --mc-relax-all โ€” when used with filetype=obj, relax all fixups in the emitted object file ๐Ÿ›‹๏ธ
  • --mcabac โ€” tbd ๐Ÿซฅ (the devs really said "we'll figure it out later" and honestly? iconic)
  • --mcpu=<cpu-name> โ€” target a specific cpu type (-mcpu=help for details) ๐Ÿ–ฅ๏ธ
  • --meabi=<value> โ€” set 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, keeping the ancestral spelling, it's part of the family history)
  • --mhvx โ€” enable Hexagon Vector eXtensions ๐Ÿ
  • --mhvx=<value> โ€” enable Hexagon Vector eXtensions ๐Ÿ
    • =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 โ€” enable mips16 constant islands ๐Ÿ๏ธ
  • --mips16-hard-float โ€” enable mips16 hard float ๐Ÿ”ฅ
  • --mir-strip-debugify-only โ€” should mir-strip-debug only strip debug info from debugified modules by default ๐Ÿค”
  • --misexpect-tolerance=<uint> โ€” prevents emiting diagnostics when profile counts are within N% of the threshold.. ๐Ÿ“‰ (two periods, we respect the punctuation)
  • --mno-compound โ€” disable looking for compound instructions for Hexagon ๐Ÿšซ
  • --mno-fixup โ€” disable fixing up resolved relocations for Hexagon ๐Ÿ”ง
  • --mno-ldc1-sdc1 โ€” expand double precision loads and stores to their single precision counterparts ๐Ÿ”ฌ
  • --mno-pairing โ€” disable looking for duplex instructions for Hexagon ๐Ÿ‘ฏ
  • --module-map-path=<string> โ€” turns module map output ON and tells it where to write it (path or filename, bestie, your call). If you don't give a path and you did pass --prefix, then the prefix gets used as the file path. Slay.
  • --mwarn-missing-parenthesis โ€” warns when predicate registers are missing their parenthesis ๐Ÿซถ
  • --mwarn-noncontigious-register โ€” warns about register names that arent contigious (yes, that's the spelling in the flag, do NOT come for me ๐Ÿ˜ญ)
  • --mwarn-sign-mismatch โ€” warns when a signed value and an unsigned value are mismatching ๐Ÿ’€
  • --no-coverage-check โ€” literally just don't do the coverage check. periodt.
  • --no-deprecated-warn โ€” suppress all deprecated warnings, every single one, silence โœจ
  • --no-discriminators โ€” disables generation of discriminator information.
  • --no-type-check โ€” suppresses type errors (Wasm) ๐Ÿ™ˆ
  • --no-warn โ€” suppress all warnings. all of them. nothing gets through. iconic.
  • --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
  • --nvptx-sched4reg โ€” NVPTX Specific: schedule for register pressue (again, that's the original wording, typo and all ๐Ÿ˜Œ)
  • --opaque-pointers โ€” use opaque pointers
  • --poison-checking-function-local โ€” check that returns are non-poison (for testing)
  • --prefix=<string> โ€” prepend header file paths with this prefix. If you don't specify it, the files are considered to be relative to the header list file. ngl this one matters
  • --print-pipeline-passes โ€” prints a -passes compatible string describing the pipeline (best-effort only, so don't be shocked if it's not perfect ๐Ÿซ )
  • --problem-files-list=<string> โ€” list of files with compilation or modularization problems for assistant mode. This will be excluded.
  • --r600-ir-structurize โ€” use the StructurizeCFG IR pass
  • --rdf-dump โ€” no description given, it's just out here existing, mysterious main character energy ๐Ÿฆ‹
  • --rdf-limit=<uint> โ€” also no description. iconic silence. ๐Ÿ’…
  • --relax-elf-relocations โ€” emit GOTPCRELX/REX_GOTPCRELX instead of GOTPCREL on x86-64 ELF
  • --relocation-model=<value> โ€” choose 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
  • --root-module=<string> โ€” specify the name of the root module.
  • --runtime-counter-relocation โ€” enable relocating counters at runtime.
  • --safepoint-ir-verifier-print-only โ€” no description, 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.
  • --sample-profile-check-sample-coverage=<N> โ€” emit a warning if less than N% of samples in the input profile are matched to the IR.
  • --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 โ€” suppress counter promotion if exit blocks contain ret.
  • --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 will be disallowed unless the promoted counter update can be further/iteratively promoted into an acyclic region. (read it twice, it's fine, I believe in you ๐Ÿซถ)
  • --split-machine-functions โ€” split out cold basic blocks from machine functions based on profile information
  • --stack-size-section โ€” emit a section containing stack size metadata
  • --stack-symbol-ordering โ€” order local stack symbols.
  • --stackrealign โ€” force align the stack to the minimum alignment
  • --strict-dwarf โ€” use strict dwarf
  • --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: ๐ŸŒ€
    • disabled โ€” no loop types will vectorize using tail-folding
    • default โ€” uses the default tail-folding settings for the target CPU
    • all โ€” all legal loop types will 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> โ€” determine 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 this which might be unsafe ๐Ÿ˜ญ
    • =force-enabled โ€” enable tail-predication, including reduction loops, and force this which might be unsafe ๐Ÿ˜ญ
bestie. the two force-enabled variants are literally described as "might be unsafe" in the source. that's not me being dramatic, that's a direct quote. proceed with caution fr fr ๐Ÿ’€
  • --tailcallopt โ€” turn fastcc calls into tail calls by (potentially) changing ABI.
  • --thinlto-assume-merged โ€” assume the input has already undergone ThinLTO function importing and the other pre-optimization pipeline changes.
  • --thread-model=<value> โ€” choose threading model
    • =posix โ€” POSIX thread model
    • =single โ€” single thread model
  • --threads=<int> โ€” no description provided, she's just there ๐Ÿ’…
  • --tls-size=<uint> โ€” bit size of immediate TLS offsets
  • --type-based-intrinsic-cost โ€” calculate intrinsics cost based only on argument types
  • --unique-basic-block-section-names โ€” give unique names to every basic block section
  • --unique-section-names โ€” give unique names to every section
  • --use-ctors โ€” use .ctors instead of .init_array.
  • --vec-extabi โ€” enable the AIX Extended Altivec ABI.
  • --verify-region-info โ€” verify region info (time consuming โณ so like, maybe not on a deadline)
  • --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 (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. (so 0 = no alignment, got it ๐ŸŽ€)
  • --x86-branches-within-32B-boundaries โ€” align selected instructions to mitigate negative performance impact of Intel's micro code update for errata skx102.
heads up bestie: this one may break assumptions about labels corresponding to particular instructions, and should be used with caution. not a vibe to yolo ๐Ÿ™ˆ
  • --x86-pad-max-prefix-size=<uint> โ€” maximum number of prefixes to use for padding
  • --xcoff-traceback-table โ€” emit the XCOFF traceback table

โœจ Generic Options โœจ

these are the OGs, the universal besties, they work everywhere ๐Ÿซถ

  • --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

and the Polly lore continues in the next part, don't go anywhere ๐Ÿฆ‹

  • --polly โ€” turns the polly optimizer ON, bestie โœจ (and yes it only does its thing alongside -O1, -O2 or -O3, so don't forget those)
  • --polly-2nd-level-tiling โ€” enables a 2nd level loop of loop tiling ๐Ÿงฑ like tiling but make it double-stacked
  • --polly-ast-print-accesses โ€” prints the memory access functions, so you can see exactly what's being touched ๐Ÿ‘€
  • --polly-context=<isl parameter set> โ€” hands you extra constraints to slap onto 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> โ€” max number of isl operations to invest in lifetime analysis; 0 means no limit, go feral ๐ŸŒ€
  • --polly-detect-full-functions โ€” allows the detection of full functions ๐Ÿซถ
  • --polly-dump-after โ€” dumps the module after Polly transformations into a file suffixed with -after
  • --polly-dump-after-file=<string> โ€” same energy, but dumps the module after Polly transformations to the given file ๐Ÿ“
  • --polly-dump-before โ€” dumps the module before Polly transformations into a file suffixed with -before
  • --polly-dump-before-file=<string> โ€” dumps the module before Polly transformations to the given file ๐Ÿ“
  • --polly-enable-simplify โ€” simplifies the SCoP after optimizations ๐Ÿงผ
  • --polly-ignore-func=<string> โ€” ignores functions that match a regex. Multiple regexes can be comma separated. Scop detection will ignore all functions that match ANY of the regexes provided. so like, if it matches even one, it's getting ghosted ๐Ÿ‘ป
  • --polly-isl-arg=<argument> โ€” an option passed to ISL
  • --polly-on-isl-error-abort โ€” aborts if an isl error is encountered ๐Ÿšจ like no recovering, we're out
  • --polly-only-func=<string> โ€” only runs 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 โ€” so match any one and you're in the club ๐Ÿ’…
  • --polly-only-region=<identifier> โ€” only runs on certain regions (the provided identifier must appear in the name of the region's entry block
  • --polly-only-scop-detection โ€” only runs scop detection, but no other optimizations. detection only, no notes ๐Ÿ“
  • --polly-optimized-scops โ€” Polly โ€” dumps the 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 โ€” generates thread parallel code (isl codegen only) ๐Ÿงต
  • --polly-parallel-force โ€” forces generation of thread parallel code, ignoring any cost model. no thoughts, just threads ๐Ÿ˜ค
  • --polly-pattern-matching-based-opts โ€” performs optimizations based on pattern matching ๐Ÿ”
  • --polly-postopts โ€” applies post-rescheduling optimizations such as tiling (requires -polly-reschedule)
  • --polly-pragma-based-opts โ€” applies user-directed transformation from metadata
  • --polly-pragma-ignore-depcheck โ€” skips the dependency check for pragma-based transformations ๐Ÿ™ˆ (the safety net? we removed it)
  • --polly-process-unprofitable โ€” processes scops that are unlikely to benefit from Polly optimizations. giving main character energy to the underdogs ๐Ÿฅบ
  • --polly-register-tiling โ€” enables register tiling ๐ŸŽ€
  • --polly-report โ€” prints information about the activities of Polly ๐Ÿ“Š very "what did you do today" of it
  • --polly-reschedule โ€” optimizes SCoPs using ISL
  • --polly-show โ€” highlights the code regions that will be optimized in a (CFG BBs and LLVM-IR instructions) ๐ŸŒˆ
  • --polly-show-only โ€” highlights 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 โ€” enables loop tiling ๐Ÿงฑ
  • --polly-vectorizer=<value> โ€” selects the vectorization strategy
    • =none โ€” no Vectorization
    • =polly โ€” Polly internal vectorizer
    • =stripmine โ€” strip-mine outer loops for the loop-vectorizer to trigger

and that's a wrap on the whole thing, bestie!! ๐Ÿ’– this page is from modularize 15, dated July 2023, and it's literally the MODULARIZE(1) manual page โ€” so if you ever forget what any of these flags do, it's all right here waiting for you. slay, go optimize something gorgeous ๐ŸŒธ๐Ÿฆ‹๐Ÿ‘‘

๐Ÿ“ฆ where this page comes from