mcpField
L
llvm-ir-and-passes

llvm-ir-and-passes

github.com/mohitmishra786开发269303 次安装18 周前更新
代码仓库

关于 llvm-ir-and-passes

这项技能帮助 Agent 阅读和分析 LLVM IR 及其优化流程,涵盖 SSA 概念和使用 LLVM 工具检查转换,并补充工具链与编写 Pass 的资料。

主要功能

  1. 01LLVM IR 与 SSA 概念
  2. 02使用 Clang 生成 IR
  3. 03标准优化流程
  4. 04检查分析 Pass
  5. 05比较优化前后的 IR

适用场景

  1. 01理解 -O2 产生的变化
  2. 02调查不同 Clang 版本间的错误编译
  3. 03学习 SSA 与支配关系
  4. 04为编写自定义 Pass 做准备

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill llvm-ir-and-passes

安装后在 Claude Code 中输入/llvm-ir-and-passes确认已加载。

详细介绍

LLVM IR 与 Pass

目的

教会 Agent 阅读和分析 LLVM IR(SSA、类型、终结指令),了解标准 Pass 流程,并使用 opt/llvm-dis 进行检查。与 skills/compilers/llvm(工具链)和 skills/compiler-internals/llvm-passes(编写插件)互为补充,不合并。

使用场景

  • 了解 -O2 对生成的 IR 做了哪些修改
  • 排查不同 Clang 版本间的错误编译
  • 准备编写自定义 Pass
  • 在尚未编写 C++ Pass 的情况下讲解 SSA 和支配关系

工作流

1. LLVM IR 结构
; Function in SSA form
define i32 @add(i32 %a, i32 %b) {
entry:
  %sum = add i32 %a, %b
  ret i32 %sum
}

关键概念:基本块、合并处的 PHI 节点、带类型的值(i32、ptr、向量)。

2. 从 Clang 生成 IR
clang -S -emit-llvm -O0 -o foo.ll foo.c
clang -c -emit-llvm -O2 -o foo.bc foo.c
llvm-dis foo.bc -o foo.ll
3. 标准优化流程(New PM)

Clang -O2 大致会运行:

SimplifyCFG → InstCombine → GVN → LICM → LoopVectorize → ...

使用以下命令检查:

opt -passes='default<O2>' -S foo.ll -o foo-opt.ll
opt -passes='default<O2>' -print-passes foo.ll 2>&1 | head
4. 实用的分析 Pass
Pass显示内容
-passes=print<domtree>支配树
-passes=print<loops>循环嵌套
-passes=print-alias-sets别名集合
opt -passes='print<domtree>' -disable-output foo.ll
5. 阅读 PHI 和 UB
merge:
  %v = phi i32 [ %a, %then ], [ %b, %else ]

IR 中的 undef 和 poison 用于建模 LLVM poison 语义——它们与 C UB 不同,但相关。

6. 比较前后结果
opt -passes='instcombine,simplifycfg' -S foo.ll -o - | diff -u foo.ll -
7. Agent 用法
/llvm-ir-and-passes Explain this PHI node and which pass likely created it

常见问题

症状原因修复方法
找不到 PassLLVM 版本更名对你的构建运行 opt --print-passes
IR 不匹配LLVM 主版本不同使用版本匹配的 clang/opt
"optnone" 阻止优化-O0 属性使用 -O1+ 编译
IR 过大内联头文件关闭 -fno-discard-value-names;筛选函数
流程错误Legacy 与 NPM 不同使用 -passes= 语法

相关技能

  • skills/compilers/llvm — 工具链概览
  • skills/compiler-internals/llvm-passes — 编写 PassPlugin
  • skills/compiler-internals/compiler-optimizations-deep — RA 和 ISel
  • skills/compiler-internals/compiler-frontend — IR 生成
  • skills/rust/rustc-basics — rustc --emit=llvm-ir

评论

支持 Markdown