MODULARIZE(1)

πŸ“¦ version 12.0.1, in ubuntu jammy

πŸŽ€ MODULARIZE(1) πŸŽ€

okay so hi bestie πŸ’– welcome to the manual page for modularize β€” that's modularize 12, and it lives in section 1 of the manual, aka User Commands. Grab a boba, we're doing this πŸ’…


✨ NAME ✨

modularize β€” the manual page for modularize 12. That's literally it, that's the whole section 🫢


πŸ¦‹ DESCRIPTION πŸ¦‹

OVERVIEW: modularize.

USAGE:

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

So you pass it your [options], then a list of one or more header list files, and then whatever arguments you want forwarded to the front end. That's the whole vibe ✨

🌈 OPTIONS 🌈

πŸ’– Color Options πŸ’–

  • --color β€” use colors in output (default=autodetect). She's giving ✨aesthetic✨ but only when your terminal says it's that girl.

πŸŽ€ General options πŸŽ€

  • -I=<path> β€” include path for the coverage check. Point her at the right place bestie πŸ“‚
  • --aarch64-neon-syntax=<value> β€” choose the style of NEON code to emit from the AArch64 backend:
    • =generic β€” emit generic NEON assembly
    • =apple β€” emit Apple-style NEON assembly
  • --abort-on-max-devirt-iterations-reached β€” abort when the max iterations for the devirtualization CGSCC repeat pass is reached. She hits the limit, she stops, periodt πŸ’€
  • --addrsig β€” emit an address-significance table.
  • --amdgpu-bypass-slow-div β€” skip 64-bit divide for dynamic 32-bit values.
  • --amdgpu-disable-loop-alignment β€” do not align and prefetch loops.
  • --amdgpu-disable-power-sched β€” disable scheduling to minimize mAI power bursts.
  • --amdgpu-dpp-combine β€” enable DPP combiner.
  • --amdgpu-dump-hsa-metadata β€” dump AMDGPU HSA Metadata.
  • --amdgpu-enable-flat-scratch β€” use flat scratch instructions.
  • --amdgpu-enable-merge-m0 β€” merge and hoist M0 initializations.
  • --amdgpu-promote-alloca-to-vector-limit=<uint> β€” maximum byte size to consider promote alloca to vector.
  • --amdgpu-reserve-vgpr-for-sgpr-spill β€” allocates one VGPR for future SGPR Spill.
  • --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 β€” the source gives us no description for this one, bestie, but she's real and she's here πŸ™ˆ
  • --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 the 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).
  • --basic-block-sections=<all | <function list (file)> | labels | none> β€” emit basic blocks into separate sections.
  • --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.
  • --cfg-hide-deoptimize-paths β€” no description in the source, but she's on the list πŸ’…
  • --cfg-hide-unreachable-paths β€” also flying description-free, iconic honestly πŸ¦‹
  • --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
  • --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. Nothing else, just the check 🎯
  • --cvp-dont-add-nowrap-flags β€” description not supplied by the source, but noted πŸ‘‘
  • --data-sections β€” emit data into separate sections.
  • --debug-entry-values β€” enable debug info for the debug entry values.
  • --debugger-tune=<value> β€” tune debug info for a particular debugger:
    • =gdb β€” gdb
    • =lldb β€” lldb
    • =sce β€” SCE targets (e.g. PS4)
  • --debugify-level=<value> β€” kind of debug info to add:
    • =locations β€” locations only
    • =location+variables β€” locations and variables
  • --debugify-quiet β€” suppress verbose debugify output. shhh 🀫
  • --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-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.
  • --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-call-site-info β€” emit call site debug information, if debug information is enabled.
  • --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-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 β€” source says nothing about this one, but it's here and we respect her πŸ™Œ
  • --enable-gvn-sink β€” enable the GVN sinking pass (default = off).
  • --enable-load-in-loop-pre β€” no description given, still slaying πŸ’…
  • --enable-load-pre β€” likewise description-free, love that for her ✨
  • --enable-loop-simplifycfg-term-folding β€” again, no description in the source 🌸
  • --enable-name-compression β€” enable name/filename string compression.
  • --enable-no-infs-fp-math β€” enable FP math optimizations that assume no +-Infs.
  • --enable-no-nans-fp-math β€” enable FP math optimizations that assume no NaNs.
  • --enable-no-signed-zeros-fp-math β€” enable FP math optimizations that assume the sign of 0 is insignificant.
  • --enable-no-trapping-fp-math β€” enable setting the FP exceptions build attribute not to use exceptions.
  • --enable-split-backedge-in-load-pre β€” no description supplied, but noted bestie 🫢
  • --enable-unsafe-fp-math β€” enable optimizations that may decrease FP precision. Careful with this one, okay? πŸ‘€
  • --exception-model=<value> β€” exception model:
    • =default β€” default exception handling model
    • =dwarf β€” DWARF-like CFI based exception handling
    • =sjlj β€” SjLj exception handling
    • =arm β€” ARM EHABI exceptions
    • =wineh β€” Windows exception model
    • =wasm β€” WebAssembly exception handling
  • --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.
  • --experimental-debug-variable-locations β€” use experimental new value-tracking variable locations. Experimental, so you know what that means πŸ§ͺ
  • --fatal-warnings β€” treat warnings as errors. No chill, zero, none πŸ’€
  • --filetype=<value> β€” pick a file type, bestie (and no, not all types are supported by all targets):
    • =asm β€” emit an assembly (.s) file
    • =obj β€” emit a native object (.o) file
    • =null β€” emit nothing, for performance testing
  • --filter=<string> β€” only process files that match this filter. This flag only applies to all-TUs.
  • --float-abi=<value> β€” choose float ABI type
    • =default β€” target default float ABI type
    • =soft β€” soft float ABI (implied by -soft-float)
    • =hard β€” hard float ABI (uses FP registers)
  • --force-dwarf-frame-section β€” always emit a debug frame section.
  • --fp-contract=<value> β€” enable aggressive formation of fused FP ops
    • =fast β€” fuse FP ops whenever profitable
    • =on β€” only fuse 'blessed' FP ops.
    • =off β€” only fuse FP ops when the result won't be affected.
  • --frame-pointer=<value> β€” specify frame pointer elimination optimization
    • =all β€” disable frame pointer elimination
    • =non-leaf β€” disable frame pointer elimination for non-leaf frame
    • =none β€” enable frame pointer elimination
  • --function-sections β€” emit functions into separate sections
  • --gpsize=<uint> β€” global pointer addressing size. The default size is 8.
  • --hash-based-counter-split β€” rename counter variable of a comdat function based on cfg hash
  • --hot-cold-split β€” enable hot-cold splitting pass
  • --ignore-xcoff-visibility β€” not emit the visibility attribute for asm in AIX OS or give all symbols 'unspecified' visibility in XCOFF object file
  • --import-all-index β€” import all external functions in index.
  • --incremental-linker-compatible β€” when used with filetype=obj, emit an object file which can be used with an incremental linker
  • --instcombine-code-sinking β€” enable code sinking
  • --instcombine-guard-widening-window=<uint> β€” how wide an instruction window to bypass looking for another guard
  • --instcombine-max-iterations=<uint> β€” limit the maximum number of instruction combining iterations
  • --instcombine-max-num-phis=<uint> β€” maximum number phis to handle in intptr/ptrint folding
  • --instcombine-maxarray-size=<uint> β€” maximum array size considered when doing a combine
  • --instcombine-negator-enabled β€” should we attempt to sink negations?
  • --instcombine-negator-max-depth=<uint> β€” what is the maximal lookup depth when trying to check for viability of negation sinking.
  • --instcombine-unsafe-select-transform β€” enable poison-unsafe select to and/or transform
  • --instrprof-atomic-counter-update-all β€” make all profile counter updates atomic (for testing only)
  • --internalize-public-api-file=<filename> β€” a file containing list of symbol names to preserve
  • --internalize-public-api-list=<list> β€” a list of symbol names to preserve
  • --iterative-counter-promotion β€” allow counter promotion across the whole loop nest.
  • --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
  • --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
  • --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
  • --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
  • --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> β€” turn on module map output and specify output path or file name. If no path is specified and if prefix option is specified, use prefix for file path.
  • --mwarn-missing-parenthesis β€” warn for missing parenthesis around predicate registers
  • --mwarn-noncontigious-register β€” warn for register names that arent contigious
  • --mwarn-sign-mismatch β€” warn for mismatching a signed and unsigned value
  • --no-coverage-check β€” don't do the coverage check.
  • --no-deprecated-warn β€” suppress all deprecated warnings
  • --no-discriminators β€” disable generation of discriminator information.
  • --no-warn β€” suppress all warnings
  • --no-xray-index β€” don't emit xray_fn_idx section
  • --nozero-initialized-in-bss β€” don't place zero-initialized symbols into bss section
  • --nvptx-sched4reg β€” NVPTX Specific: schedule for register pressue
  • --poison-checking-function-local β€” check that returns are non-poison (for testing)
  • --prefix=<string> β€” prepend header file paths with this prefix. If not specified, the files are considered to be relative to the header list file.
  • --problem-files-list=<string> β€” list of files with compilation or modularization problems for assistant mode. This will be excluded.
  • --pseudo-probe-for-profiling β€” emit pseudo probes for AutoFDO
  • --r600-ir-structurize β€” use StructurizeCFG IR pass
  • --rdf-dump β€” (no description in the original β€” it's giving mystery)
  • --rdf-limit=<uint> β€” (no description in the original β€” it's giving mystery)
  • --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

okay we're still deep in option city bestie, no exit yet, keep scrolling πŸ’…

  • =dynamic-no-pic β€” relocatable external references but non-relocatable code
  • =ropi β€” code and read-only data are relocatable, and they get accessed PC-relative
  • =rwpi β€” read-write data is relocatable, accessed relative to the static base
  • =ropi-rwpi β€” both of the above, the iconic combo meal πŸ“
  • --root-module=<string> β€” tell it the name of the root module
  • --runtime-counter-relocation β€” turns on relocating counters at runtime
  • --safepoint-ir-verifier-print-only β€” no description on the page for this one, it's giving mysterious πŸ«₯
  • --sample-profile-check-record-coverage=<N> β€” emits a warning if less than N% of the records in the input profile actually match up to the IR
  • --sample-profile-check-sample-coverage=<N> β€” emits a warning if less than N% of the samples in the input profile match the IR
  • --sample-profile-max-propagate-iterations=<uint> β€” max number of iterations it goes through when propagating sample block/edge weights through the CFG
  • --skip-ret-exit-block β€” suppresses counter promotion if exit blocks contain ret
  • --speculative-counter-promotion-max-exiting=<uint> β€” the max number of exiting blocks a loop can have for speculative counter promotion to be allowed
  • --speculative-counter-promotion-to-loop β€” when this is false and the target block is in a loop, promotion gets disallowed unless the promoted counter update can be further/iteratively promoted into an acyclic region
  • --split-machine-functions β€” splits cold basic blocks out of machine functions, based on profile info
  • --stack-alignment=<uint> β€” overrides the default stack alignment
  • --stack-protector-guard=<string> β€” stack protector guard mode
  • --stack-protector-guard-offset=<uint> β€” stack protector guard offset
  • --stack-protector-guard-reg=<string> β€” stack protector guard register
  • --stack-size-section β€” emits a section that contains stack size metadata
  • --stack-symbol-ordering β€” orders local stack symbols
  • --stackrealign β€” forces the stack to align to the minimum alignment
  • --summary-file=<string> β€” the summary file used for function importing
  • --tail-predication=<value> β€” MVE tail-predication pass options, and it has moods:
    • =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 😭
  • --tailcallopt β€” turns fastcc calls into tail calls by (potentially) changing the ABI
  • --thinlto-assume-merged β€” assumes the input has already been through ThinLTO function importing and the other pre-optimization pipeline changes
  • --thread-model=<value> β€” choose your threading model:
    • =posix β€” POSIX thread model
    • =single β€” single thread model
  • --threads=<int> β€” literally no description on the page, she's mysterious, she's lowkey hiding 🌸
  • --tls-size=<uint> β€” bit size of immediate TLS offsets
  • --unique-basic-block-section-names β€” gives unique names to every basic block section
  • --unique-section-names β€” gives unique names to every section
  • --use-ctors β€” uses .ctors instead of .init_array
  • --vec-extabi β€” enables the AIX Extended Altivec ABI
  • --verify-region-info β€” verifies region info (heads up: it's 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
  • --x86-align-branch=<string> β€” specify 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> β€” controls how the assembler should align branches with NOP. If the boundary's size isn't 0, it should be a power of 2 and no less than 32. Branches get aligned so they don't end up across or against the boundary of the specified size. The default value 0 doesn't align branches at all.
  • --x86-branches-within-32B-boundaries β€” aligns selected instructions to mitigate the negative performance impact of Intel's micro code update for errata skx102.
⚠️ This may break assumptions about labels corresponding to particular instructions, and should be used with caution. Not a vibe to be reckless with, bestie πŸ’€
  • --x86-pad-max-prefix-size=<uint> β€” maximum number of prefixes to use for padding
  • --xcoff-traceback-table β€” emits the XCOFF traceback table

✨ Generic Options ✨

  • --help β€” displays available options (--help-hidden for more)
  • --help-list β€” displays the list of available options (--help-list-hidden for more)
  • --version β€” displays the version of this program

🌈 Polly Options 🌈

Configure the polly loop optimizer

  • --polly β€” enables the polly optimizer (only at -O3)
  • --polly-2nd-level-tiling β€” enables a 2nd level loop of loop tiling
  • --polly-ast-print-accesses β€” prints memory access functions
  • --polly-context=<isl parameter set> β€” provides 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 β€” 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> β€” dumps the module after Polly transformations into 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 into the given file
  • --polly-enable-simplify β€” simplifies SCoP after optimizations
  • --polly-ignore-func=<string> β€” ignores functions that match a regex. You can comma-separate multiple regexes. Scop detection will ignore all functions that match ANY of the regexes you provided.
  • --polly-isl-arg=<argument> β€” option passed to ISL
  • --polly-on-isl-error-abort β€” aborts if an isl error is encountered
  • --polly-only-func=<string> β€” only runs on functions matching 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 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, no other optimizations
  • --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
  • --polly-pattern-matching-based-opts β€” performs optimizations based on pattern matching
  • --polly-process-unprofitable β€” processes scops that are unlikely to benefit from Polly optimizations
  • --polly-register-tiling β€” enables register tiling
  • --polly-report β€” prints information about the activities of Polly

and that's where this part stops β€” there's more coming, don't you dare close the tab 🫢

  • --polly-show β€” lights up ✨the code regions that will be optimized✨ β€” and it shows them in both the CFG BBs and the LLVM-IR instructions, so you get the whole glow-up in one look πŸ‘€πŸ”₯
  • --polly-show-only β€” same energy, but only the CFG BBs get the highlight treatment. LLVM-IR instructions stay unbothered πŸ’…
  • --polly-stmt-granularity=<value> β€” picks which algorithm we use to split basic blocks into multiple statements. The algorithm choice is giving very important decisions, so here are your options:
    • =bb β€” one statement per basic block, simple as that πŸŽ€
    • =scalar-indep β€” the scalar independence heuristic, iykyk 🧚
    • =store β€” store-level granularity, granular like a strawberry sugar scrub πŸ“
  • --polly-target=<value> β€” the hardware we're targeting, bestie. Which hardware, you ask?
    • =cpu β€” generate CPU code πŸ’»
  • --polly-tiling β€” enable loop tiling πŸ”²βœ¨ not to be confused with bathroom tiling, but honestly? same satisfying vibe
  • --polly-vectorizer=<value> β€” picks your vectorization strategy, main character energy only:
    • =none β€” no vectorization. We're sitting this one out πŸ™ˆ
    • =polly β€” Polly's own internal vectorizer, homegrown and iconic πŸ‘‘
    • =stripmine β€” strip-mine outer loops so the loop-vectorizer can actually trigger. It's giving setup for success 🌈

and that's a wrap on the whole page, bestie!! πŸŽ€ this one's modularize, release 12, dated February 2022, and it goes by MODULARIZE(1) when it's being formal πŸ¦‹ mwah, stan a well-documented man page πŸ’–

πŸ“¦ where this page comes from