CLANG-REPL(1)

πŸ“¦
version 15.0.7 Β· 3 versions
, in ubuntu jammy

πŸŽ€ CLANG-REPL πŸ’… β€” like, the manual page for clang-repl 15 (User Commands, bestie)

okay so. hi. you found the clang-repl page, part 1 of 4, and I am so proud of you for reading a manual on purpose. sit down, hydrate, let's go. 🫢


✨ NAME ✨

clang-repl β€” manual page for clang-repl 15


🌸 DESCRIPTION 🌸

bestie. the whole vibe is right here:

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

that's it. that's the energy. options, and then some code you wanna run. iconic.

OPTIONS:


πŸ’– Color Options πŸ’–

  • --color β€” use colors in output. the default is autodetect, so it figures out the vibe check on its own. 🌈

πŸ¦‹ General options πŸ¦‹

okay this is the big one. like, the whole menu. buckle up. there are SO many of these and I am obsessed with every single one.

  • --Xcc=<string> β€” an argument to pass to the CompilerInvocation. it's giving secret handshake. 🀝
  • --aarch64-neon-syntax=<value> β€” pick which style of NEON code the AArch64 backend emits:
    • =generic β€” emit generic NEON assembly
    • =apple β€” emit Apple-style NEON assembly
  • --aarch64-use-aa β€” enable the use of AA during codegen.
  • --abort-on-max-devirt-iterations-reached β€” abort when the max iterations for the devirtualization CGSCC repeat pass is reached. it's dramatic but it's valid. πŸ’€
  • --addrsig β€” emit an address-significance table.
  • --align-loops=<uint> β€” default alignment for loops.
  • --allow-ginsert-as-artifact β€” allow G_INSERT to be considered an artifact. literally a hack around AMDGPU test infinite loops. no cap.
  • --amdgpu-bypass-slow-div β€” skip 64-bit divide for dynamic 32-bit values.
  • --amdgpu-disable-loop-alignment β€” do not align and prefetch loops.
  • --amdgpu-dpp-combine β€” enable DPP combiner.
  • --amdgpu-dump-hsa-metadata β€” dump AMDGPU HSA Metadata.
  • --amdgpu-enable-merge-m0 β€” merge and hoist M0 initializations.
  • --amdgpu-enable-power-sched β€” enable scheduling to minimize mAI power bursts.
  • --amdgpu-igrouplp β€” enable construction of Instruction Groups and their ordering for scheduling.
  • --amdgpu-promote-alloca-to-vector-limit=<uint> β€” maximum byte size to consider for promoting alloca to vector.
  • --amdgpu-sdwa-peephole β€” enable SDWA peepholer.
  • --amdgpu-use-aa-in-codegen β€” enable the use of AA during codegen.
  • --amdgpu-verify-hsa-metadata β€” verify AMDGPU HSA Metadata.
  • --amdgpu-vgpr-index-mode β€” use GPR indexing mode instead of movrel for vector indexing.
  • --arm-add-build-attributes β€” (yes bestie, that's the whole entry, it just sits there looking mysterious πŸ«₯)
  • --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.
  • --bounds-checking-single-trap β€” use one trap block per function.
  • --cfg-hide-cold-paths=<number> β€” hide blocks with relative frequency below the given value.
  • --cfg-hide-deoptimize-paths β€” (another lil silent icon, no description, we respect the mystery πŸŽ€)
  • --cfg-hide-unreachable-paths β€” (same energy, also no description πŸ’…)
  • --code-model=<value> β€” choose 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> β€” target cost kind:
    • =throughput β€” Reciprocal throughput
    • =latency β€” Instruction latency
    • =code-size β€” Code size
    • =size-latency β€” Code size and latency
  • --data-sections β€” emit data into separate sections.
  • --debug-entry-values β€” enable debug info for the debug entry values.
  • --debug-info-correlate β€” use debug info to correlate profiles.
  • --debugger-tune=<value> β€” tune debug info for a particular debugger:
    • =gdb β€” gdb
    • =lldb β€” lldb
    • =dbx β€” dbx
    • =sce β€” SCE targets (e.g. PS4)
  • --debugify-func-limit=<ulong> β€” set max number of processed functions per pass.
  • --debugify-level=<value> β€” kind of debug info to add:
    • =locations β€” Locations only
    • =location+variables β€” Locations and Variables
  • --debugify-quiet β€” suppress verbose debugify output. 🀫
  • --denormal-fp-math=<value> β€” select which denormal numbers the code is permitted to require:
    • =ieee β€” IEEE 754 denormal numbers
    • =preserve-sign β€” the sign of a flushed-to-zero number is preserved in the sign of 0
    • =positive-zero β€” denormals are flushed to positive zero
  • --denormal-fp-math-f32=<value> β€” same deal as above, but for float:
    • =ieee β€” IEEE 754 denormal numbers
    • =preserve-sign β€” the sign of a flushed-to-zero number is preserved in the sign of 0
    • =positive-zero β€” denormals are flushed to positive zero
  • --disable-i2p-p2i-opt β€” disables inttoptr/ptrtoint roundtrip optimization.
  • --disable-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.
  • --do-counter-promotion β€” do counter register promotion.
  • --dot-cfg-mssa=<file name for generated dot file> β€” file name for generated dot file.
  • --dwarf-version=<int> β€” Dwarf version.
  • --dwarf64 β€” generate debugging info in the 64-bit DWARF format.
  • --emit-call-site-info β€” emit call site debug information, if debug information is enabled.
  • --emit-dwarf-unwind=<value> β€” whether to emit DWARF EH frame entries:
    • =always β€” Always emit EH frame entries
    • =no-compact-unwind β€” Only emit EH frame entries when compact unwind is not available
    • =default β€” Use target platform default
  • --emscripten-cxx-exceptions-allowed=<string> β€” the list of function names in which Emscripten-style exception handling is enabled (see emscripten EMSCRIPTEN_CATCHING_ALLOWED options).
  • --emulated-tls β€” use emulated TLS model.
  • --enable-approx-func-fp-math β€” enable FP math optimizations that assume approx func.
  • --enable-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 β€” (silent queen, no description, we stan anyway πŸ‘‘)
  • --enable-gvn-sink β€” enable the GVN sinking pass (default = off).
  • --enable-jmc-instrument β€” instrument functions with a call to __CheckForDebuggerJustMyCode.
  • --enable-load-in-loop-pre β€” (no description, just vibes ✨)
  • --enable-load-pre β€” (again, no description, still iconic)
  • --enable-loop-simplifycfg-term-folding β€” (no description, mysterious and powerful πŸ’œ)
  • --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 bestie, just let it cook πŸ“)
  • --enable-unsafe-fp-math β€” enable optimizations that may decrease FP precision. ⚠️ yes this one is spicy, that's the actual wording, respect it.
  • --exception-model=<value> β€” exception model:
    • =default β€” default exception handling model

