Llvm

mohitmishra786/low-level-dev-skills/skills/compilers/llvm

作者 mohitmishra786bdc58472fa9f无许可证253 个星标收录于 2026年10月9日更新于 2026年10月9日仓库3个月前更新

LLVM IR and pass pipeline skill. Use when working directly with LLVM Intermediate Representation (IR), running opt passes, generating IR with llc, inspecting or writing LLVM IR for custom passes, or understanding how the LLVM backend lowers IR to assembly. Activates on queries about LLVM IR, opt, llc, llvm-dis, LLVM passes, IR transformations, or building LLVM-based tools.

AI 生成的概览

指导代理使用 LLVM 工具生成、检查、优化和降级 LLVM IR。

功能
该技能说明如何以使用者身份操作 LLVM 中间表示:用 clang 生成文本 IR 或位码,用 opt 运行优化 pass,用 llc 将 IR 降级为汇编或目标文件,并解读常见 IR 结构。它还介绍如何诊断未发生的优化,并列出 llvm-dis、llvm-as、llvm-link、llvm-mca 等常用工具。产出的是命令指导与参考说明,而非文件或代码。
适用场景
当你需要生成或阅读 LLVM IR、运行或调试 opt pass 流水线、用 llc 降级 IR,或想弄清自动向量化等优化为何没有发生时使用。它面向 LLVM 工具的使用,而非编写新的 LLVM pass。
运行要求
需要环境中具备 LLVM 工具链(clang、opt、llc 及相关 llvm-* 工具)。仅为说明文档,不附带脚本。

LLVM IR and Tooling

Purpose

Guide agents through LLVM as a user: generating and inspecting IR, running existing optimisation passes with opt, lowering to assembly with llc, and diagnosing missed optimisations. For writing new LLVM passes (PassPlugin, llvm-lit testing), use skills/compiler-internals/llvm-passes instead.

Triggers

  • "Show me the LLVM IR for this function"
  • "How do I run an LLVM optimisation pass?"
  • "What does this LLVM IR instruction mean?"
  • "How do I write a custom LLVM pass?"
  • "Why isn't auto-vectorisation happening in LLVM?"

Workflow

1. Generate LLVM IR

bash
# Emit textual IR (.ll)clang -O0 -emit-llvm -S src.c -o src.ll
# Emit bitcode (.bc)clang -O2 -emit-llvm -c src.c -o src.bc
# Disassemble bitcode to textllvm-dis src.bc -o src.ll

2. Run optimisation passes with opt

bash
# Apply a specific passopt -passes='mem2reg,instcombine,simplifycfg' src.ll -S -o out.ll
# Standard optimisation pipelinesopt -passes='default<O2>' src.ll -S -o out.llopt -passes='default<O3>' src.ll -S -o out.ll
# List available passesopt --print-passes 2>&1 | less
# Print IR before and after a passopt -passes='instcombine' --print-before=instcombine --print-after=instcombine src.ll -S -o out.ll 2>&1 | less

3. Lower IR to assembly with llc

bash
# Compile IR to object filellc -filetype=obj src.ll -o src.o
# Compile to assemblyllc -filetype=asm -masm-syntax=intel src.ll -o src.s
# Target a specific CPUllc -mcpu=skylake -mattr=+avx2 src.ll -o src.s
# Show available targetsllc --version

4. Inspect IR

Key IR constructs to understand:

ConstructMeaning
allocaStack allocation (pre-SSA; mem2reg promotes to registers)
load/storeMemory access
getelementptr (GEP)Pointer arithmetic / field access
phiSSA φ-node: merges values from predecessor blocks
call/invokeFunction call (invoke has exception edges)
icmp/fcmpInteger/float comparison
brBranch (conditional or unconditional)
retReturn
bitcastReinterpret bits (no-op in codegen)
ptrtoint/inttoptrPointer↔integer (avoid where possible)

5. Key passes

PassEffect
mem2regPromote alloca to SSA registers
instcombineInstruction combining / peephole
simplifycfgCFG cleanup, dead block removal
loop-vectorizeAuto-vectorisation
slp-vectorizeSuperword-level parallelism (straight-line vectorisation)
inlineFunction inlining
gvnGlobal value numbering (common subexpression elimination)
licmLoop-invariant code motion
loop-unrollLoop unrolling
argpromotionPromote pointer args to values
sroaScalar Replacement of Aggregates

6. Debugging missed optimisations

bash
# Why was a loop not vectorised?clang -O2 -Rpass-missed=loop-vectorize -Rpass-analysis=loop-vectorize src.c
# Dump pass pipelineclang -O2 -mllvm -debug-pass=Structure src.c -o /dev/null 2>&1 | less
# Print IR after each pass (very verbose)opt -passes='default<O2>' -print-after-all src.ll -S 2>&1 | less

7. Useful llvm tools

ToolPurpose
llvm-disBitcode → textual IR
llvm-asTextual IR → bitcode
llvm-linkLink multiple bitcode files
llvm-ltoStandalone LTO
llvm-nmSymbols in bitcode/object
llvm-objdumpDisassemble objects
llvm-profdataMerge/show PGO profiles
llvm-covCoverage reporting
llvm-mcaMachine code analyser (throughput/latency)

For binutils equivalents, see skills/binaries/binutils.

Related skills

  • Use skills/compiler-internals/llvm-passes for writing and testing custom LLVM passes
  • Use skills/compiler-internals/compiler-frontend for generating LLVM IR from an AST
  • Use skills/compiler-internals/jit-compilation for ORC JIT execution of LLVM IR
  • Use skills/compilers/clang for source-level Clang flags
  • Use skills/binaries/linkers-lto for LTO at link time
  • Use skills/profilers/linux-perf combined with llvm-mca for micro-architectural analysis

来源与署名

来源:mohitmishra786/low-level-dev-skills位于skills/compilers/llvm提交bdc5847

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架