• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2026-04-08 20:44 Aet 隐藏边栏 |   抢沙发  1 
文章评分 1 次,平均分 5.0

pass

概述

  1. 一个 Pass 就是对 IR 做一次完整的遍历和处理
  2. 每个 Pass 专注于做一件事——分析代码的某个属性,或者对代码做某一种变换
  3. 每个 Pass 读取当前的 LLVM IR,做一种特定的处理,输出修改后的 IR
    1. 下一个 Pass 在上一个 Pass 的输出基础上继续处理

两大类型

  1. 分析 PassAnalysis Pass

  1. 变换 PassTransform Pass

作用范围

  1. Pass 按照它处理的 IR 粒度分为不同级别:
    1. 对应四种 Pass 粒度:
    2. Module Pass
    3. Function Pass
    4. Loop Pass
    5. BasicBlock Pass / Instruction Pass

Module Pass

Function Pass

Loop Pass

BasicBlock Pass / Instruction Pass

Pass 在代码中

  1. 一个 LLVM Pass 就是一个 C++ 类,实现一个 run 方法:

PreservedAnalyses——Pass 之间的协调

Pass 之间的依赖关系

重要 Pass

结合代码

示例

mem2reg

  1. 消除冗余的栈操作,构造 SSA

inline

  1. 函数内联

instcombine

  1. 指令组合/常量折叠

运行单个 Pass

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享