CLANG-REPL(1)

๐Ÿ“ฆ
version 22.1.8 ยท 3 versions
, in ubuntu stonking

โœจ CLANG-REPL(1) โœจ

Like, hi bestie ๐Ÿ’– welcome to the clang-repl manual page, the one and only, fr fr. It's giving interactive C++ compiler energy, and we're about to vibe check every single flag. No cap, we keep ALL the details.

๐ŸŒธ NAME ๐ŸŒธ

clang-repl โ€” manual page for clang-repl 22

๐Ÿฆ‹ DESCRIPTION ๐Ÿฆ‹

USAGE: clang-repl [options] [code to run]

Okay so you run it like that ๐Ÿ‘†, and then the options start. Buckle up, because this list is LONG but we're obsessed.

๐ŸŽ€ OPTIONS ๐ŸŽ€

๐ŸŒˆ Color Options ๐ŸŒˆ

  • --color โ€” Use colors in output (default=autodetect). So it's giving rainbow when your terminal says yes ๐Ÿ’…

โšก General options โšก

Now the main character section. Every single one, we're listing, no skips.

  • --Xcc=<string> โ€” Argument to pass to the CompilerInvocation. Pass it along, bestie.
  • --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. AA said yes โœจ
  • --abort-on-max-devirt-iterations-reached โ€” Abort when the max iterations for devirtualization CGSCC repeat pass is reached. It's giving "we tried, we really did, now we abort."
  • --allow-ginsert-as-artifact โ€” Allow G_INSERT to be considered an artifact. Hack around AMDGPU test infinite loops. Like, a little hack, a little slay.
  • --amdgpu-atomic-optimizer-strategy=<value> โ€” Select DPP or Iterative strategy for scan:
    • =DPP โ€” Use DPP operations for scan
    • =Iterative โ€” Use Iterative approach for scan
    • =None โ€” Disable atomic optimizer
  • --amdgpu-bypass-slow-div โ€” Skip 64-bit divide for dynamic 32-bit values. Not me avoiding the slow path ๐Ÿ’€
  • --amdgpu-disable-loop-alignment โ€” Do not align and prefetch loops. Loops said leave me alone.
  • --amdgpu-dpp-combine โ€” Enable DPP combiner. Combine, bestie.
  • --amdgpu-dump-hsa-metadata โ€” Dump AMDGPU HSA Metadata. Dump it, queen.
  • --amdgpu-enable-merge-m0 โ€” Merge and hoist M0 initializations. Hoist it up, up, up.
  • --amdgpu-indirect-call-specialization-threshold=<uint> โ€” A threshold controls whether an indirect call will be specialized. Set the threshold, let the calls know.
  • --amdgpu-kernarg-preload โ€” Enable preload kernel arguments to SGPRs. Preload like it's a game update.
  • --amdgpu-kernarg-preload-count=<uint> โ€” How many kernel arguments to preload onto SGPRs. Count them, bestie.
  • --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. Okay so that warning is real, it's giving exponential, be careful. ๐Ÿšจ
  • --amdgpu-promote-alloca-to-vector-limit=<uint> โ€” Maximum byte size to consider promote alloca to vector. Limit it.
  • --amdgpu-promote-alloca-to-vector-max-regs=<uint> โ€” Maximum vector size (in 32b registers) to use when promoting alloca. Regs but make it max.
  • --amdgpu-promote-alloca-to-vector-vgpr-ratio=<uint> โ€” Ratio of VGPRs to budget for promoting alloca to vectors. Budget ratio, slay.
  • --amdgpu-sdwa-peephole โ€” Enable SDWA peepholer. Peephole but make it SDWA.
  • --amdgpu-use-aa-in-codegen โ€” Enable the use of AA during codegen. AA again, iconic.
  • --amdgpu-verify-hsa-metadata โ€” Verify AMDGPU HSA Metadata. Verify, don't guess.
  • --amdgpu-vgpr-index-mode โ€” Use GPR indexing mode instead of movrel for vector indexing. GPR mode said "not me using movrel".
  • --arc-contract-use-objc-claim-rv โ€” Enable generation of calls to objc_claimAutoreleasedReturnValue. ObjC said claim it.
  • --argext-abi-check โ€” Verify that narrow int args are properly extended per the SystemZ ABI. Check those narrow ints, bestie.
  • --arm-add-build-attributes โ€” no description in the original, but it's still here, periodt ๐Ÿ’–
  • --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. Spill the internal tea into asm.
  • --atomic-counter-update-promoted โ€” Do counter update using atomic fetch add for promoted counters only. Only the promoted ones, periodt.
  • --atomic-first-counter โ€” Use atomic fetch add for first counter in a function (usually the entry counter). First counter gets the atomic fetch add treatment.
  • --basic-block-section-match-infer โ€” Enable matching and inference when generating basic block sections. Match, infer, generate, repeat.
  • --bounds-checking-single-trap โ€” Use one trap block per function. One trap, no more.
  • --bpf-stack-size=<int> โ€” Specify the BPF stack size limit. Give BPF a stack limit, bestie.
  • --cfg-hide-cold-paths=<number> โ€” Hide blocks with relative frequency below the given value. Hide the cold paths, they're not invited.
  • --cfg-hide-deoptimize-paths โ€” no description in the original, but it's here, and we respect it ๐Ÿซถ
  • --cfg-hide-unreachable-paths โ€” also no description in the original, still in the lineup โœจ
  • --check-functions-filter=<regex> โ€” Only emit checks for arguments of functions whose names match the given regular expression. Regex filter, very regex-core.
  • --conditional-counter-update โ€” Do conditional counter updates in single byte counters mode). Yes, that closing paren is in the original, we keep it exactly. Not me noticing that ๐Ÿ’€
  • --cost-kind=<value> โ€” Target cost kind:
    • =throughput โ€” Reciprocal throughput
    • =latency โ€” Instruction latency
    • =code-size โ€” Code size
    • =size-latency โ€” Code size and latency
    • =all โ€” Print all cost kinds
  • --crel โ€” Use CREL relocation format for ELF. CREL it up.
  • --cs-profile-generate โ€” Perform context sensitive PGO instrumentation. Context sensitive PGO, she's specialized.
  • --cs-profile-path=<string> โ€” Context sensitive profile file path. Point to the file, bestie.
  • --ctx-prof-include-empty โ€” Also write profiles with all-zero counters. Intended for testing/debugging. All-zero counters, for the test girlies.
  • --ctx-profile-force-is-specialized โ€” Treat the given module as-if it were containing the post-thinlink module containing the root. As-if, lowkey.
  • --debugify-atoms โ€” no description in the original, just atoms, debugified ๐Ÿงš
  • --debugify-func-limit=<ulong> โ€” Set max number of processed functions per pass. Max functions, periodt.
  • --debugify-level=<value> โ€” Kind of debug info to add:
    • =locations โ€” Locations only
    • =location+variables โ€” Locations and Variables
  • --debugify-quiet โ€” Suppress verbose debugify output. Quiet mode, shhh ๐Ÿคซ
  • --devirtualize-speculatively โ€” Enable speculative devirtualization optimization. Speculative devirtualization, she's guessing but make it optimization.
  • --disable-auto-upgrade-debug-info โ€” Disable autoupgrade of debug info. No upgrades, we're staying.
  • --disable-i2p-p2i-opt โ€” Disables inttoptr/ptrtoint roundtrip optimization. Roundtrip optimization said not today.
  • --disable-promote-alloca-to-lds โ€” Disable promote alloca to LDS. No LDS promotion, bestie.
  • --disable-promote-alloca-to-vector โ€” Disable promote alloca to vector. No vector promotion either.
  • --disable-qfp-opt โ€” Disable optimization of Qfloat operations. Qfloat said no optimization.
  • --disable-qfp-opt-mul โ€” Disable optimization of Qfloat operations for multiply. Multiply specifically, no Qfloat opt for you.
  • --do-counter-promotion โ€” Do counter register promotion. Promote those counters, slay.
  • --dot-cfg-mssa=<file name for generated dot file> โ€” file name for generated dot file. Yes, the placeholder literally says that, we copied it exactly.
  • --dwarf-version=<int> โ€” Dwarf version. Dwarf version, not to be confused with the fantasy kind.
  • --dwarf64 โ€” Generate debugging info in the 64-bit DWARF format. 64-bit DWARF, she's big.
  • --elide-all-zero-branch-weights โ€” no description in the original, but we're keeping it ๐Ÿ’…
  • --emit-bb-hash โ€” Emit the hash of basic block in the SHT_LLVM_BB_ADDR_MAP section. Emit that hash, bestie.
  • --emit-compact-unwind-non-canonical โ€” Whether to try to emit Compact Unwind for non canonical entries. Non canonical entries? Maybe compact unwind, maybe not.
  • --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
  • --emit-gnuas-syntax-on-zos โ€” Emit GNU Assembly Syntax on z/OS. z/OS said give me GNU asm syntax.
  • --emscripten-cxx-exceptions-allowed=<string> โ€” The list of function names in which Emscripten-style exception handling is enabled (see emscripten EMSCRIPTEN_CATCHING_ALLOWED options). A whole list of function names, very specific, very iconic.
  • --enable-cse-in-irtranslator โ€” Should enable CSE in irtranslator. CSE in irtranslator, yes.
  • --enable-cse-in-legalizer โ€” Should enable CSE in Legalizer. CSE in Legalizer too, periodt.
  • --enable-devirtualize-speculatively โ€” Enable speculative devirtualization optimization. Same energy as --devirtualize-speculatively, but with enable- in front.
  • --enable-emscripten-cxx-exceptions โ€” WebAssembly Emscripten-style exception handling. Emscripten exceptions, enabled.
  • --enable-emscripten-sjlj โ€” WebAssembly Emscripten-style setjmp/longjmp handling. SJLJ said yes.
  • --enable-gvn-hoist โ€” Enable the GVN hoisting pass (default = off). Default is off, so turn it on if you want hoisting.
  • --enable-gvn-memdep โ€” no description in the original, but GVN memdep, she's enabled if you say so ๐Ÿฆ‹
  • --enable-gvn-memoryssa โ€” also no description in the original, still memory SSA, still iconic โœจ
  • --enable-gvn-sink โ€” Enable the GVN sinking pass (default = off). Sink it, but only if you enable it, because default is off.

