CLANG-REPL(1)

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

πŸ’– clang-repl β€” the manual page, but make it make sense πŸ’–

okay so bestie, welcome to clang-repl, from the User Commands corner of your manual, version 13. It's the interactive REPL for Clang and she is iconic. Let's get into it, no cap. πŸ¦‹


✨ NAME ✨

clang-repl β€” manual page for clang-repl 13 πŸ’…


🌸 DESCRIPTION 🌸

Here's how you actually run her:

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

Like, you give her options, you give her code to run, and she does the thing. Simple. Periodt. ✨

OPTIONS:

πŸŽ€ Color Options πŸŽ€

The aesthetic section. We love her.

  • --color β€” use colors in output, bestie 🌈 (default=autodetect β€” she'll figure out the vibe check on her own)

πŸ’œ General options πŸ’œ

This is the big one. Grab a snack, this list is long. πŸ“

  • --Xcc=<string> β€” an argument to pass straight through to the CompilerInvocation 🫢
  • --aarch64-neon-syntax=<value> β€” pick which style of NEON code to emit from the AArch64 backend:
    • =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. Like, she will literally give up. 😭
  • --addrsig β€” emit an address-significance table
  • --allow-ginsert-as-artifact β€” allow G_INSERT to be considered an artifact. It's a hack around AMDGPU test infinite loops, iykyk. πŸ™ˆ
  • --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 for 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 β€” (no description, she's 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 β€” (no description, just vibes ✨)
  • --cfg-hide-unreachable-paths β€” (no description either, she's keeping it lowkey)
  • --code-model=<value> β€” choose your code model:
    • =tiny β€” tiny code model
    • =small β€” small code model
    • =kernel β€” kernel code model
    • =medium β€” medium code model
    • =large β€” large code model
  • --cost-kind=<value> β€” the target cost kind:
    • =throughput β€” reciprocal throughput
    • =latency β€” instruction latency
    • =code-size β€” code size
    • =size-latency β€” code size and latency
  • --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
    • =dbx β€” dbx
    • =sce β€” SCE targets (e.g. PS4)
  • --debugify-level=<value> β€” the 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, but 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-i2p-p2i-opt β€” disables the 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 the 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 β€” (no description, she said nothing and left πŸ«₯)
  • --enable-gvn-sink β€” enable the GVN sinking pass (default = off)
  • --enable-load-in-loop-pre β€” (no description)
  • --enable-load-pre β€” (no description)
  • --enable-loop-simplifycfg-term-folding β€” (no description)
  • --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)
  • --enable-unsafe-fp-math β€” enable optimizations that may decrease FP precision. Be careful bestie. 😭
  • --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 πŸ§ͺ
  • --fatal-warnings β€” treat warnings as errors πŸ’€
  • --filetype=<value> β€” choose a file type (not all types are supported by all targets):

and that's where part 1 stops, bestie β€” she's still going… πŸ¦‹

okay so these next three are still values for that option from up top, not new flags, don't @ me:

  • =asm β€” emits an assembly '.s' file ✨
  • =obj β€” emits a native object '.o' file πŸ’…
  • =null β€” emits literally nothing, it's purely for performance testing πŸ«₯

  • --filter=<string> β€” only processes files that match this filter. heads up bestie, this flag only applies to all-TUs. all-TUs and nothing else.
  • --float-abi=<value> β€” picks the float ABI type 🧚
    • =default β€” whatever the target's default float ABI type is
    • =soft β€” soft float ABI (this is what -soft-float implies)
    • =hard β€” hard float ABI (it uses FP registers, fancy)
  • --force-dwarf-frame-section β€” always emit a debug frame section. no skipping. always.
  • --force-opaque-pointers β€” forces all pointers to be opaque pointers πŸ‘‘
  • --fp-contract=<value> β€” turns on aggressive formation of fused FP ops πŸ”₯
    • =fast β€” fuse FP ops whenever it's profitable
    • =on β€” only fuse the 'blessed' FP ops
    • =off β€” only fuse FP ops when the result won't be affected
  • --frame-pointer=<value> β€” specifies the frame pointer elimination optimization
    • =all β€” disables frame pointer elimination entirely
    • =non-leaf β€” disables frame pointer elimination for non-leaf frames
    • =none β€” enables frame pointer elimination
  • --function-sections β€” emits functions into separate sections
  • --gpsize=<uint> β€” Global Pointer Addressing Size. the default size is 8, that's the whole tea β˜•
  • --hash-based-counter-split β€” renames the counter variable of a comdat function based on cfg hash
  • --hot-cold-split β€” enables the hot-cold splitting pass
  • --ignore-xcoff-visibility β€” doesn't emit the visibility attribute for asm in AIX OS, or gives all symbols 'unspecified' visibility in an XCOFF object file
  • --import-all-index β€” imports all external functions in index.
  • --incremental-linker-compatible β€” when you use it with filetype=obj, it 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 when looking for another guard
  • --instcombine-max-iterations=<uint> β€” caps the maximum number of instruction combining iterations
  • --instcombine-max-num-phis=<uint> β€” maximum number of 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> β€” the maximal lookup depth when trying to check viability of negation sinking.
  • --instrprof-atomic-counter-update-all β€” makes all profile counter updates atomic (for testing only, don't ship this fr fr)
  • --internalize-public-api-file=<filename> β€” a file containing a list of symbol names to preserve
  • --internalize-public-api-list=<list> β€” a list of symbol names to preserve
  • --iterative-counter-promotion β€” allows counter promotion across the whole loop nest.
  • --lto-embed-bitcode=<value> β€” embeds LLVM bitcode in object files produced by LTO πŸ’Ž
    • =none β€” do not embed
    • =optimized β€” embed after all the 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
  • --march=<string> β€” the 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 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
  • --mcpu=<cpu-name> β€” target a specific cpu type (-mcpu=help for details)
  • --meabi=<value> β€” sets the EABI type (the default depends on triple):
    • =default β€” triple default EABI version
    • =4 β€” EABI version 4
    • =5 β€” EABI version 5
    • =gnu β€” EABI GNU
  • --merror-missing-parenthesis β€” errors on missing parenthesis around predicate registers
  • --merror-noncontigious-register β€” errors on register names that aren't contigious
  • --mhvx β€” enables Hexagon Vector eXtensions
  • --mhvx=<value> β€” enables 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
  • --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 β€” enables mips16 constant islands.
  • --mips16-hard-float β€” enables mips16 hard float.
  • --mir-strip-debugify-only β€” should mir-strip-debug only strip debug info from debugified modules by default? πŸ›
  • --mno-compound β€” disables looking for compound instructions for Hexagon
  • --mno-fixup β€” disables fixing up resolved relocations for Hexagon
  • --mno-ldc1-sdc1 β€” expands double precision loads and stores into their single precision counterparts
  • --mno-pairing β€” disables looking for duplex instructions for Hexagon
  • --mwarn-missing-parenthesis β€” warns for missing parenthesis around predicate registers
  • --mwarn-noncontigious-register β€” warns for register names that arent contigious
  • --mwarn-sign-mismatch β€” warns for mismatching a signed and unsigned value
  • --no-deprecated-warn β€” suppresses all deprecated warnings
  • --no-discriminators β€” disables generation of discriminator information.
  • --no-type-check β€” suppresses type errors (Wasm)
  • --no-warn β€” suppresses all warnings
  • --no-xray-index β€” doesn't emit the xray_fn_idx section
  • --nozero-initialized-in-bss β€” doesn't place zero-initialized symbols into the bss section
  • --nvptx-sched4reg β€” NVPTX specific: schedule for register pressue
  • --poison-checking-function-local β€” checks that returns are non-poison (for testing)
  • --pseudo-probe-for-profiling β€” emits pseudo probes for AutoFDO
  • --r600-ir-structurize β€” uses the StructurizeCFG IR pass
  • --rdf-dump β€” (no description given, it's giving mystery πŸ•΅οΈ)
  • --rdf-limit=<uint> β€” (also no description, iconic and silent)
  • --relax-elf-relocations β€” emits GOTPCRELX/REX_GOTPCRELX instead of GOTPCREL on x86-64 ELF
  • --relocation-model=<value> β€” chooses the relocation model πŸŽ€
    • =static β€” non-relocatable code
    • =pic β€” fully relocatable, position independent code
    • =dynamic-no-pic β€” relocatable external references, non-relocatable code
    • =ropi β€” code and read-only data relocatable, accessed PC-relative
    • =rwpi β€” read-write data relocatable, accessed relative to static base
    • =ropi-rwpi β€” a combination of ropi and rwpi
  • --runtime-counter-relocation β€” enables relocating counters at runtime.
  • --safepoint-ir-verifier-print-only β€” (no description, just vibes)
  • --sample-profile-check-record-coverage=<N> β€” emits a warning if less than N% of records in the input profile are matched to the IR.
  • --sample-profile-check-sample-coverage=<N> β€” bestie it will warn you if fewer than N% of the samples in your input profile actually got matched up to the IR. like it's checking if the vibes align πŸ’…
  • --sample-profile-max-propagate-iterations=<uint> β€” the max number of iterations it's willing to go through while propagating sample block/edge weights through the CFG. it will not loop forever, she has boundaries 🫢
  • --skip-ret-exit-block β€” suppresses counter promotion if the exit blocks contain ret. no promotion if there's a return chilling in there, periodt.
  • --speculative-counter-promotion-max-exiting=<uint> β€” the max number of exiting blocks of a loop that are allowed for speculative counter promotion. she has a cap ok ✨
  • --speculative-counter-promotion-to-loop β€” 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. it's giving "only if you can escape the loop, queen" πŸŒ€
  • --split-machine-functions β€” split out the cold basic blocks from machine functions, based on profile info. bye cold blocks, you're on your own πŸ₯Ά
  • --stack-size-section β€” emit a section that contains stack size metadata. metadata slay πŸ’–
  • --stack-symbol-ordering β€” order local stack symbols. keep it cute, keep it ordered 🌸
  • --stackrealign β€” force-align the stack to the minimum alignment. she is aligned and she is thriving ✨
  • --strict-dwarf β€” use strict dwarf. no notes, just strict dwarf 🧚
  • --summary-file=<string> β€” the summary file to use for function importing. give her the file, she'll handle the importing πŸ’…
  • --tail-predication=<value> β€” MVE tail-predication pass options. the choices are:
    • =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 the ABI. she's changing the ABI, lowkey a big deal πŸ‘‘
  • --thinlto-assume-merged β€” assume the input has already undergone ThinLTO function importing and the other pre-optimization pipeline changes. just trust her, ok? πŸ™ˆ
  • --thread-model=<value> β€” choose threading model:
    • =posix β€” POSIX thread model
    • =single β€” Single thread model
  • --threads=<int> β€” no description given in the original, and honestly? mysterious queen behavior πŸ’€ she said nothing and left
  • --tls-size=<uint> β€” bit size of immediate TLS offsets. tiny but mighty πŸŽ€
  • --unique-basic-block-section-names β€” give unique names to every basic block section. no duplicates allowed, we're all individuals here 🌈
  • --unique-section-names β€” give unique names to every section. same energy, different scope πŸ’…
  • --use-ctors β€” use .ctors instead of .init_array. old-school choice, respect it 🫢
  • --vec-extabi β€” enable the AIX Extended Altivec ABI. AIX girlies rise up πŸ”₯
  • --verify-region-info β€” verify region info. and yes, it's time consuming β€” she warned you, don't be shocked ⏳
  • --vp-counters-per-site=<number> β€” the average number of profile counters allocated per value profiling site. averages, bestie ✨
  • --vp-static-alloc β€” do static counter allocation for value profiler. static > everything rn πŸ’–
  • --x86-align-branch=<string> β€” specify 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> β€” control 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 to prevent them from being across or against the boundary of the specified size. and heads up: the default value 0 does not align branches 🫣
  • --x86-branches-within-32B-boundaries β€” align selected instructions to mitigate the negative performance impact of Intel's micro code update for errata skx102.
careful bestie β€” this may break assumptions about labels corresponding to particular instructions, and should be used with caution. ⚠️
  • --x86-pad-max-prefix-size=<uint> β€” maximum number of prefixes to use for padding. pad responsibly πŸ’…
  • --xcoff-traceback-table β€” emit the XCOFF traceback table. table? emitted. iconic πŸ“‹

🌸 Generic Options 🌸

  • --help β€” display available options (--help-hidden for more). she's helpful like that 🫢
  • --help-list β€” display the list of available options (--help-list-hidden for more). a list! of options! πŸ’–
  • --version β€” display the version of this program. know your version, queen πŸ‘‘

🌈 Polly Options: Configure the polly loop optimizer 🌈

  • --polly β€” enable the polly optimizer (with -O1, -O2 or -O3). polly said let me in πŸ”₯
  • --polly-2nd-level-tiling β€” enable a 2nd level loop of loop tiling. tiling but make it layered ✨
  • --polly-ast-print-accesses β€” print memory access functions. show me the accesses πŸ“
  • --polly-context=<isl parameter set> β€” provide additional constraints on the context parameters. boundaries, but make them isl πŸ’…
  • --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. β€” yes, the parenthesis in the original is left open, we are simply reporting it, no cap πŸ™ˆ
  • --polly-delicm-max-ops=<int> β€” maximum number of isl operations to invest for lifetime analysis; 0 = no limit. invest in yourself bestie πŸ’–
  • --polly-detect-full-functions β€” allow the detection of full functions. full send 🌸
  • --polly-dump-after β€” dump module after Polly transformations into a file suffixed with "-after". after pic incoming πŸ“Έ
  • --polly-dump-after-file=<string> β€” dump module after Polly transformations to the given file. same but you pick the name πŸ’…
  • --polly-dump-before β€” dump module before Polly transformations into a file suffixed with "-before". the before pic πŸ“Έ
  • --polly-dump-before-file=<string> β€” dump module before Polly transformations to the given file. before pic, your filename, your rules ✨
  • --polly-enable-simplify β€” simplify SCoP after optimizations. clean it up after the glow-up 🧚
  • --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. not you, not you, definitely not you πŸ™…
  • --polly-isl-arg=<argument> β€” option passed to ISL. hand-delivered πŸŽ€
  • --polly-on-isl-error-abort β€” abort if an isl error is encountered. isl error? we're OUT πŸ’€
  • --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. yes you, and you, come through πŸ‘‘
  • --polly-only-region=<identifier> β€” only run on certain regions (the provided identifier must appear in the name of the region's entry block. β€” again, original parenthesis left open, we report it faithfully 🫢
  • --polly-only-scop-detection β€” only run scop detection, but no other optimizations. detection only, no glow-up, we're just looking πŸ‘€
  • --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. a whole mouthful and we're saying it with our chest πŸ’…
  • --polly-parallel β€” generate thread parallel code (isl codegen only). threads, parallel, iconic 🌈
  • --polly-parallel-force β€” force generation of thread parallel code ignoring any cost model. cost model said no, we said yes anyway πŸ”₯
  • --polly-pattern-matching-based-opts β€” perform optimizations based on pattern matching. match the pattern, serve the look ✨
  • --polly-pragma-based-opts β€” apply user-directed transformation from metadata. user-directed, as in you directed it, bestie 🫡
  • --polly-process-unprofitable β€” process scops that are unlikely to benefit from Polly optimizations. giving unprofitable scops a chance anyway, we love an underdog 😭
  • --polly-register-tiling β€” enable register tiling. tiles for the registers specifically πŸ’–
  • --polly-report β€” print information about the activities of Polly. what has polly been up to? let's find out πŸ“’
  • --polly-show β€” highlight the code regions that will be optimized in a (CFG BBs and LLVM-IR instructions). β€” parenthesis as-is, she's dramatic like that πŸ’…
  • --polly-show-only β€” highlight the code regions that will be optimized in a (CFG only BBs). β€” same energy, CFG only πŸŽ€
  • --polly-stmt-granularity=<value> β€” algorithm to use for splitting basic blocks into multiple statements:
    • =bb β€” One statement per basic block
    • =scalar-indep β€” Scalar independence heuristic
    • =store β€” Store-level granularity
  • --polly-target=<value> β€” the hardware to target:
    • =cpu β€” generate CPU code
  • --polly-tiling β€” enable loop tiling. tiles! ✨
  • --polly-vectorizer=<value> β€” select the vectorization strategy:
    • =none β€” No Vectorization
  • =polly β€” the Polly internal vectorizer, doing its lil optimization dance ✨
  • =stripmine β€” strip-mines the outer loops so the loop-vectorizer actually gets a chance to trigger πŸ”₯ like it's clearing the runway so the plane can take off, iykyk

and that's the whole vibe, bestie β€” every flag, every pass, all of it πŸ’…

this page is from clang-repl 13, dated July 2023 β€” go forth and REPL responsibly πŸ«ΆπŸ’–

πŸ“¦ where this page comes from