Use when explaining System V AMD64, ARM AAPCS, RISC-V psABI, stack frames, variadic calls, or FFI register rules. Not for the Rust FFI binding layer: use rust-ffi.
The English summary is being prepared. Showing the original description.
Use when working with LLVM IR as a user: emitting IR from clang, running opt passes, lowering with llc, reading IR, or finding a missed optimization. Not for writing new passes: use llvm-passes.
The English summary is being prepared. Showing the original description.
Run score Not tested
See how to installReview the instructions the agent will receive before you install.
| Field | Bound contract |
|---|---|
| Trigger | The user wants to see the IR for a function, run or inspect optimization passes with opt, lower IR to assembly with llc, read an IR construct, or find out why a transform did not fire. |
| Authority | Read-only. Commands write .ll, .bc, .s, and .o files only into a scratch location the user names; the project tree is not modified. Rollback is deleting the scratch outputs. No remote mutation. |
| Side effect | Scratch IR and object files; chat output. |
| Done | The requested IR, pass output, or lowering exists in the scratch location, and each construct or remark the user asked about has a one-line reading. |
opt --version. Current stable is LLVM 23.1.0; pass names below are new-pass-manager names and apply to any line since 14..ll/.bc file: required.Emit IR. Textual: clang -O0 -emit-llvm -S src.c -o src.ll. Bitcode: clang -O2 -emit-llvm -c src.c -o src.bc. Convert: llvm-dis src.bc -o src.ll, llvm-as src.ll -o src.bc. Emit at -O0 when the goal is to read the front end's output, at -O2 when the goal is to read what the optimizer produced. Done when: the .ll file exists.
Run passes with opt. Named passes: opt -passes='mem2reg,instcombine,simplifycfg' src.ll -S -o out.ll. Standard pipelines: opt -passes='default<O2>' src.ll -S -o out.ll. List available passes: opt --print-passes. Show the full pipeline clang builds: clang -O2 -mllvm -print-pipeline-passes -c src.c -o /dev/null. Dump IR after every pass: opt -passes='default<O2>' -print-after-all src.ll -S 2>&1, which is verbose; redirect it to a file. Done when: the transformed IR exists and the pass list is stated.
Lower with llc. Object: llc -filetype=obj src.ll -o src.o. Assembly: llc -filetype=asm src.ll -o src.s; Intel syntax on x86 is --x86-asm-syntax=intel. CPU and features: llc -mcpu=skylake -mattr=+avx2 src.ll -o src.s. Registered targets: llc --version. Done when: the assembly or object exists.
Read the IR using the construct table; expand any construct the user names from the reference. Done when: each construct in the question has a reading.
| Construct | Meaning |
|---|---|
alloca | Stack slot; mem2reg promotes it to SSA values |
load, store | Memory access through an opaque ptr |
getelementptr | Address arithmetic for fields and elements |
phi | SSA merge of values from predecessor blocks |
call, invoke | Call; invoke carries exception edges |
icmp, fcmp | Integer and float comparison |
br, switch, ret | Control flow and return |
trunc, zext, sext, bitcast | Width and representation changes |
ptrtoint, inttoptr | Pointer and integer conversion; avoid where possible |
Name the pass that owns a transform from the table when the user asks why something did or did not happen. Done when: the pass is named.
| Pass | Effect |
|---|---|
mem2reg, sroa | Promote allocas and split aggregates into SSA values |
instcombine | Peephole instruction combining |
simplifycfg | Control-flow cleanup, dead-block removal |
gvn, early-cse | Redundancy elimination |
licm | Loop-invariant code motion |
loop-unroll | Loop unrolling |
loop-vectorize, slp-vectorize | Loop and straight-line vectorization |
inline | Function inlining |
argpromotion | Pointer arguments to values |
tailcallelim, reassociate, dce | Tail calls, reassociation, dead code |
Diagnose a missed transform from source with remarks: clang -O2 -Rpass-missed=loop-vectorize -Rpass-analysis=loop-vectorize src.c. When the answer needs IR before and after one pass, use opt -passes='<pass>' -print-before=<pass> -print-after=<pass> on the .ll file. Done when: the analysis remark or the IR diff names the blocker.
Point to the companion tools by task: llvm-link joins bitcode files, llvm-lto runs standalone LTO, llvm-nm and llvm-objdump inspect objects, llvm-profdata merges profiles, llvm-cov reports coverage, llvm-mca estimates throughput and latency of an assembly block. GNU equivalents: use binutils. Done when: the tool for the follow-up task is named.
| Failure class | Behavior |
|---|---|
Pass name unknown to opt | Run opt --print-passes and pick the matching name; legacy -passname spellings are not accepted by the new pass manager. |
llc rejects a flag | Run llc --help-hidden for the target-specific spelling; -masm-syntax=intel is not a flag, --x86-asm-syntax=intel is. |
| Front-end question rather than IR question | Lexer, parser, and IR generation from an AST: use compiler-frontend. |
| Runtime code generation | ORC JIT and in-memory execution: use jit-compilation. |
| New pass wanted | Writing and testing a PassPlugin: use llvm-passes. |
The scratch files produced (.ll, .bc, .s, .o) with the exact commands that made them, plus a chat reading of each construct, pass, or remark the user asked about.
No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
Use when explaining System V AMD64, ARM AAPCS, RISC-V psABI, stack frames, variadic calls, or FFI register rules. Not for the Rust FFI binding layer: use rust-ffi.
The English summary is being prepared. Showing the original description.
Use when configuring ADC sampling time, DMA-driven ADC, calibration, or DAC channel setup on bare-metal MCUs. Not for the DMA stream itself: use dma-baremetal.
The English summary is being prepared. Showing the original description.
Use when creating AF_XDP sockets, configuring UMEM and XSK rings, writing an XDP redirect program, or choosing copy versus zero-copy mode. Not for full kernel bypass: use dpdk.
The English summary is being prepared. Showing the original description.
Use when a completed session needs an agent-environment retrospective. Not for an engineering retrospective from telemetry: use engineering-retrospective.
The English summary is being prepared. Showing the original description.
Use when a redacted, trimmed agent transcript must be appended to a GitHub PR or issue body, with human approval and preview. Not for automated or model-initiated insertion.
The English summary is being prepared. Showing the original description.
Use when a repo needs agent setup, AGENTS.md added or made lean, CLAUDE.md audited, or agent instructions scored or pruned. Not for remote, credential, publish, deploy, or irreversible changes.
The English summary is being prepared. Showing the original description.