still in OPTIONS, still slaying, we got a LOT more flags to go โœจ

  • --enable-jump-table-to-switch โ€” turns on the JumpTableToSwitch pass. Default is off ๐Ÿ’ค
  • --enable-load-in-loop-pre โ€” no description given, bestie, it's just there, existing ๐Ÿ’€
  • --enable-load-pre โ€” also no description. mysterious. iconic. ๐Ÿ™ˆ
  • --enable-loop-simplifycfg-term-folding โ€” again, no desc. it simply is ๐Ÿซถ
  • --enable-name-compression โ€” enables name/filename string compression ๐Ÿ“ฆ
  • --enable-poison-reuse-guard โ€” enables the poison-reuse guard โ˜ ๏ธ
  • --enable-split-backedge-in-load-pre โ€” no description, love that for it ๐ŸŒธ
  • --enable-split-loopiv-heuristic โ€” enables the loop iv regalloc heuristic ๐Ÿ”
  • --enable-vtable-profile-use โ€” if ThinLTO and WPD are enabled and this one is true, then vtable profiles get used by the ICP pass for a more efficient indirect call sequence. If it's false, type profiles won't be used. ๐Ÿšซ
  • --enable-vtable-value-profiling โ€” if true, the virtual table address gets instrumented so we know the types of a C++ pointer. That info gets used in indirect call promotion to do a selective vtable-based comparison ๐Ÿ‘‘
  • --execute-concurrency=<uint> โ€” how many threads get used to process all the files in parallel. Set it to 0 for hardware concurrency. Heads up: this flag only applies to all-TUs ๐Ÿงต
  • --executor=<string> โ€” the name of the executor to use ๐Ÿ•น๏ธ
  • --expand-variadics-override=<value> โ€” overrides 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 the experimental new value-tracking variable locations ๐Ÿงช
  • --fatal-warnings โ€” treats warnings as errors ๐Ÿ˜ค
  • --fdpic โ€” use the FDPIC ABI
  • --filter=<string> โ€” only processes files that match this filter. Again, this flag only applies to all-TUs ๐ŸŽฏ
  • --force-tail-folding-style=<value> โ€” forces the tail folding style
    • =none โ€” disable tail folding
    • =data โ€” create 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, and use it for both data and control flow
    • =data-and-control-without-rt-check โ€” similar to data-and-control, but remove the runtime check
    • =data-with-evl โ€” use predicated EVL instructions for tail folding. If EVL isn't supported, fallback 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 (in percentage) ๐Ÿ“ˆ
  • --generate-merged-base-profiles โ€” when generating nested context-sensitive profiles, always generate an extra base profile for a function with all of its context profiles merged into it ๐Ÿงฉ
  • --gpsize=<uint> โ€” Global Pointer Addressing Size. The default size is 8 ๐ŸŽฑ
  • --gsframe โ€” whether to emit .sframe unwind sections ๐Ÿช‚
  • --hash-based-counter-split โ€” renames the counter variable of a comdat function based on cfg hash #๏ธโƒฃ
  • --hexagon-add-build-attributes โ€” no description, just vibes ๐Ÿ
  • --hexagon-rdf-limit=<uint> โ€” also no description. silent. stoic. ๐Ÿ’…
  • --hot-cold-split โ€” enables the hot-cold splitting pass ๐Ÿ”ฅโ„๏ธ
  • --hwasan-percentile-cutoff-hot=<int> โ€” hot percentile cutoff ๐ŸŒก๏ธ
  • --hwasan-random-rate=<number> โ€” a probability value in the range [0.0, 1.0] to keep instrumentation of a function. Note: instrumentation can get skipped randomly OR because of the hot percentile cutoff, if both are supplied ๐Ÿ”€
  • --implicit-mapsyms โ€” allows the mapping symbol at the section beginning to be implicit, which lowers the number of mapping symbols at the expense of some portability. Recommended for projects that can build all their object files using this option ๐Ÿ—บ๏ธ
  • --import-all-index โ€” import all external functions in index ๐Ÿ“ฅ
  • --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> โ€” the maximum number of phis to handle in intptr/ptrint folding ๐Ÿ”ข
  • --instcombine-max-sink-users=<uint> โ€” the maximum number of undroppable users for instruction sinking ๐Ÿšง
  • --instcombine-maxarray-size=<uint> โ€” the maximum array size considered when doing a combine ๐Ÿ“
  • --instcombine-negator-enabled โ€” should we attempt to sink negations? ๐Ÿค”
  • --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 โ€” makes 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 ๐Ÿ“
  • --intrinsic-cost-strategy=<value> โ€” the costing strategy for intrinsic instructions
    • =instruction-cost โ€” use TargetTransformInfo::getInstructionCost
    • =intrinsic-cost โ€” use TargetTransformInfo::getIntrinsicInstrCost
    • =type-based-intrinsic-cost โ€” calculate the intrinsic cost based only on argument types
  • --iterative-counter-promotion โ€” allows counter promotion across the whole loop nest ๐Ÿ”„
  • --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> โ€” a 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> โ€” 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 records 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 ๐Ÿ—‚๏ธ
  • --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 a little guy ๐Ÿฃ
  • --max-counter-promotions=<int> โ€” the max number of allowed counter promotions ๐Ÿšฆ
  • --max-counter-promotions-per-loop=<uint> โ€” the max number of counter promotions per loop, so we don't increase register pressure too much ๐Ÿ˜ฎโ€๐Ÿ’จ
  • --mc-relax-all โ€” when used with filetype=obj, relaxes all fixups in the emitted object file ๐Ÿง˜
  • --mcabac โ€” tbd ๐Ÿซฅ
  • --merror-missing-parenthesis โ€” error for missing parenthesis around predicate registers โŒ
  • --merror-noncontigious-register โ€” error for register names that aren't contigious (yes that's spelled exactly like that, we don't make the rules) โŒ
  • --mhvx โ€” enables Hexagon Vector eXtensions ๐Ÿ
  • --mhvx=<value> โ€” enables Hexagon Vector eXtensions (but like, specifical)
    • =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
    • =v81 โ€” build for HVX v81
  • --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 โ€” turns on mips16 constant islands. yep that's the whole thing, she's a one-liner bestie ๐Ÿ’–
  • --mips16-hard-float โ€” flips on mips16 hard float โœจ
  • --mir-strip-debugify-only โ€” controls whether mir-strip-debug only strips debug info from debugified modules by default ๐ŸŽ€
  • --misexpect-tolerance=<uint> โ€” stops diagnostics from being emitted when profile counts land within N% of the threshold. yes the description really does end in two periods, we don't make the rules ๐Ÿ˜ญ
  • --mno-compound โ€” Hexagon: stops it from looking for compound instructions periodt
  • --mno-fixup โ€” Hexagon: stops the fixing up of resolved relocations ๐Ÿ’…
  • --mno-ldc1-sdc1 โ€” expands double precision loads and stores into their single precision counterparts ๐Ÿฆ‹
  • --mno-pairing โ€” Hexagon: stops it looking for duplex instructions โœจ
  • --ms-secure-hotpatch-functions-file=<filename> โ€” a file containing a list of mangled function names to mark for Windows Secure Hot-Patching ๐Ÿ”ฅ
  • --ms-secure-hotpatch-functions-list=<list> โ€” same energy, but you're passing the list of mangled function names inline instead of via a file ๐Ÿ‘‘
  • --mwarn-missing-parenthesis โ€” warns you when a parenthesis around predicate registers goes missing ๐Ÿ™ˆ
  • --mwarn-noncontigious-register โ€” warns for register names that aren't contigious (yes, that spelling, we're keeping it, no cap)
  • --mwarn-sign-mismatch โ€” warns when you mismatch a signed and an unsigned value ๐Ÿ˜ญ
  • --no-deprecated-warn โ€” suppresses, like, all deprecated warnings. every single one. total silence ๐Ÿซถ
  • --no-discriminators โ€” stops discriminator information from being generated โœจ
  • --no-type-check โ€” suppresses type errors (Wasm) ๐ŸŽ€
  • --no-warn โ€” suppresses all warnings. bestie said โœจshushโœจ
  • --nvptx-approx-log2f32 โ€” NVPTX Specific: whether to use lg2.approx for log2 โญ
  • --nvptx-sched4reg โ€” NVPTX Specific: schedule for register pressue (their typo, our girl kept it exactly ๐Ÿ’€)
  • --object-size-offset-visitor-max-visit-instructions=<uint> โ€” the maximum number of instructions for ObjectSizeOffsetVisitor to look at ๐Ÿ‘€
  • --oop-executor-connect=<<hostname>:<port>> โ€” connects to an out-of-process executor through a TCP socket ๐Ÿ”Œ
  • --pgo-block-coverage โ€” use this one to enable basic block coverage instrumentation ๐Ÿ“
  • --pgo-temporal-instrumentation โ€” use this one to enable temporal instrumentation โณ
  • --pgo-view-block-coverage-graph โ€” makes a dot file of CFGs stuffed with block coverage inference information ๐ŸŒˆ
  • --print-pipeline-passes โ€” prints a -passes compatible string describing the pipeline (best-effort only, she's doing her best, don't come for her ๐Ÿ’œ)
  • --profcheck-annotate-select โ€” also injects (if it's missing) and verifies MD_prof for select instructions ๐Ÿ’…
  • --profcheck-default-function-entry-count=<long> โ€” no description given in the original, she's mysterious like that, iykyk
  • --profcheck-default-select-false-weight=<uint> โ€” when annotating select instructions, this value gets used for the second ('false') case ๐ŸŽ€
  • --profcheck-default-select-true-weight=<uint> โ€” when annotating select instructions, this value gets used for the first ('true') case โœจ
  • --profcheck-weights-for-test โ€” generates weights with small values, for tests ๐Ÿงช
  • --profile-correlate=<value> โ€” use debug info or a binary file to correlate profiles ๐ŸŒธ
    • =empty โ€” no profile correlation
    • =debug-info โ€” use debug info to correlate
    • =binary โ€” use binary to correlate
  • --promote-alloca-vector-loop-user-weight=<uint> โ€” the bonus weight of users of allocas within a loop when sorting profitable allocas โš–๏ธ
  • --propeller-infer-threshold=<number> โ€” threshold for inferring a stale profile ๐Ÿ”
  • --r600-ir-structurize โ€” use the StructurizeCFG IR pass ๐Ÿ”ฅ
  • --riscv-add-build-attributes โ€” no description in the original, just vibes, we respect it ๐Ÿ™ˆ
  • --riscv-use-aa โ€” enables the use of AA during codegen โœจ
  • --runtime-counter-relocation โ€” enables relocating counters at runtime ๐Ÿƒโ€โ™€๏ธ
  • --safepoint-ir-verifier-print-only โ€” again, no description provided, she simply exists ๐Ÿ’œ
  • --sample-profile-check-record-coverage=<N> โ€” emits a warning if less than N% of records in the input profile got matched to the IR ๐Ÿ˜ญ
  • --sample-profile-check-sample-coverage=<N> โ€” emits a warning if less than N% of samples in the input profile got matched to the IR ๐Ÿซถ
  • --sample-profile-max-propagate-iterations=<uint> โ€” the maximum number of iterations to go through when propagating sample block/edge weights through the CFG ๐Ÿ”
  • --sampled-instr-burst-duration=<uint> โ€” sets the profile instrumentation burst duration, which can range from 1 to the value of sampled-instr-period (0 is invalid). this many samples get recorded for each sampled-instr-period count update. setting it to 1 enables simple sampling, and in that case it's recommended to set sampled-instr-period to a prime number ๐Ÿ‘‘
  • --sampled-instr-period=<uint> โ€” sets the profile instrumentation sample period. a sample period of 0 is invalid. for each sample period, a fixed number of consecutive samples gets recorded, and 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 it's disabled under simple sampling (burst duration = 1) ๐Ÿ’…
  • --sampled-instrumentation โ€” do PGO instrumentation sampling ๐Ÿงš
  • --sanitizer-early-opt-ep โ€” inserts sanitizers on OptimizerEarlyEP ๐Ÿ›ก๏ธ
  • --save-temp-labels โ€” don't discard temporary labels ๐Ÿท๏ธ
  • --skip-ret-exit-block โ€” suppresses 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 this option is false, and the target block is in a loop, the promotion gets disallowed unless the promoted counter update can be further/iteratively promoted into an acyclic region ๐ŸŒ€
  • --spirv-emit-op-names โ€” emits OpName for all instructions โœจ
  • --spirv-ext=<value> โ€” specify the list of enabled SPIR-V extensions ๐ŸŒˆ
  • --spv-allow-unknown-intrinsics[=<intrinsic_prefix_0,intrinsic_prefix_1>] โ€” emits unknown intrinsics as calls to external functions. you must provide a comma-separated input list of intrinsic prefixes, and only intrinsics carrying a listed prefix get emitted as described ๐ŸŽ€
  • --spv-dump-deps โ€” dumps MIR with SPIR-V dependencies info ๐Ÿ—‚๏ธ
  • --spv-emit-nonsemantic-debug-info โ€” emits SPIR-V NonSemantic.Shader.DebugInfo.100 instructions ๐Ÿ’œ
  • --summary-file=<string> โ€” the summary file to use for function importing ๐Ÿ“„
  • --sve-tail-folding=<string> โ€” controls the use of vectorisation using tail-folding for SVE, where you write the option in the form (Initial)[+(Flag1|Flag2|...)] ๐Ÿฆ‹
    • disabled โ€” (Initial) no loop types will vectorize using tail-folding
    • default โ€” (Initial) uses the default tail-folding settings for the target CPU
    • all โ€” (Initial) all legal loop types will vectorize using tail-folding
    • simple โ€” (Initial) use tail-folding for simple loops (not reductions or recurrences)
    • reductions โ€” use tail-folding for loops containing reductions
    • noreductions โ€” inverse of above
    • recurrences โ€” use tail-folding for loops containing fixed order recurrences
    • norecurrences โ€” inverse of above
    • reverse โ€” use tail-folding for loops requiring reversed predicates
    • noreverse โ€” inverse of above
  • --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
okay so real talk on those last two: the force-enabled variants are explicitly flagged as possibly unsafe in the original. forcing them is on you, bestie. no cap, no take-backs ๐Ÿ’€
  • --target-abi=<string> โ€” the name of the ABI to be targeted from the backend ๐ŸŽฏ
  • --thinlto-assume-merged โ€” assumes the input has already undergone ThinLTO function importing and the other pre-optimization pipeline changes โœ”๏ธ
  • --threads=<int> โ€” no description provided, she's just here, existing, being iconic ๐Ÿ‘‘
  • --translator-compatibility-mode โ€” SPIR-V Translator compatibility mode ๐Ÿงฉ
  • --ubsan-guard-checks โ€” wraps your UBSAN checks in a lil guard: llvm.allow.ubsan.check(). bestie gets a veto now ๐Ÿ’…
  • --use-undef โ€” use undef when generating programs
  • --verify-region-info โ€” verify region info. heads up, this one is time consuming, so don't be shocked when it takes a minute ๐ŸŒ
  • --vp-counters-per-site=<number> โ€” the average number of profile counters handed out per value profiling site
  • --vp-static-alloc โ€” do static counter allocation for the value profiler
  • --wasm-enable-eh โ€” WebAssembly exception handling
  • --wasm-enable-sjlj โ€” WebAssembly setjmp/longjmp handling
  • --wasm-use-legacy-eh โ€” WebAssembly exception handling, but the legacy flavor
  • --x86-align-branch=<string> โ€” specifies which types of branches to align, as a plus-separated list of types:
    • jcc โ€” conditional jumps
    • fused โ€” fused conditional jumps
    • jmp โ€” direct unconditional jumps
    • call โ€” direct and indirect calls
    • ret โ€” rets
    • indirect โ€” indirect unconditional jumps
  • --x86-align-branch-boundary=<uint> โ€” controls how the assembler should align branches with NOP. If the boundary size isn't 0, it's gotta be a power of 2 and no less than 32. Branches get aligned so they don't sit across or against the boundary of that size. The default value 0 means no branch aligning at all โœจ
  • --x86-branches-within-32B-boundaries โ€” aligns selected instructions to soften the negative performance impact of Intel's micro code update for errata skx102. because of course that's a whole thing
โš ๏ธ This one may break your assumptions about labels corresponding to particular instructions, so use it with caution, fr fr.
  • --x86-enable-apx-for-relocation โ€” enable APX features (EGPR, NDD and NF) for instructions with relocations on x86-64 ELF
  • --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 โ€” says the assembler should encode SSE instructions with the VEX prefix

๐ŸŒธ Generic Options ๐ŸŒธ

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

๐Ÿ’œ IR2Vec Options ๐Ÿ’œ

  • --ir2vec-arg-weight=<number> โ€” weight for argument embeddings
  • --ir2vec-kind=<value> โ€” IR2Vec embedding kind
    • =symbolic โ€” generate symbolic embeddings
    • =flow-aware โ€” generate flow-aware embeddings
  • --ir2vec-opc-weight=<number> โ€” weight for opcode embeddings
  • --ir2vec-type-weight=<number> โ€” weight for type embeddings
  • --ir2vec-vocab-path=<string> โ€” path to the vocabulary file for IR2Vec

๐Ÿฆ‹ MIR2Vec Options ๐Ÿฆ‹

  • --mir2vec-common-operand-weight=<number> โ€” weight for common operand embeddings
  • --mir2vec-kind=<value> โ€” MIR2Vec embedding kind
    • =symbolic โ€” generate symbolic embeddings for MIR
  • --mir2vec-opc-weight=<number> โ€” weight for machine opcode embeddings
  • --mir2vec-reg-operand-weight=<number> โ€” weight for register operand embeddings
  • --mir2vec-vocab-path=<string> โ€” path to the vocabulary file for MIR2Vec

๐ŸŒˆ Out-of-process Execution Options ๐ŸŒˆ

  • --oop-executor[=<string>] โ€” launch an out-of-process executor to run code
  • --orc-runtime[=<string>] โ€” path to the ORC runtime
  • --slab-allocate=<string> โ€” allocate from a slab of the given size. allowable suffixes are Kb, Mb, Gb. default = Kb
  • --use-shared-memory โ€” use shared memory to transfer generated code and data

๐Ÿ‘‘ Polly Options: Configure the polly loop optimizer ๐Ÿ‘‘

  • --polly โ€” enable the polly optimizer (works 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 โ€” dump module after Polly transformations into a file suffixed with "-after"
  • --polly-dump-after-file=<string> โ€” dump module after Polly transformations to the given file
  • --polly-dump-before โ€” dump module before Polly transformations into a file suffixed with "-before"
  • --polly-dump-before-file=<string> โ€” dump module before Polly transformations to the given file
  • --polly-enable-simplify โ€” simplify SCoP after optimizations
  • --polly-ignore-func=<string> โ€” ignore functions that match a regex. multiple regexes can be comma separated. Scop detection will ignore all functions that match ANY of the regexes provided.
  • --polly-isl-arg=<argument> โ€” option passed to ISL
  • --polly-matmul-opt โ€” perform optimizations of matrix multiplications based on pattern matching
  • --polly-on-isl-error-abort โ€” abort if an isl error is encountered
  • --polly-only-func=<string> โ€” only run on functions that match a regex. multiple regexes can be comma separated. Scop detection will run on all functions that match ANY of the regexes provided.
  • --polly-only-region=<identifier> โ€” only run on certain regions (the provided identifier must appear in the name of the region's entry block)
  • --polly-only-scop-detection โ€” only run scop detection, but no other optimizations
  • --polly-optimized-scops โ€” Polly - dump polyhedral description of Scops optimized with the isl scheduling optimizer and the set of post-scheduling transformations 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
  • --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-print-ast โ€” print the ISL abstract syntax tree
  • --polly-print-delicm โ€” Polly - print DeLICM/DePRE
  • --polly-print-deps โ€” Polly - print dependences
  • --polly-print-detect โ€” Polly - print static control parts (SCoPs)
  • --polly-print-flatten-schedule โ€” a polly pass
  • --polly-print-import-jscop โ€” Polly - print Scop import result
  • --polly-print-mse โ€” Polly - print Maximal static expansion of SCoP
  • --polly-print-opt-isl โ€” a polly pass
  • --polly-print-optree โ€” Polly - print forward operand tree result
  • --polly-print-scops โ€” print polyhedral description of all regions
  • --polly-print-simplify โ€” Polly - print Simplify actions
  • --polly-process-unprofitable โ€” process scops that are unlikely to benefit from Polly optimizations.
  • --polly-register-tiling โ€” turns on register tiling โœจ
  • --polly-report โ€” spills all the tea about what Polly's been doing: prints information about the activities of Polly ๐Ÿ’…
  • --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 โ€” same highlight energy, but in a (CFG only BBs) โœจ
  • --polly-stmt-granularity=<value> โ€” the algorithm to use for splitting basic blocks into multiple statements. pick ur fighter:
    • =bb โ€” one statement per basic block ๐Ÿ’€
    • =scalar-indep โ€” scalar independence heuristic ๐Ÿงš
    • =store โ€” store-level granularity ๐Ÿ“
  • --polly-tc-opt โ€” performs optimizations of tensor contractions based on pattern matching ๐Ÿ”ฅ
  • --polly-tiling โ€” turns on loop tiling ๐ŸŽ€
  • --polly-vectorizer=<value> โ€” picks the vectorization strategy, choose wisely bestie:
    • =none โ€” no Vectorization ๐Ÿ™ˆ
    • =stripmine โ€” strip-mine outer loops so the loop-vectorizer triggers โญ

aaaand that's the whole page, bestie!! ๐Ÿซถ this legendary little manual is clang-repl 22, dated September 2026, and it lives its life as CLANG-REPL(1). go read it again, go compile something iconic, and remember: the vibes are immaculate, the flags are documented, periodt ๐Ÿ’–๐ŸŒธ

๐Ÿ“ฆ where this page comes from