本文へ移動
cccskills
無料GitHub で公開

llvm

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.

インストール方法を見る

含まれるファイル(3)

  • SKILL.md5.4 KB
  • agents/openai.yaml207 B
  • references/ir-reference.md2.3 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

LLVM IR and tooling

Contract

FieldBound contract
TriggerThe 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.
AuthorityRead-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 effectScratch IR and object files; chat output.
DoneThe 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.

Inputs

  • LLVM version: required, from opt --version. Current stable is LLVM 23.1.0; pass names below are new-pass-manager names and apply to any line since 14.
  • Source file or existing .ll/.bc file: required.
  • Target CPU and features when lowering: optional; defaults to the host.
  • The question: required. One of emit, transform, lower, read, or diagnose.

Procedure

  1. 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.

  2. 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.

  3. 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.

  4. 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.

    ConstructMeaning
    allocaStack slot; mem2reg promotes it to SSA values
    load, storeMemory access through an opaque ptr
    getelementptrAddress arithmetic for fields and elements
    phiSSA merge of values from predecessor blocks
    call, invokeCall; invoke carries exception edges
    icmp, fcmpInteger and float comparison
    br, switch, retControl flow and return
    trunc, zext, sext, bitcastWidth and representation changes
    ptrtoint, inttoptrPointer and integer conversion; avoid where possible
  5. 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.

    PassEffect
    mem2reg, sroaPromote allocas and split aggregates into SSA values
    instcombinePeephole instruction combining
    simplifycfgControl-flow cleanup, dead-block removal
    gvn, early-cseRedundancy elimination
    licmLoop-invariant code motion
    loop-unrollLoop unrolling
    loop-vectorize, slp-vectorizeLoop and straight-line vectorization
    inlineFunction inlining
    argpromotionPointer arguments to values
    tailcallelim, reassociate, dceTail calls, reassociation, dead code
  6. 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.

  7. 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 and recovery

Failure classBehavior
Pass name unknown to optRun opt --print-passes and pick the matching name; legacy -passname spellings are not accepted by the new pass manager.
llc rejects a flagRun 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 questionLexer, parser, and IR generation from an AST: use compiler-frontend.
Runtime code generationORC JIT and in-memory execution: use jit-compilation.
New pass wantedWriting and testing a PassPlugin: use llvm-passes.

Output

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.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

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.

日本語の概要は準備中です。原文の説明を表示しています。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

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.

日本語の概要は準備中です。原文の説明を表示しています。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

af-xdp

無料

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.

日本語の概要は準備中です。原文の説明を表示しています。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

Use when a completed session needs an agent-environment retrospective. Not for an engineering retrospective from telemetry: use engineering-retrospective.

日本語の概要は準備中です。原文の説明を表示しています。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

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.

日本語の概要は準備中です。原文の説明を表示しています。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

agents-md

無料

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.

日本語の概要は準備中です。原文の説明を表示しています。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

OutlineDriven のスキルをすべて見る

このスキルの問題を報告する