okay bestie that's where part 1 wraps β€” more is coming, don't go anywhere. πŸ’–


  • =dwarf β€” DWARF-like CFI based exception handling. slay πŸ’–
  • =sjlj β€” SjLj exception handling. iconic ✨
  • =arm β€” ARM EHABI exceptions. lowkey cool πŸŽ€
  • =wineh β€” Windows exception model. windows vibes πŸͺŸ
  • =wasm β€” WebAssembly exception handling. wasm bestie πŸ¦‹
  • --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. parallel processing, periodt πŸ’…
  • --executor=<string> β€” The name of the executor to use. pick your executor, bestie 🧚
  • --experimental-debug-variable-locations β€” Use experimental new value-tracking variable locations. experimental! ✨
  • --fatal-warnings β€” Treat warnings as errors. no warnings allowed, periodt πŸ’€
  • --filetype=<value> β€” Choose a file type (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. filter it out, bestie πŸŽ€
  • --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. force it, slay πŸ’…
  • --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
  • --fs-profile-debug-bw-threshold=<uint> β€” Only show debug message if the source branch weight is greater than this value. threshold vibes ✨
  • --fs-profile-debug-prob-diff-threshold=<uint> β€” Only show debug message if the branch probility is greater than this value (in percentage). percentage, bestie πŸ“
  • --function-sections β€” Emit functions into separate sections. separate sections, periodt πŸ¦‹
  • --generate-merged-base-profiles β€” When generating nested context-sensitive profiles, always generate extra base profile for function with all its context profiles merged into it. merged profiles, slay πŸ’–
  • --gpsize=<uint> β€” Global Pointer Addressing Size. The default size is 8. size matters, bestie πŸ’…
  • --hash-based-counter-split β€” Rename counter variable of a comdat function based on cfg hash. hash it out πŸŽ€
  • --hot-cold-split β€” Enable hot-cold splitting pass. hot and cold, iconic πŸ”₯
  • --ignore-xcoff-visibility β€” Not emit the visibility attribute for asm in AIX OS or give all symbols 'unspecified' visibility in XCOFF object file. xcoff vibes 🧚
  • --import-all-index β€” Import all external functions in index. import everything πŸ’–
  • --incremental-linker-compatible β€” When used with filetype=obj, emit an object file which can be used with an incremental linker. incremental linker, bestie ✨
  • --instcombine-code-sinking β€” Enable code sinking. sink it, slay πŸ’…
  • --instcombine-guard-widening-window=<uint> β€” How wide an instruction window to bypass looking for another guard. wide window πŸŽ€
  • --instcombine-max-iterations=<uint> β€” Limit the maximum number of instruction combining iterations. max iterations, periodt πŸ’€
  • --instcombine-max-num-phis=<uint> β€” Maximum number phis to handle in intptr/ptrint folding. phis, bestie πŸ¦‹
  • --instcombine-max-sink-users=<uint> β€” Maximum number of undroppable users for instruction sinking. undroppable users ✨
  • --instcombine-maxarray-size=<uint> β€” Maximum array size considered when doing a combine. array size, slay πŸ’–
  • --instcombine-negator-enabled β€” Should we attempt to sink negations? negation sinking, iykyk πŸ’…
  • --instcombine-negator-max-depth=<uint> β€” What is the maximal lookup depth when trying to check for viability of negation sinking. max depth πŸŽ€
  • --instrprof-atomic-counter-update-all β€” Make all profile counter updates atomic (for testing only). atomic! for testing only, bestie πŸ”₯
  • --internalize-public-api-file=<filename> β€” A file containing list of symbol names to preserve. preserve the symbols ✨
  • --internalize-public-api-list=<list> β€” A list of symbol names to preserve. list of symbols πŸ’–
  • --iterative-counter-promotion β€” Allow counter promotion across the whole loop nest. loop nest, slay πŸ¦‹
  • --lower-global-dtors-via-cxa-atexit β€” Lower llvm.global_dtors (global destructors) via __cxa_atexit. global destructors πŸ’…
  • --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. regex filter, bestie πŸŽ€
  • --lto-pass-remarks-format=<format> β€” The format used for serializing remarks (default: YAML). YAML default, periodt ✨
  • --lto-pass-remarks-output=<filename> β€” Output filename for pass remarks. output file πŸ’–
  • --march=<string> β€” Architecture to generate code for (see --version). march to your own beat πŸ¦‹
  • --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). attributes, slay πŸ’…
  • --max-counter-promotions=<int> β€” Max number of allowed counter promotions. max promotions πŸŽ€
  • --max-counter-promotions-per-loop=<uint> β€” Max number counter promotions per loop to avoid increasing register pressure too much. per loop, bestie ✨
  • --mc-relax-all β€” When used with filetype=obj, relax all fixups in the emitted object file. relax all πŸ’–
  • --mcabac β€” tbd. tbd, iconic πŸ’€
  • --mcpu=<cpu-name> β€” Target a specific cpu type (-mcpu=help for details). cpu type, iykyk πŸ¦‹
  • --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. missing parenthesis? error! πŸ’…
  • --merror-noncontigious-register β€” Error for register names that aren't contigious. noncontigious (sic) error ✨
  • --mhvx β€” Enable Hexagon Vector eXtensions. hexagon vector, slay πŸŽ€
  • --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. constant islands πŸ’–
  • --mips16-hard-float β€” Enable mips16 hard float. hard float, bestie ✨
  • --mir-strip-debugify-only β€” Should mir-strip-debug only strip debug info from debugified modules by default. debugify only πŸ¦‹
  • --misexpect-tolerance=<uint> β€” Prevents emiting diagnostics when profile counts are within N% of the threshold.. tolerance, periodt.. (two dots) πŸ’€
  • --mno-compound β€” Disable looking for compound instructions for Hexagon. no compound πŸ’…
  • --mno-fixup β€” Disable fixing up resolved relocations for Hexagon. no fixup πŸŽ€
  • --mno-ldc1-sdc1 β€” Expand double precision loads and stores to their single precision counterparts. double to single ✨
  • --mno-pairing β€” Disable looking for duplex instructions for Hexagon. no pairing πŸ’–
  • --mwarn-missing-parenthesis β€” Warn for missing parenthesis around predicate registers. warn for parenthesis πŸ¦‹
  • --mwarn-noncontigious-register β€” Warn for register names that arent contigious. arent (sic) contigious πŸ’…
  • --mwarn-sign-mismatch β€” Warn for mismatching a signed and unsigned value. sign mismatch πŸŽ€
  • --no-deprecated-warn β€” Suppress all deprecated warnings. no deprecated warnings ✨
  • --no-discriminators β€” Disable generation of discriminator information. no discriminators πŸ’–
  • --no-type-check β€” Suppress type errors (Wasm). no type check, wasm πŸ¦‹
  • --no-warn β€” Suppress all warnings. no warnings at all, periodt πŸ’€
  • --no-xray-index β€” bestie, this one is so simple it's almost rude: don't emit the xray_fn_idx section. that's the whole thing. πŸ’…
  • --nozero-initialized-in-bss β€” usually all your zero-initialized symbols get parked in the bss section like it's their assigned seat. this flag says no actually, don't place zero-initialized symbols into bss. goodbye seat. 🫢
  • --nvptx-sched4reg β€” NVPTX specific behavior, and the manpage spells it out as: schedule for register pressue (yes that's the exact wording, we keep it character for character 😭). it's giving "for the register pressure girlies". πŸŽ€
  • --opaque-pointers β€” literally just: use opaque pointers. short, sweet, iconic. ✨
  • --poison-checking-function-local β€” a testing-only vibe check: check that returns are non-poison, and yes the manpage explicitly tags it "(for testing)". so don't be out here shipping it, bestie. πŸ’€
  • --print-pipeline-passes β€” this prints a string that's compatible with -passes and describes the pipeline. the manpage is very honest and adds: (best-effort only). so it's trying its best, okay?? πŸ™ˆ
  • --r600-ir-structurize β€” use the StructurizeCFG IR pass. that's the tea. β˜•
  • --rdf-dump β€” okay so this one has no description at all in the manpage. it's a mystery, it's a vibe, it's a blank space. the flag exists, the description does not. πŸ’€
  • --rdf-limit=<uint> β€” same situation bestie, no description given. it takes a <uint> and that is genuinely all we know. 🫠
  • --relax-elf-relocations β€” on x86-64 ELF this emits GOTPCRELX/REX_GOTPCRELX instead of GOTPCREL. fancy relocation glow-up fr fr. ✨
  • --relocation-model=<value> β€” pick your relocation model, queen. the options are:
    • =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 β€” a combination of ropi and rwpi
  • --runtime-counter-relocation β€” enable relocating counters at runtime. periodt. πŸ’…
  • --safepoint-ir-verifier-print-only β€” once again, no description in the manpage. the flag is real, the lore is missing. πŸ•³οΈ
  • --sample-profile-check-record-coverage=<N> β€” emit a warning if less than N% of records in the input profile are matched to the IR. it's a lil coverage watchdog. 🐢
  • --sample-profile-check-sample-coverage=<N> β€” same energy but for samples: emit a warning if less than N% of samples in the input profile are 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. it's giving "how many laps around the CFG are we doing, bestie". πŸ”
  • --skip-ret-exit-block β€” suppress counter promotion if exit blocks contain ret. if there's a ret in there, we're not promoting, no cap. βœ‹
  • --speculative-counter-promotion-max-exiting=<uint> β€” the max number of exiting blocks of a loop to allow speculative counter promotion. know your limit, stay within it. 🌸
  • --speculative-counter-promotion-to-loop β€” okay so when this option is false: if 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. so like… either it escapes to somewhere acyclic, or it's not happening. πŸŒ€
  • --split-machine-functions β€” split out cold basic blocks from machine functions based on profile information. the cold blocks get their own little corner. 🧊
  • --stack-size-section β€” emit a section containing stack size metadata. receipts, basically. 🧾
  • --stack-symbol-ordering β€” order local stack symbols. yes that's the whole description, and yes we're obsessed. πŸŽ€
  • --stackrealign β€” force align the stack to the minimum alignment. no more misaligned chaos. πŸ“
  • --strict-dwarf β€” the manpage literally just says use strict dwarf. lowercase and everything. iconic brevity. 🧚
  • --summary-file=<string> β€” the summary file to use for function importing. hand it the file, it does the importing. 🫢
  • --sve-tail-folding=<string> β€” control the use of vectorisation using tail-folding for SVE. the choices, bestie:
    • 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. pick your moment:
    • =auto β€” determine based on deployment target
    • =always β€” always set the bit
    • =never β€” never set the bit
  • --tail-predication=<value> β€” MVE tail-predication pass options, and listen, two of these are literally marked as possibly unsafe, so read the fine print:
    • =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 β€” turn fastcc calls into tail calls by (potentially) changing ABI. note the "potentially changing ABI" bestie, that's a real consequence, we don't skip it. πŸ‘€
  • --thinlto-assume-merged β€” assume the input has already undergone ThinLTO function importing and the other pre-optimization pipeline changes. it's an assumption flag, so assume responsibly. πŸ™ˆ
  • --thread-model=<value> β€” choose threading model:
    • =posix β€” POSIX thread model
    • =single β€” single thread model
  • --threads=<int> β€” no description in the manpage, just a number and a dream. 🫠
  • --tls-size=<uint> β€” bit size of immediate TLS offsets. πŸ“
  • --type-based-intrinsic-cost β€” calculate intrinsics cost based only on argument types. only the types, nothing else. πŸ’…
  • --unique-basic-block-section-names β€” give unique names to every basic block section. every single one gets its own name. no duplicates allowed. 🏷️
  • --unique-section-names β€” same but bigger: give unique names to every section. ✨
  • --use-ctors β€” use .ctors instead of .init_array. retro choice, respect it. πŸŽ€
  • --vec-extabi β€” enable the AIX Extended Altivec ABI. πŸ¦‹
  • --verify-region-info β€” verify region info, and the manpage warns it's (time consuming). so like, know what you're signing up for bestie. ⏳
  • --vp-counters-per-site=<number> β€” the average number of profile counters allocated per value profiling site. an average, mind you. πŸ“Š
  • --vp-static-alloc β€” do static counter allocation for value profiler. static queen. πŸ‘‘
  • --wasm-enable-eh β€” WebAssembly exception handling. 🧊
  • --wasm-enable-sjlj β€” WebAssembly setjmp/longjmp handling. throwback behavior, love that. πŸͺ‚
  • --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. okay so the deets: if the boundary's size is not 0, it should be a power of 2 and no less than 32. branches get aligned so they're not across or against the boundary of that size. and the default value 0 does not align branches. so if you want alignment, you actually have to ask for it. πŸ“
  • --x86-branches-within-32B-boundaries β€” align selected instructions to mitigate negative performance impact of Intel's micro code update for errata skx102. and here's the caution, bestie: this may break assumptions about labels corresponding to particular instructions, and should be used with caution. we do not skip the warning. 🚨
  • --x86-pad-max-prefix-size=<uint> β€” maximum number of prefixes to use for padding. πŸŽ€
  • --xcoff-traceback-table β€” emit the XCOFF traceback table. 🧚

✨ Generic Options ✨

  • --help β€” display available options, and the manpage adds (--help-hidden for more). there's always more, bestie. πŸ‘€
  • --help-list β€” display list of available options, again with (--help-list-hidden for more). 🫢
  • --version β€” display the version of this program. the classic. the icon. πŸ’…

πŸ¦‹ Polly Options πŸ¦‹

Configure the polly loop optimizer. she's a whole section, she gets her own vibe. ✨

  • --polly β€” enable the polly optimizer (with -O1, -O2 or -O3). note the optimization levels, they matter. πŸ”₯
  • --polly-2nd-level-tiling β€” enable a 2nd level loop of loop tiling. tiling, but make it double. 🍰
  • --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. and the manpage adds: (a value of -1 schedules another approximation stage before the actual dead code elimination. β€” yes, the parenthesis is unbalanced in the original and we're keeping it exactly as-is, character for character. 😭
  • --polly-delicm-max-ops=<int> β€” maximum number of isl operations to invest for lifetime analysis; 0=no limit. so 0 means go feral. πŸŒ€
  • --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. you name it, it writes there. ✍️
  • --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. tidy up after the party. ✨
  • --polly-ignore-func=<string> β€” bestie, this one is the block list πŸ’… Give it a regex and Scop detection will straight up ignore every function that matches. Got multiple regexes? Comma-separate them, because Scop detection will skip all functions that match ANY of the regexes you handed over. periodt.
  • --polly-isl-arg=<argument> β€” an option that gets passed straight through to ISL ✨
  • --polly-on-isl-error-abort β€” the moment an isl error shows up, it aborts. no negotiating πŸ›‘
  • --polly-only-func=<string> β€” the allow list πŸŽ€ Only run on functions that match a regex. Multiple regexes? Comma-separate them, because Scop detection will run on all functions that match ANY of the regexes you gave it.
  • --polly-only-region=<identifier> β€” only run on certain regions. lowkey important detail: the identifier you pass must appear in the name of the region's entry block πŸ‘‘
  • --polly-only-scop-detection β€” does scop detection and literally nothing else. no other optimizations, just the detection, that's the whole vibe 🌸
  • --polly-optimized-scops β€” Polly dumps the polyhedral description of Scops optimized with the isl scheduling optimizer, plus the set of post-scheduling transformations applied on the schedule tree. it's giving receipts 🧾✨
  • --polly-parallel β€” generate thread parallel code (isl codegen only, iykyk) 🧡
  • --polly-parallel-force β€” forces generation of thread parallel code and ignores any cost model while doing it. no cap, it does not care about the math πŸ’€
  • --polly-pattern-matching-based-opts β€” performs optimizations based on pattern matching πŸ”
  • --polly-postopts β€” applies post-rescheduling optimizations like tiling. heads up though: this 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. skipping checks, living dangerously πŸ™ˆ
  • --polly-process-unprofitable β€” processes scops that are unlikely to benefit from Polly optimizations. main character energy for the underdogs honestly 🫢
  • --polly-register-tiling β€” enable register tiling ✨
  • --polly-report β€” prints info about what Polly has been up to. it's giving ~activity log~ πŸ“‹
  • --polly-reschedule β€” optimize 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> β€” the algorithm to use for splitting basic blocks into multiple statements. options are:
    • =bb β€” one statement per basic block
    • =scalar-indep β€” scalar independence heuristic
    • =store β€” store-level granularity
  • --polly-target=<value> β€” the hardware to target. options are:
    • =cpu β€” generate CPU code
  • --polly-tiling β€” enable loop tiling 🧩
  • --polly-vectorizer=<value> β€” selects the vectorization strategy. options are:
    • =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 options, bestie πŸŽ€ you made it to the very end of the page, which is iconic behavior honestly πŸ‘‘

little sign-off moment: this whole thing is from clang-repl 15, dated July 2023, and the page is filed under CLANG-REPL(1) πŸ¦‹ go forth and repl, you absolute legend πŸ’–βœ¨

πŸ“¦ where this page comes from