LLVM 中端(Middle-End) 主要负责 IR 级优化和分析,核心组件包括 优化变换(Transforms)、分析框架(Analysis)、Pass 管理器(Pass Manager) 等。它以 LLVM IR(Static Single Assignment 形式)为基础,通过 标量优化、循环优化、向量化、跨过程优化 等技术提升代码质量。中端优化主要位于 lib/Transforms/lib/Analysis/ 目录,包含诸如 常量传播、死代码删除、循环展开、别名分析、控制流优化 等 Pass。LLVM 采用 Pass 管理器 组织和调度优化流水线,实现模块化和可扩展性,使其适用于不同架构的编译优化需求。
首先我会从最常用也是我自己最先接触的 Pass 开始。

Transforms

Scalar

LLVM lib/Transforms/Scalar/ 目录包含 标量优化(Scalar Transformations) 相关的 Pass,这些优化主要作用于单个基本块或函数级别的 IR,提高执行效率并减少冗余代码。

死代码与冗余消除

  • ADCE.cpp(Aggressive Dead Code Elimination)
  • BDCE.cpp(Bit-Tracking Dead Code Elimination)
  • DCE.cppDead Code Elimination
  • DeadStoreElimination.cpp(删除未使用的存储)
  • EarlyCSE.cpp(早期公共子表达式消除)
  • GVN.cpp全局值编号优化以优化冗余计算)
  • GVNHoist.cpp(GVN 提升优化)
  • GVNSink.cpp(GVN 下沉优化)
  • MemCpyOptimizer.cpp(优化 memcpy/memmove
  • SCCP.cpp(稀疏条件常量传播)(Sparse Conditional Constant Propagation
  • NewGVN.cpp(新的 GVN 算法)

循环优化

这些 Pass 主要用于 循环优化,包括 循环展开、分裂、消除不必要计算:

  • LICM.cpp循环不变代码外提
  • IndVarSimplify.cpp(循环归纳变量优化)
  • LoopAccessAnalysisPrinter.cpp(循环访问分析打印)
  • LoopBoundSplit.cpp(循环边界拆分)
  • LoopDataPrefetch.cpp(循环数据预取)
  • LoopDeletion.cpp(删除无用循环)
  • LoopDistribute.cpp(循环分解)
  • LoopFlatten.cpp(循环扁平化)
  • LoopFuse.cpp(循环合并)
  • LoopIdiomRecognize.cpp(循环惯用优化识别)
  • LoopInstSimplify.cpp(循环指令简化)
  • LoopInterchange.cpp(循环置换优化)
  • LoopLoadElimination.cpp(消除不必要的循环加载)
  • `LoopPassManager.cpp`(循环 Pass 管理器)
  • LoopPredication.cpp(循环谓词优化)
  • LoopRotation.cpp(循环旋转优化)
  • LoopSimplifyCFG.cpp(循环 CFG 简化)
  • LoopSink.cpp(循环代码下沉)
  • LoopStrengthReduce.cpp(循环强度削弱)
  • LoopTermFold.cpp(循环终止折叠)
  • LoopUnrollPass.cpp循环展开
  • LoopUnrollAndJamPass.cpp(循环展开并融合)
  • LoopVersioningLICM.cpp(循环版本化 + LICM)

控制流优化

这些 Pass 主要用于 优化控制流(CFG),减少不必要的跳转:

  • FlattenCFGPass.cpp(扁平化控制流图)
  • JumpTableToSwitch.cpp(将跳转表转换为 switch 语句)
  • JumpThreading.cpp(跳转优化,减少不必要分支)
  • SimplifyCFGPass.cpp简化控制流图
  • StructurizeCFG.cpp(控制流结构化优化)
  • TailRecursionElimination.cpp(尾递归消除)

代码转换 & 标量替换

这些 Pass 主要用于 变量提升、指令替换、标量化:

  • Mem2Reg.cpp(内存变量提升到寄存器)
  • Reg2Mem.cpp(寄存器变量转换回内存)
  • SROA.cpp(结构化对象分析)(Scalar Replacement of Aggregates
    • 将结构体、数组等“聚合类型”的栈内分配变量,拆成多个独立的标量变量,以便进一步优化
  • Scalarizer.cpp(标量化)
  • ScalarizeMaskedMemIntrin.cpp(标量化 Masked 内存指令)

代码猜测 & 推测执行

这些 Pass 主要用于 预测分支、推测执行、消除不必要的检查:

  • ConstraintElimination.cpp(约束消除)
  • CorrelatedValuePropagation.cpp(相关值传播)
  • DivRemPairs.cpp(优化除法/取余对)
  • Float2Int.cpp(浮点转整数优化)
  • InferAddressSpaces.cpp(推测地址空间)
  • InferAlignment.cpp(推测对齐方式)
  • InstSimplifyPass.cpp指令简化
  • MakeGuardsExplicit.cpp(显式化 Guard 语句)
  • NaryReassociate.cpp(N 元重关联优化)
  • Reassociate.cpp表达式重关联
  • SpeculativeExecution.cpp(推测执行优化)

安全性 & 运行时优化

这些 Pass 主要用于 运行时安全 & GC 相关优化:

  • LowerGuardIntrinsic.cpp(降低 Guard 指令)
  • LowerExpectIntrinsic.cpp(降低 __builtin_expect 指令)
  • LowerConstantIntrinsics.cpp(降低常量内置函数)
  • LowerAtomicPass.cpp(降低原子操作)
  • LowerMatrixIntrinsics.cpp(降低矩阵指令)
  • LowerWidenableCondition.cpp(降低可扩展条件)
  • PlaceSafepoints.cpp(安全点插入)
  • RewriteStatepointsForGC.cpp(GC 相关优化)
  • SeparateConstOffsetFromGEP.cpp(GEP 指针偏移优化)

代码移动 & 其他优化

  • MergedLoadStoreMotion.cpp(合并 Load/Store 语句)
  • MergeICmps.cpp(合并整数比较指令)
  • Sink.cpp代码下沉
  • StraightLineStrengthReduce.cpp(直线代码强度削弱)
  • WarnMissedTransforms.cpp(提示未进行的优化)

IPO

LLVM lib/Transforms/IPO/ 目录包含 跨过程优化(Interprocedural Optimizations, IPO) 相关的 Pass,主要用于 跨函数、跨模块优化,提升整个程序的优化效果。可以将这些 Pass 归类如下:

内联优化

这些 Pass 主要用于 函数内联,减少函数调用开销:

  • AlwaysInliner.cpp(强制内联特定函数,如 always_inline 标记的函数)
  • Inliner.cpp(标准内联优化)
  • ModuleInliner.cpp(模块级内联)
  • FunctionImport.cpp(跨模块函数导入,用于 ThinLTO)
  • PartialInlining.cpp(部分内联优化)

全程序优化

这些 Pass 主要用于 全程序范围的优化,如 去除无用代码:

  • GlobalDCE.cpp(全局死代码消除)
  • GlobalOpt.cpp(全局变量优化)
  • GlobalSplit.cpp(全局变量拆分优化)
  • ElimAvailExtern.cpp(去除无用的 extern 声明)
  • WholeProgramDevirt.cpp(全程序虚函数去虚拟化)
  • IPO.cpp(IPO 入口 Pass)

函数级优化

这些 Pass 主要用于 优化函数的调用方式、属性和结构:

  • FunctionAttrs.cpp(函数属性推导)
  • ForceFunctionAttrs.cpp(强制应用函数属性)
  • InferFunctionAttrs.cpp(推导缺失的函数属性)
  • FunctionSpecialization.cpp(函数特化)
  • ArgumentPromotion.cpp(函数参数提升)
  • DeadArgumentElimination.cpp(死参数消除)
  • CalledValuePropagation.cpp(调用值传播优化)
  • SCCP.cpp(稀疏条件常量传播,用于跨函数优化)

代码裁剪 & 符号优化(Code Stripping & Symbol Optimization)

这些 Pass 主要用于 减少无用的符号、元数据、原型:

  • StripSymbols.cpp(移除符号)
  • StripDeadPrototypes.cpp(移除未使用的函数原型)
  • Annotation2Metadata.cpp(将注解转换为元数据)

代码合并 & 结构优化(Code Merging & Structure Optimization)

这些 Pass 主要用于 合并相似代码,减少冗余:

  • MergeFunctions.cpp(合并相同或相似函数)
  • IROutliner.cpp(IR 代码模式提取优化)

并行 & 线程优化(Parallel & Thread Optimizations)

这些 Pass 主要用于 优化 OpenMP 及并行代码:

  • OpenMPOpt.cpp(OpenMP 代码优化)
  • BarrierNoopPass.cpp(OpenMP 屏障优化)

控制流优化(Control Flow Optimizations)

这些 Pass 主要用于 控制流的简化和改进:

  • HotColdSplitting.cpp(冷热代码拆分)
  • BlockExtractor.cpp(提取基本块)
  • LoopExtractor.cpp(提取循环到独立函数)

类型、检查与安全性优化(Type, Check & Security Optimizations)

这些 Pass 主要用于 类型测试、内存安全及跨模块安全优化:

  • LowerTypeTests.cpp(优化类型检查)
  • MemProfContextDisambiguation.cpp(基于内存分析的优化)
  • CrossDSOCFI.cpp(跨动态库的控制流完整性优化)

采样分析 & 反馈优化(Profile-Guided & Sample-Based Optimizations)

这些 Pass 主要用于 基于采样分析的优化:

  • SampleProfile.cpp(采样分析)
  • SampleProfileMatcher.cpp(采样匹配优化)
  • SampleProfileProbe.cpp(插入采样探针)
  • SampleContextTracker.cpp(采样上下文追踪)

代码嵌入 & Bitcode 相关(Bitcode Embedding & LTO)

这些 Pass 主要用于 代码嵌入和 LTO(Link-Time Optimization):

  • EmbedBitcodePass.cpp(嵌入 Bitcode)
  • ThinLTOBitcodeWriter.cpp(ThinLTO Bitcode 写入)

Vectorize

LLVM lib/Transforms/Vectorize/ 目录主要包含 矢量化(Vectorization)优化 Pass,用于将 标量代码转换为 SIMD 矢量代码,以提高指令级并行性。可以将这些 Pass 归类如下:

循环矢量化(Loop Vectorization)

这些 Pass 主要用于 对循环进行矢量化,使其能够利用 SIMD 指令:

  • LoopVectorize.cpp循环矢量化核心 Pass
  • LoopIdiomVectorize.cpp(循环惯用优化矢量化)
  • LoopVectorizationLegality.cpp(循环矢量化合法性检查)
  • LoopVectorizationPlanner.h(循环矢量化规划)

语句级矢量化(SLP Vectorization)

这些 Pass 主要用于 合并独立语句,形成 SIMD 操作:

  • SLPVectorizer.cpp(Superword Level Parallelism 矢量化)
  • VectorCombine.cpp(矢量化合并优化)
  • Vectorize.cpp(矢量化 Pass 入口)

VPlan 矢量化框架(VPlan - Vectorization Planning)

LLVM 使用 VPlan 框架来管理矢量化策略,以下文件负责 VPlan 构建、分析、优化:

  • VPlan.cpp(VPlan 主要逻辑)
  • VPlan.h(VPlan 头文件)
  • VPlanAnalysis.cpp(VPlan 分析)
  • VPlanDominatorTree.h(VPlan 支配树)
  • VPlanHCFGBuilder.cpp(VPlan 层次控制流图构建)
  • VPlanRecipes.cpp(VPlan 矢量化转换规则)
  • VPlanSLP.cpp(VPlan 结合 SLP 矢量化)
  • VPlanTransforms.cpp(VPlan 变换优化)
  • VPlanVerifier.cpp(VPlan 验证)
  • VPlanUnroll.cpp(VPlan 循环展开)
  • VPlanUtils.cpp(VPlan 辅助工具)

Sandbox 矢量化器

SandboxVectorizer/ 目录包含一个实验性矢量化器,尝试更高级的矢量化技术:

  • SandboxVectorizer.cpp(Sandbox 矢量化核心逻辑)
  • SandboxVectorizerPassBuilder.cpp(Pass 生成器)
  • Legality.cpp(矢量化合法性分析)
  • Scheduler.cpp(矢量化调度)
  • DependencyGraph.cpp(依赖图构建)
  • Interval.cpp(区间分析)
  • SeedCollector.cpp(种子收集器)
  • Passes/(存放其他辅助 Pass)

Analyze Passes

见附录:[附录 A PassRegistry 全解]( #附录-A PassRegistry 全解)

优化示例

下面将给出重要 LLVM 中端优化例子的具体变化

ADCE
; ===== 优化前 =====
define i32 @example(i1 %cond) {
entry:
  %a = add i32 1, 2             ; ← 未使用的计算
  %b = mul i32 3, 4             ; ← 未使用的计算
  br i1 %cond, label %iftrue, label %iffalse

iftrue:
  ret i32 42

iffalse:
  ret i32 0
}

; ===== 优化后 =====
define i32 @example(i1 %cond) {
entry:
  br i1 %cond, label %iftrue, label %iffalse  ; ← 已删除 %a 和 %b

iftrue:
  ret i32 42

iffalse:
  ret i32 0
}
BDCE
; ===== 优化前 =====
define void @example(i1 %cond) {
entry:
  br i1 %cond, label %dead, label %live

dead:                                        ; ← 死分支
  %a = add i32 1, 2                          ; ← 无副作用指令
  br label %exit

live:
  br label %exit

exit:
  ret void
}

; ===== 优化后 =====
define void @example(i1 %cond) {
entry:
  br i1 %cond, label %live, label %live      ; ← 跳过死分支

live:
  br label %exit

exit:
  ret void
}
EarlyCSE
; ===== 优化前 =====
define i32 @example(i32 %x) {
entry:
  %a = add i32 %x, 1         ; ← 计算1
  %b = add i32 %x, 1         ; ← 计算重复
  %c = mul i32 %b, 2
  ret i32 %c
}

; ===== 优化后 =====
define i32 @example(i32 %x) {
entry:
  %a = add i32 %x, 1         ; ← 计算1
  ; %b 被消除,以下使用 %a 替代
  %c = mul i32 %a, 2
  ret i32 %c
}
GVN
; ===== 优化前 =====
define i32 @example(i32 %x, i32 %y) {
entry:
  %a = add i32 %x, %y           ; ← 计算1
  br label %next

next:
  %b = add i32 %x, %y           ; ← 冗余计算
  %c = mul i32 %b, 2
  ret i32 %c
}

; ===== 优化后 =====
define i32 @example(i32 %x, i32 %y) {
entry:
  %a = add i32 %x, %y           ; ← 计算1
  br label %next

next:
  ; %b 被替换为 %a
  %c = mul i32 %a, 2
  ret i32 %c
}
GVNHoist
; ===== 优化前 =====
define i32 @example(i32 %x, i1 %cond) {
entry:
  br i1 %cond, label %iftrue, label %iffalse

iftrue:
  %a = mul i32 %x, 2           ; ← 相同指令1
  br label %merge

iffalse:
  %b = mul i32 %x, 2           ; ← 相同指令2
  br label %merge

merge:
  %phi = phi i32 [%a, %iftrue], [%b, %iffalse]
  ret i32 %phi
}

; ===== 优化后 =====
define i32 @example(i32 %x, i1 %cond) {
entry:
  %hoist = mul i32 %x, 2       ; ← 上提到共同前驱
  br i1 %cond, label %iftrue, label %iffalse

iftrue:
  br label %merge

iffalse:
  br label %merge

merge:
  ; 删除 phi,直接使用 hoist
  ret i32 %hoist
}
SCCP
; ===== 优化前 =====
define i32 @example() {
entry:
  %a = add i32 2, 3               ; ← 常量计算
  %cond = icmp eq i32 %a, 5       ; ← 恒为真
  br i1 %cond, label %then, label %else

then:
  ret i32 42

else:
  ret i32 0
}

; ===== 优化后 =====
define i32 @example() {
entry:
  ; %a 和 %cond 被常量传播消除
  ret i32 42                     ; ← 已知cond恒为真,直接跳转
}
LICM
; ===== 优化前 =====
define i32 @example(i32* %A, i32 %n) {
entry:
  br label %loop

loop:
  %i = phi i32 [0, %entry], [%inc, %loop]
  %c = mul i32 %n, 2           ; ← 循环不变,可外提
  %v = load i32, i32* %A
  %x = add i32 %c, %v
  %inc = add i32 %i, 1
  %cond = icmp slt i32 %inc, 10
  br i1 %cond, label %loop, label %exit

exit:
  ret i32 %x
}

; ===== 优化后 =====
define i32 @example(i32* %A, i32 %n) {
entry:
  %c = mul i32 %n, 2           ; ← 已外提至循环前
  br label %loop

loop:
  %i = phi i32 [0, %entry], [%inc, %loop]
  %v = load i32, i32* %A
  %x = add i32 %c, %v
  %inc = add i32 %i, 1
  %cond = icmp slt i32 %inc, 10
  br i1 %cond, label %loop, label %exit

exit:
  ret i32 %x
}
IndVarSimplify
; ===== 优化前 =====
define void @example() {
entry:
  br label %loop

loop:
  %i = phi i32 [0, %entry], [%inc, %loop]
  %val = mul i32 %i, 2              ; ← 冗余的乘法
  %inc = add i32 %i, 1
  %cond = icmp slt i32 %inc, 10
  br i1 %cond, label %loop, label %exit

exit:
  ret void
}

; ===== 优化后 =====
define void @example() {
entry:
  br label %loop

loop:
  %i = phi i32 [0, %entry], [%inc, %loop]
  ; %val 被删除,改为使用简化后的表达式
  %inc = add i32 %i, 1
  %cond = icmp slt i32 %inc, 10
  br i1 %cond, label %loop, label %exit

exit:
  ret void
}
LoopBoundSplit
; ===== 优化前 =====
define void @loop(i32 %n) {
entry:
  br label %loop

loop:
  %i = phi i32 [ 0, %entry ], [ %inc, %loop ]
  call void @sideeffect(i32 %i)
  %inc = add i32 %i, 1
  %cmp = icmp slt i32 %inc, %n
  br i1 %cmp, label %loop, label %exit

exit:
  ret void
}

; ===== 优化后 =====
define void @loop(i32 %n) {
entry:
  %cmp.bound = icmp slt i32 %n, 10              ; ← 添加边界判断
  br i1 %cmp.bound, label %loop.fast, label %loop.slow

loop.fast:                                      ; ← 快路径(已知边界)
  %i.fast = phi i32 [ 0, %entry ], [ %inc.fast, %loop.fast ]
  call void @sideeffect(i32 %i.fast)
  %inc.fast = add i32 %i.fast, 1
  %cmp.fast = icmp slt i32 %inc.fast, %n
  br i1 %cmp.fast, label %loop.fast, label %exit

loop.slow:                                      ; ← 慢路径(未知边界)
  %i.slow = phi i32 [ 0, %entry ], [ %inc.slow, %loop.slow ]
  call void @sideeffect(i32 %i.slow)
  %inc.slow = add i32 %i.slow, 1
  %cmp.slow = icmp slt i32 %inc.slow, %n
  br i1 %cmp.slow, label %loop.slow, label %exit

exit:
  ret void
}
LoopDistribute
; ===== 优化前 =====
define void @example(ptr %a, ptr %b) {
entry:
  br label %loop

loop:
  %i = phi i32 [ 0, %entry ], [ %inc, %loop ]
  %ld = load i32, ptr %a       ; ← 可能依赖较多
  store i32 %ld, ptr %b        ; ← 存储操作
  call void @sideeffect()      ; ← 有副作用,影响并行
  %inc = add i32 %i, 1
  %cmp = icmp slt i32 %inc, 100
  br i1 %cmp, label %loop, label %exit

exit:
  ret void
}

; ===== 优化后 =====
define void @example(ptr %a, ptr %b) {
entry:
  br label %loop.1

loop.1:
  %i1 = phi i32 [ 0, %entry ], [ %inc1, %loop.1 ]
  %ld = load i32, ptr %a       ; ← 已分离
  store i32 %ld, ptr %b
  %inc1 = add i32 %i1, 1
  %cmp1 = icmp slt i32 %inc1, 100
  br i1 %cmp1, label %loop.1, label %loop.2

loop.2:
  %i2 = phi i32 [ 0, %loop.1 ], [ %inc2, %loop.2 ]
  call void @sideeffect()      ; ← 分配到独立循环
  %inc2 = add i32 %i2, 1
  %cmp2 = icmp slt i32 %inc2, 100
  br i1 %cmp2, label %loop.2, label %exit

exit:
  ret void
}
LoopFlatten
; ===== 优化前 =====
define void @nested_loops() {
entry:
  br label %outer

outer:
  %i = phi i32 [ 0, %entry ], [ %i_next, %outer_inc ]
  br label %inner

inner:
  %j = phi i32 [ 0, %outer ], [ %j_next, %inner_inc ]
  ; body
  %j_next = add i32 %j, 1
  %j_cond = icmp slt i32 %j_next, 10
  br i1 %j_cond, label %inner_inc, label %outer_inc

inner_inc:
  br label %inner

outer_inc:
  %i_next = add i32 %i, 1
  %i_cond = icmp slt i32 %i_next, 10
  br i1 %i_cond, label %outer, label %exit

exit:
  ret void
}

; ===== 优化后 =====
define void @nested_loops() {
entry:
  br label %flat

flat:
  %idx = phi i32 [ 0, %entry ], [ %idx_next, %flat ]
  ; body using %i = udiv idx, 10 and %j = urem idx, 10  ← 展开索引
  %idx_next = add i32 %idx, 1
  %cond = icmp slt i32 %idx_next, 100                ; ← 合并循环条件
  br i1 %cond, label %flat, label %exit

exit:
  ret void
}
LoopFuse
; ===== 优化前 =====
define void @example(ptr %A, ptr %B) {
entry:
  br label %loop1

loop1:
  %i1 = phi i32 [0, %entry], [%inc1, %loop1]
  %a = getelementptr i32, ptr %A, i32 %i1
  store i32 1, ptr %a                    ; ← 第一个循环体
  %inc1 = add i32 %i1, 1
  %cond1 = icmp slt i32 %inc1, 100
  br i1 %cond1, label %loop1, label %between

between:
  br label %loop2

loop2:
  %i2 = phi i32 [0, %between], [%inc2, %loop2]
  %b = getelementptr i32, ptr %B, i32 %i2
  store i32 2, ptr %b                    ; ← 第二个循环体
  %inc2 = add i32 %i2, 1
  %cond2 = icmp slt i32 %inc2, 100
  br i1 %cond2, label %loop2, label %exit

exit:
  ret void
}

; ===== 优化后 =====
define void @example(ptr %A, ptr %B) {
entry:
  br label %loop

loop:
  %i = phi i32 [0, %entry], [%inc, %loop]
  %a = getelementptr i32, ptr %A, i32 %i
  store i32 1, ptr %a                    ; ← 合并后的循环体:原loop1
  %b = getelementptr i32, ptr %B, i32 %i
  store i32 2, ptr %b                    ; ← 合并后的循环体:原loop2
  %inc = add i32 %i, 1
  %cond = icmp slt i32 %inc, 100
  br i1 %cond, label %loop, label %exit

exit:
  ret void
}

附录-A PassRegistry 全解

MODULE_ANALYSIS("callgraph", CallGraphAnalysis())             // 构建和查询程序的调用图
MODULE_ANALYSIS("collector-metadata", CollectorMetadataAnalysis())   // 收集并管理自定义元数据
MODULE_ANALYSIS("ctx-prof-analysis", CtxProfAnalysis())       // 上下文敏感的 PG O(Profile-Guided Optimization)分析
MODULE_ANALYSIS("dxil-metadata", DXILMetadataAnalysis())      // 解析和存储 DXIL(DirectX Intermediate Language)元数据
MODULE_ANALYSIS("dxil-resources", DXILResourceAnalysis())     // 分析 DXIL 中的资源(纹理、缓冲区等)使用情况
MODULE_ANALYSIS("dxil-resource-type", DXILResourceTypeAnalysis()) // 推断和标记 DXIL 资源的类型信息
MODULE_ANALYSIS("inline-advisor", InlineAdvisorAnalysis())    // 建议内联优化点,辅助 inliner 做决策
MODULE_ANALYSIS("ir-similarity", IRSimilarityAnalysis())      // 检测和聚类相似的 IR 代码片段
MODULE_ANALYSIS("last-run-tracking", LastRunTrackingAnalysis()) // 跟踪上次运行时的变更和执行情况
MODULE_ANALYSIS("lcg", LazyCallGraphAnalysis())              // 延迟构建调用图,仅在需要时才生成节点/边
MODULE_ANALYSIS("module-summary", ModuleSummaryIndexAnalysis()) // 为跨模块优化生成模块摘要索引
MODULE_ANALYSIS("no-op-module", NoOpModuleAnalysis())         // 空操作分析,占位用,不做任何变换
MODULE_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC)) // 为 Pass 插装探针,收集运行时统计
MODULE_ANALYSIS("profile-summary", ProfileSummaryAnalysis()) // 汇总 PG O 分析结果,生成整体概要
MODULE_ANALYSIS("reg-usage", PhysicalRegisterUsageAnalysis()) // 分析物理寄存器的实际使用情况
MODULE_ANALYSIS("stack-safety", StackSafetyGlobalAnalysis()) // 全局栈安全分析,检测栈溢出风险
MODULE_ANALYSIS("verify", VerifierAnalysis())                // 验证 IR 的合法性和一致性
MODULE_ALIAS_ANALYSIS("globals-aa", GlobalsAA())             // 全局变量别名分析,识别不同全局变量间的别名关系
MODULE_PASS("always-inline", AlwaysInlinerPass())            // 强制将所有调用点内联被标记的函数
MODULE_PASS("annotation2metadata", Annotation2MetadataPass()) // 将自定义注解转换成 IR 元数据
MODULE_PASS("assign-guid", AssignGUIDPass())                 // 为 IR 指令分配全局唯一 ID(GUID)
MODULE_PASS("attributor", AttributorPass())                  // 属性推导框架,用于发现和传播函数/调用约束
MODULE_PASS("attributor-light", AttributorLightPass())       // 轻量级属性推导,仅执行快速检查
MODULE_PASS("called-value-propagation", CalledValuePropagationPass()) // 传播已调用函数的返回值常量
MODULE_PASS("canonicalize-aliases", CanonicalizeAliasesPass()) // 规范化别名,简化 `bitcast`/`getelementptr` 链
MODULE_PASS("check-debugify", NewPMCheckDebugifyPass())      // 检查并加入调试化信息,确保调试符号完整
MODULE_PASS("constmerge", ConstantMergePass())               // 合并相同常量的全局变量或常量表达式
MODULE_PASS("coro-cleanup", CoroCleanupPass())              // 清理协程生成的中间状态和标记
MODULE_PASS("coro-early", CoroEarlyPass())                   // 提前识别协程开始/结束点,为后续优化做准备
MODULE_PASS("cross-dso-cfi", CrossDSOCFIPass())              // 启用跨动态链接库的控制流完整性检查
MODULE_PASS("ctx-instr-gen", PGOInstrumentationGen(PGOInstrumentationType::CTXPROF)) // 生成上下文敏感的 PG O 插装指令
MODULE_PASS("ctx-prof-flatten", PGOCtxProfFlatteningPass(/*IsPreThinlink=*/false)) // 对上下文敏感的 PG O 插装数据执行展平,合并相同调用上下文的配置
MODULE_PASS("ctx-prof-flatten-prethinlink",         PGOCtxProfFlatteningPass(/*IsPreThinlink=*/true)) // 在 ThinLTO 链接前执行上下文敏感展平,以便后续跨模块 LTO 使用
MODULE_PASS("noinline-nonprevailing", NoinlineNonPrevailing()) // 避免对非主导(non-prevailing)函数进行内联,以减少代码爆炸
MODULE_PASS("deadargelim", DeadArgumentEliminationPass()) // 消除函数中未使用的参数,删除多余的入参
MODULE_PASS("debugify", NewPMDebugifyPass()) // 向 IR 中注入完整的调试信息,便于后续验证和调试
MODULE_PASS("dfsan", DataFlowSanitizerPass()) // 插装 DataFlowSanitizer 检测指针和数据流的安全性
MODULE_PASS("dot-callgraph", CallGraphDOTPrinterPass()) // 将调用图导出为 DOT 格式,便于用 Graphviz 可视化
MODULE_PASS("dxil-upgrade", DXILUpgradePass()) // 升级 DXIL IR 到最新规范,更新过时指令和元数据
MODULE_PASS("elim-avail-extern", EliminateAvailableExternallyPass()) // 删除标记为 available_externally 的函数/全局变量,减小模块大小
MODULE_PASS("extract-blocks", BlockExtractorPass({}, false)) // 抽取指定基本块到新函数,支持代码分离和分析
MODULE_PASS("expand-variadics", ExpandVariadicsPass(ExpandVariadicsMode::Disable)) // 将可变参数函数展开为固定参数形式(此处禁用,仅分析用途)
MODULE_PASS("forceattrs", ForceFunctionAttrsPass()) // 强制根据函数实现添加或修改属性(如NoUnwind、ReadNone等)
MODULE_PASS("function-import", FunctionImportPass()) // 在跨模块优化中导入函数定义,实现内联和优化传递
MODULE_PASS("global-merge-func", GlobalMergeFuncPass()) // 合并功能相同的全局函数,消除重复实现
MODULE_PASS("globalopt", GlobalOptPass()) // 全局范围优化,包括常量传播、死代码删除、CFG 简化
MODULE_PASS("globalsplit", GlobalSplitPass()) // 将全局变量拆分为热/冷区域,提高缓存局部性
MODULE_PASS("hipstdpar-interpose-alloc", HipStdParAllocationInterpositionPass()) // 对 HIP 标准并行分配调用插装拦截,用于分析或模拟
MODULE_PASS("hipstdpar-select-accelerator-code",         HipStdParAcceleratorCodeSelectionPass()) // 根据目标加速器选择最优代码路径(比如 GPU vs CPU)
MODULE_PASS("hotcoldsplit", HotColdSplittingPass()) // 将函数或基本块按热度拆分成热/冷部分,优化指令缓存
MODULE_PASS("inferattrs", InferFunctionAttrsPass()) // 基于函数体分析推断可用属性(如纯函数、无副作用等)
MODULE_PASS("inliner-ml-advisor-release",         ModuleInlinerWrapperPass(getInlineParams(), true, {}, InliningAdvisorMode::Release, 0)) // 使用机器学习模型建议内联,针对 Release 构建收集统计并执行内联
MODULE_PASS("inliner-wrapper", ModuleInlinerWrapperPass()) // 通用模块内联包装器,根据参数动态决定内联行为
MODULE_PASS("inliner-wrapper-no-mandatory-first",         ModuleInlinerWrapperPass(getInlineParams(), false)) // 模块内联包装器(不优先处理强制内联),优化裁剪内联顺序
MODULE_PASS("insert-gcov-profiling", GCOVProfilerPass()) // 插装 GCOV 覆盖率分析点,生成运行时覆盖率数据
MODULE_PASS("instrprof", InstrProfilingLoweringPass()) // 将 InstrumentationProfiler 插装调用下沉到 IR 中,生成测量钩子
MODULE_PASS("ctx-instr-lower", PGOCtxProfLoweringPass()) // 将上下文敏感 PG O 插装高层接口下沉为低级钩子
MODULE_PASS("print\<ctx-prof-analysis>", CtxProfAnalysisPrinterPass(errs())) // 打印上下文敏感 PG O 分析结果到标准错误流
MODULE_PASS("invalidate<all>", InvalidateAllAnalysesPass()) // 在模块变更后使所有分析结果失效,确保数据一致性
MODULE_PASS("iroutliner", IROutlinerPass()) // 将重复 IR 模式抽取为函数,提高代码重用性和紧凑性
MODULE_PASS("jmc-instrumenter", JMCInstrumenterPass()) // 插装 Just-My-Code 跟踪点,仅记录用户代码执行
MODULE_PASS("lower-emutls", LowerEmuTLSPass()) // 将仿真 TLS 操作转换为显式内存访问,支持无本地 TLS 的目标
MODULE_PASS("lower-global-dtors", LowerGlobalDtorsPass()) // 将全局析构函数列表转换为显式函数调用
MODULE_PASS("lower-ifunc", LowerIFuncPass()) // 将基于 GNU IFUNC 的可重定位函数解析转为直接调用
MODULE_PASS("lowertypetests", LowerTypeTestsPass()) // 将类型测试(type tests)内建指令降级为显式检查
MODULE_PASS("fatlto-cleanup", FatLtoCleanup())  // 清理 FatLTO 中间产生的数据和标记,恢复模块基本状态
MODULE_PASS("pgo-force-function-attrs", PGOForceFunctionAttrsPass(PGOOpt ? PGOOpt->ColdOptType : PGOOptions::ColdFuncOpt::Default)) // 基于 PGO 冷调用分析,强制为函数添加冷/热属性
MODULE_PASS("memprof-context-disambiguation", MemProfContextDisambiguation()) // 在 MemProf 中为不同调用上下文分离内存访问,消除歧义
MODULE_PASS("memprof-module", ModuleMemProfilerPass()) // 为模块插装内存访问探针,生成运行时追踪
MODULE_PASS("mergefunc", MergeFunctionsPass()) // 合并相似或等价函数,减少代码重复
MODULE_PASS("metarenamer", MetaRenamerPass()) // 对 IR 元素(函数、变量)进行可读性重命名
MODULE_PASS("module-inline", ModuleInlinerPass()) // 模块级函数内联,执行常规内联转换
MODULE_PASS("name-anon-globals", NameAnonGlobalPass()) // 为匿名全局符号生成唯一名称,便于调试和分析
MODULE_PASS("no-op-module", NoOpModulePass()) // 空操作 Pass,占位测试
MODULE_PASS("nsan", NumericalStabilitySanitizerPass()) // 插装检测数值计算稳定性问题
MODULE_PASS("objc-arc-apelim", ObjCARCAPElimPass()) // Objective-C ARC 模式下消除不必要的自动引用计数调用
MODULE_PASS("openmp-opt", OpenMPOptPass()) // 针对 OpenMP 并行指令进行优化
MODULE_PASS("openmp-opt-postlink", OpenMPOptPass(ThinOrFullLTOPhase::FullLTOPostLink)) // 全链接后对 OpenMP 代码进行二次优化
MODULE_PASS("partial-inliner", PartialInlinerPass()) // 部分内联,仅内联小函数或满足阈值的函数
MODULE_PASS("pgo-icall-prom", PGOIndirectCallPromotion()) // PGO 基于探测数据将间接调用提升为直接调用
MODULE_PASS("pgo-instr-gen", PGOInstrumentationGen()) // 生成 PGO 探针插装
MODULE_PASS("pgo-instr-use", PGOInstrumentationUse()) // 使用先前插装的 PGO 数据进行优化
MODULE_PASS("pre-isel-intrinsic-lowering", PreISelIntrinsicLoweringPass(TM)) // 在选择指令前将内建函数降级为标准 IR
MODULE_PASS("print", PrintModulePass(errs())) // 打印模块 IR 到 stderr
MODULE_PASS("print-callgraph", CallGraphPrinterPass(errs())) // 打印调用图文本到 stderr
MODULE_PASS("print-callgraph-sccs", CallGraphSCCsPrinterPass(errs())) // 打印调用图强连通分量到 stderr
MODULE_PASS("print-ir-similarity", IRSimilarityAnalysisPrinterPass(errs())) // 打印 IR 相似度分组结果到 stderr
MODULE_PASS("print-lcg", LazyCallGraphPrinterPass(errs())) // 打印延迟调用图到 stderr
MODULE_PASS("print-lcg-dot", LazyCallGraphDOTPrinterPass(errs())) // 以 DOT 格式打印延迟调用图
MODULE_PASS("print-must-be-executed-contexts", MustBeExecutedContextPrinterPass(errs())) // 打印必定执行上下文分析结果到 stderr
MODULE_PASS("print-profile-summary", ProfileSummaryPrinterPass(errs())) // 打印 PGO 概要报告到 stderr
MODULE_PASS("print-stack-safety", StackSafetyGlobalPrinterPass(errs())) // 打印栈安全分析结果到 stderr
MODULE_PASS("print\<dxil-metadata>", DXILMetadataAnalysisPrinterPass(errs())) // 打印 DXIL 元数据分析结果到 stderr
MODULE_PASS("print\<dxil-resources>", DXILResourcePrinterPass(errs())) // 打印 DXIL 资源分析结果到 stderr
MODULE_PASS("print\<inline-advisor>", InlineAdvisorAnalysisPrinterPass(errs())) // 打印内联建议分析结果到 stderr
MODULE_PASS("print\<module-debuginfo>", ModuleDebugInfoPrinterPass(errs())) // 打印模块调试信息到 stderr
MODULE_PASS("print\<reg-usage>", PhysicalRegisterUsageInfoPrinterPass(errs())) // 打印物理寄存器使用信息到 stderr
MODULE_PASS("pseudo-probe", SampleProfileProbePass(TM)) // 插装伪探针以支持低开销性能分析
MODULE_PASS("pseudo-probe-update", PseudoProbeUpdatePass()) // 更新和合并伪探针信息
MODULE_PASS("recompute-globalsaa", RecomputeGlobalsAAPass()) // 重新计算全局别名分析以反映最新 IR 改动
MODULE_PASS("rel-lookup-table-converter", RelLookupTableConverterPass()) // 转换相对查找表以优化运行时查找性能
MODULE_PASS("rewrite-statepoints-for-gc", RewriteStatepointsForGC()) // 重写 GC 状态点以支持精确垃圾回收
MODULE_PASS("rewrite-symbols", RewriteSymbolPass()) // 重写符号名称或链接属性,支持虚拟化或混淆
MODULE_PASS("rpo-function-attrs", ReversePostOrderFunctionAttrsPass()) // 按反后序遍历顺序推断函数属性以提升分析精度
MODULE_PASS("rtsan", RealtimeSanitizerPass()) // 插装实时 Sanitizer 以检测运行时错误
MODULE_PASS("sample-profile", SampleProfileLoaderPass()) // 加载采样分析配置并插装采样探针
MODULE_PASS("sancov-module", SanitizerCoveragePass()) // 插装 Sanitizer 覆盖率探针以收集执行路径覆盖信息
MODULE_PASS("sanmd-module", SanitizerBinaryMetadataPass()) // 生成二进制级别 Sanitizer 元数据
MODULE_PASS("scc-oz-module-inliner", buildInlinerPipeline(OptimizationLevel::Oz, ThinOrFullLTOPhase::None)) // 构建针对 Oz 优化级别的 SCC 内联流水线
MODULE_PASS("shadow-stack-gc-lowering", ShadowStackGCLoweringPass()) // 将 Shadow Stack GC 转换为显式指令序列
MODULE_PASS("strip", StripSymbolsPass()) // 删除所有符号表信息以减小二进制大小
MODULE_PASS("strip-dead-debug-info", StripDeadDebugInfoPass()) // 删除未引用的调试信息以加快加载速度
MODULE_PASS("strip-dead-prototypes", StripDeadPrototypesPass()) // 删除无用的函数原型声明
MODULE_PASS("strip-debug-declare", StripDebugDeclarePass()) // 删除 llvm.dbg.declare 调试声明
MODULE_PASS("strip-nondebug", StripNonDebugSymbolsPass()) // 删除非调试符号,仅保留调试相关符号
MODULE_PASS("strip-nonlinetable-debuginfo", StripNonLineTableDebugInfoPass()) // 删除行号表以外的调试信息
MODULE_PASS("strip-dead-cg-profile", StripDeadCGProfilePass()) // 删除无用的调用图配置文件数据
MODULE_PASS("trigger-crash-module", TriggerCrashModulePass()) // 强制引发崩溃以测试 Pass 管道的鲁棒性
MODULE_PASS("trigger-verifier-error", TriggerVerifierErrorPass()) // 强制触发验证器错误以测试验证流程
MODULE_PASS("tsan-module", ModuleThreadSanitizerPass()) // 插装线程 Sanitizer 以检测数据竞争
MODULE_PASS("tysan", TypeSanitizerPass()) // 插装类型 Sanitizer 以检测内存越界和类型混用
MODULE_PASS("verify", VerifierPass()) // 验证所有 IR 变换后的合法性以确保无错误
MODULE_PASS("view-callgraph", CallGraphViewerPass()) // 以图形化方式展示调用图(依赖 GUI)
MODULE_PASS("wholeprogramdevirt", WholeProgramDevirtPass()) // 全程序级虚函数去虚化,转为直接调用
MODULE_PASS_WITH_PARAMS("asan", "AddressSanitizerPass", [](AddressSanitizerOptions Opts){return AddressSanitizerPass(Opts);}, parseASanPassOptions, "kernel") // 插装 AddressSanitizer 以检测内存越界和使用后释放
MODULE_PASS_WITH_PARAMS("cg-profile", "CGProfilePass", [](bool InLTOPostLink){return CGProfilePass(InLTOPostLink);}, parseCGProfilePassOptions, "in-lto-post-link") // 基于调用图数据插装或使用调用图分析
MODULE_PASS_WITH_PARAMS("global-merge", "GlobalMergePass", [TM=TM](GlobalMergeOptions Opts){return GlobalMergePass(TM, Opts);}, parseGlobalMergeOptions, "group-by-use;ignore-single-use;…") // 按多种策略合并全局变量以减少冗余
MODULE_PASS_WITH_PARAMS("embed-bitcode", "EmbedBitcodePass", [](EmbedBitcodeOptions Opts){return EmbedBitcodePass(Opts);}, parseEmbedBitcodePassOptions, "thinlto;emit-summary") // 将 Bitcode 嵌入到目标文件,支持 LTO 和摘要导出
MODULE_PASS_WITH_PARAMS("globaldce", "GlobalDCEPass", [](bool InLTOPostLink){return GlobalDCEPass(InLTOPostLink);}, parseGlobalDCEPassOptions, "in-lto-post-link") // 删除全局范围内不可达的函数和变量
MODULE_PASS_WITH_PARAMS("hwasan", "HWAddressSanitizerPass", [](HWAddressSanitizerOptions Opts){return HWAddressSanitizerPass(Opts);}, parseHWASanPassOptions, "kernel;recover") // 插装硬件辅助 ASan 检测,并可选择恢复模式
MODULE_PASS_WITH_PARAMS("internalize", "InternalizePass", [](SmallVector<std::string,0> PreservedGVs){return InternalizePass(MustPreserveGV);}, parseInternalizeGVs, "preserve-gv=GV") // 将非保留全局符号标记为内部可见,优化符号导出
MODULE_PASS_WITH_PARAMS("ipsccp", "IPSCCPPass", [](IPSCCPOptions Opts){return IPSCCPPass(Opts);}, parseIPSCCPOptions, "no-func-spec;func-spec") // 在跨函数常量传播中应用间过程 SCCP 分析
MODULE_PASS_WITH_PARAMS("loop-extract", "LoopExtractorPass", [](bool Single){return Single? LoopExtractorPass(1): LoopExtractorPass();}, parseLoopExtractorPassOptions, "single") // 从循环体中提取基本块用于独立分析或优化
MODULE_PASS_WITH_PARAMS("memprof-use", "MemProfUsePass", [](std::string Opts){return MemProfUsePass(Opts);}, parseMemProfUsePassOptions, "profile-filename=S") // 指定采样文件并插装内存使用采样分析
MODULE_PASS_WITH_PARAMS("msan", "MemorySanitizerPass", [](MemorySanitizerOptions Opts){return MemorySanitizerPass(Opts);}, parseMSanPassOptions, "recover;kernel;eager-checks;track-origins=N") // 插装 MemorySanitizer 检测未初始化内存读取
MODULE_PASS_WITH_PARAMS("print\<structural-hash>", "StructuralHashPrinterPass", [](StructuralHashOptions Options){return StructuralHashPrinterPass(errs(), Options);}, parseStructuralHashPrinterPassOptions, "detailed;call-target-ignored") // 打印结构哈希分析结果,支持详细和忽略调用目标选项
CGSCC_ANALYSIS("no-op-cgscc", NoOpCGSCCAnalysis()) // CGSCC 级别空操作分析,占位用
CGSCC_ANALYSIS("fam-proxy", FunctionAnalysisManagerCGSCCProxy()) // 在 CGSCC 管道中代理 FAM 分析结果
CGSCC_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC)) // 插装 CGSCC 级别的 Pass 运行时数据采集
CGSCC_PASS("argpromotion", ArgumentPromotionPass()) // 将函数内部可替换参数提升到寄存器以减少内存访问
CGSCC_PASS("attributor-cgscc", AttributorCGSCCPass()) // 在 CGSCC 级别运行属性推导
CGSCC_PASS("attributor-light-cgscc", AttributorLightCGSCCPass()) // 轻量级 CGSCC 属性推导
CGSCC_PASS("invalidate<all>", InvalidateAllAnalysesPass()) // 使 CGSCC 级别所有分析结果失效
CGSCC_PASS("no-op-cgscc", NoOpCGSCCPass()) // CGSCC 级别空操作 Pass
CGSCC_PASS("openmp-opt-cgscc", OpenMPOptCGSCCPass()) // 在 CGSCC 管道中优化 OpenMP 代码
CGSCC_PASS("coro-annotation-elide", CoroAnnotationElidePass()) // 消除协程注释以简化 CoroSplit 分析
CGSCC_PASS_WITH_PARAMS("coro-split", "CoroSplitPass", [](bool OptimizeFrame){return CoroSplitPass(OptimizeFrame);}, parseCoroSplitPassOptions, "reuse-storage") // 分裂协程帧,可重用存储选项
CGSCC_PASS_WITH_PARAMS("function-attrs", "PostOrderFunctionAttrsPass", [](bool SkipNonRecursive){return PostOrderFunctionAttrsPass(SkipNonRecursive);}, parsePostOrderFunctionAttrsPassOptions, "skip-non-recursive-function-attrs") // CGSCC 级别后序推断函数属性,可跳过非递归函数
CGSCC_PASS_WITH_PARAMS("inline", "InlinerPass", [](bool OnlyMandatory){return InlinerPass(OnlyMandatory);}, parseInlinerPassOptions, "only-mandatory") // CGSCC 级别仅内联强制标记的调用
FUNCTION_ANALYSIS("aa", AAManager()) // 构建和管理别名分析,检测指针可能指向的内存区域
FUNCTION_ANALYSIS("access-info", LoopAccessAnalysis()) // 分析循环中内存访问模式,支持安全优化
FUNCTION_ANALYSIS("assumptions", AssumptionAnalysis()) // 收集并利用假设条件以驱动优化决策
FUNCTION_ANALYSIS("bb-sections-profile-reader", BasicBlockSectionsProfileReaderAnalysis(TM)) // 从分段配置文件读取基本块执行频率信息
FUNCTION_ANALYSIS("block-freq", BlockFrequencyAnalysis()) // 基于配置或分析推断基本块执行频率
FUNCTION_ANALYSIS("branch-prob", BranchProbabilityAnalysis()) // 估算分支概率以辅助代码布局优化
FUNCTION_ANALYSIS("cycles", CycleAnalysis()) // 分析依赖图中的循环,以识别并行化机会
FUNCTION_ANALYSIS("da", DependenceAnalysis()) // 检测内存访问依赖关系,支持循环并行化和向量化
FUNCTION_ANALYSIS("debug-ata", DebugAssignmentTrackingAnalysis()) // 跟踪变量赋值以调试和分析数据流
FUNCTION_ANALYSIS("demanded-bits", DemandedBitsAnalysis()) // 识别实际使用的值位,支持位级别优化
FUNCTION_ANALYSIS("domfrontier", DominanceFrontierAnalysis()) // 构建支配边界,用于 SSA 重构和优化
FUNCTION_ANALYSIS("domtree", DominatorTreeAnalysis()) // 构建支配树,以便快速查询支配关系
FUNCTION_ANALYSIS("ephemerals", EphemeralValuesAnalysis()) // 分析短生命周期值,用于消除不必要的存储
FUNCTION_ANALYSIS("func-properties", FunctionPropertiesAnalysis()) // 推断函数属性(如无副作用、纯函数等)
FUNCTION_ANALYSIS("machine-function-info", MachineFunctionAnalysis(TM)) // 收集机器级函数信息,用于后端优化
FUNCTION_ANALYSIS("gc-function", GCFunctionAnalysis()) // 分析垃圾回收相关函数调用模式
FUNCTION_ANALYSIS("inliner-size-estimator", InlineSizeEstimatorAnalysis()) // 估算内联后代码规模,辅助内联决策
FUNCTION_ANALYSIS("last-run-tracking", LastRunTrackingAnalysis()) // 跟踪上次 Pass 运行状态以支持增量优化
FUNCTION_ANALYSIS("lazy-value-info", LazyValueAnalysis()) // 延迟评估值,以减少不必要的计算
FUNCTION_ANALYSIS("loops", LoopAnalysis()) // 检测并分类循环,支持后续循环优化
FUNCTION_ANALYSIS("memdep", MemoryDependenceAnalysis()) // 分析内存依赖,支持调度和并行优化
FUNCTION_ANALYSIS("memoryssa", MemorySSAAnalysis()) // 构建 MemorySSA,以便精确跟踪内存定义与使用
FUNCTION_ANALYSIS("no-op-function", NoOpFunctionAnalysis()) // 空操作分析,占位用
FUNCTION_ANALYSIS("opt-remark-emit", OptimizationRemarkEmitterAnalysis()) // 在优化过程中生成诊断报告
FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC)) // 插装函数级 Pass 运行统计采集
FUNCTION_ANALYSIS("phi-values", PhiValuesAnalysis()) // 分析 φ 节点的值域,用于常量传播
FUNCTION_ANALYSIS("postdomtree", PostDominatorTreeAnalysis()) // 构建后支配树,用于控制依赖分析
FUNCTION_ANALYSIS("regions", RegionInfoAnalysis()) // 分析代码区域结构,支持大范围代码布局优化
FUNCTION_ANALYSIS("scalar-evolution", ScalarEvolutionAnalysis()) // 对循环中的算术和指针进程建模
FUNCTION_ANALYSIS("should-not-run-function-passes", ShouldNotRunFunctionPassesAnalysis()) // 判断哪些函数 Pass 应跳过
FUNCTION_ANALYSIS("should-run-extra-vector-passes", ShouldRunExtraVectorPasses()) // 决定哪些函数需要额外向量化 Pass
FUNCTION_ANALYSIS("ssp-layout", SSPLayoutAnalysis()) // 分析堆栈保护布局以插装安全检查
FUNCTION_ANALYSIS("stack-safety-local", StackSafetyAnalysis()) // 本地函数级栈安全分析,检测潜在溢出
FUNCTION_ANALYSIS("target-ir", TM ? TM->getTargetIRAnalysis() : TargetIRAnalysis()) // 获取目标架构的 IR 分析接口
FUNCTION_ANALYSIS("target-lib-info", TargetLibraryAnalysis()) // 提供标准库函数的信息以支持内联和优化
FUNCTION_ANALYSIS("uniformity", UniformityInfoAnalysis()) // 分析值在不同线程或向量元素间的一致性
FUNCTION_ANALYSIS("verify", VerifierAnalysis()) // 验证函数级 IR 的合法性和一致性
FUNCTION_ALIAS_ANALYSIS("basic-aa", BasicAA()) // 基础别名分析,快速检测简单指针别名情况
FUNCTION_ALIAS_ANALYSIS("objc-arc-aa", objcarc::ObjCARCAA()) // 针对 Objective-C ARC 的别名分析
FUNCTION_ALIAS_ANALYSIS("scev-aa", SCEVAA()) // 基于标量演化(SCEV)的别名分析
FUNCTION_ALIAS_ANALYSIS("scoped-noalias-aa", ScopedNoAliasAA()) // 在特定作用域内进行无别名假设分析
FUNCTION_ALIAS_ANALYSIS("tbaa", TypeBasedAA()) // 基于类型信息的别名分析,利用类型不变性消除别名
FUNCTION_PASS("aa-eval", AAEvaluator()) // 评估别名分析结果,用于后续优化决策
FUNCTION_PASS("adce", ADCEPass()) // 先进死代码删除(Aggressive DCE),移除尽可能多的无用代码
FUNCTION_PASS("add-discriminators", AddDiscriminatorsPass()) // 在指令中添加调试鉴别器,改进混淆和剖析映射
FUNCTION_PASS("aggressive-instcombine", AggressiveInstCombinePass()) // 更积极地合并和简化指令
FUNCTION_PASS("alignment-from-assumptions", AlignmentFromAssumptionsPass()) // 根据假设推断并应用更严格的对齐
FUNCTION_PASS("annotation-remarks", AnnotationRemarksPass()) // 发出关于注解使用的诊断备注
FUNCTION_PASS("assume-builder", AssumeBuilderPass()) // 构建假设条件表达式,支持条件优化
FUNCTION_PASS("assume-simplify", AssumeSimplifyPass()) // 简化假设条件,减少冗余判断
FUNCTION_PASS("atomic-expand", AtomicExpandPass(TM)) // 展开原子操作为平台指令序列
FUNCTION_PASS("bdce", BDCEPass()) // 基本块死代码删除(Block DCE),移除未执行块
FUNCTION_PASS("break-crit-edges", BreakCriticalEdgesPass()) // 拆分关键控制流边,以便 SSA 转换
FUNCTION_PASS("callbr-prepare", CallBrPreparePass()) // 为调用/分支混合指令准备分析结构
FUNCTION_PASS("callsite-splitting", CallSiteSplittingPass()) // 拆分多调用站点以启用不同优化策略
FUNCTION_PASS("chr", ControlHeightReductionPass()) // 降低控制流高度,简化嵌套分支
FUNCTION_PASS("codegenprepare", CodeGenPreparePass(TM)) // 预处理 IR 以满足后端代码生成要求
FUNCTION_PASS("complex-deinterleaving", ComplexDeinterleavingPass(TM)) // 对复杂交错访问执行反交错处理
FUNCTION_PASS("consthoist", ConstantHoistingPass()) // 将循环或条件内的常量提升到外部
FUNCTION_PASS("constraint-elimination", ConstraintEliminationPass()) // 消除冗余约束条件
FUNCTION_PASS("coro-elide", CoroElidePass()) // 在协程转换中消除无用中间状态
FUNCTION_PASS("correlated-propagation", CorrelatedValuePropagationPass()) // 基于相关性传播常量
FUNCTION_PASS("count-visits", CountVisitsPass()) // 插装基本块访问计数,用于分析或 Profile
FUNCTION_PASS("dce", DCEPass()) // 标准死代码删除
FUNCTION_PASS("declare-to-assign", llvm::AssignmentTrackingPass()) // 跟踪变量赋值,替换声明为赋值链
FUNCTION_PASS("dfa-jump-threading", DFAJumpThreadingPass()) // 数据流驱动的跳转合并,优化分支可达性
FUNCTION_PASS("div-rem-pairs", DivRemPairsPass()) // 合并除法和取余对以减少重复计算
FUNCTION_PASS("dot-cfg", CFGPrinterPass()) // 将控制流图输出为 DOT 格式
FUNCTION_PASS("dot-cfg-only", CFGOnlyPrinterPass()) // 仅输出 CFG,不生成分析
FUNCTION_PASS("dot-dom", DomPrinter()) // 将支配树输出为 DOT 格式
FUNCTION_PASS("dot-dom-only", DomOnlyPrinter()) // 仅输出支配树,不生成分析
FUNCTION_PASS("dot-post-dom", PostDomPrinter()) // 将后支配树输出为 DOT
FUNCTION_PASS("dot-post-dom-only", PostDomOnlyPrinter()) // 仅输出后支配树
FUNCTION_PASS("dse", DSEPass()) // 删除冗余存储和加载(Dead Store Elimination)
FUNCTION_PASS("dwarf-eh-prepare", DwarfEHPreparePass(TM)) // 为 DWARF 异常处理生成辅助结构
FUNCTION_PASS("expand-large-div-rem", ExpandLargeDivRemPass(TM)) // 将大型除法/取余指令展开为循环或调用
FUNCTION_PASS("expand-fp", ExpandFpPass(TM)) // 展开浮点操作以满足目标架构要求
FUNCTION_PASS("expand-memcmp", ExpandMemCmpPass(TM)) // 将 memcmp 调用展开为字节比较循环
FUNCTION_PASS("extra-vector-passes", ExtraFunctionPassManager<ShouldRunExtraVectorPasses>()) // 对标记的函数执行额外向量化 Pass
FUNCTION_PASS("fix-irreducible", FixIrreduciblePass()) // 转换不可约循环结构为可约
FUNCTION_PASS("flatten-cfg", FlattenCFGPass()) // 将多分支结构扁平化以简化分析
FUNCTION_PASS("float2int", Float2IntPass()) // 将浮点 to 整数转换指令标准化
FUNCTION_PASS("gc-lowering", GCLoweringPass()) // 将垃圾回收相关调用转换为显式状态点
FUNCTION_PASS("guard-widening", GuardWideningPass()) // 扩宽守护检查以减少分支
FUNCTION_PASS("gvn-hoist", GVNHoistPass()) // 将公共子表达式提升出循环或分支
FUNCTION_PASS("gvn-sink", GVNSinkPass()) // 将不常用计算下沉到分支内部
FUNCTION_PASS("helloworld", HelloWorldPass()) // 示例 Pass,打印“Hello World”
FUNCTION_PASS("indirectbr-expand", IndirectBrExpandPass(TM)) // 展开 indirectbr 指令为 switch 或跳表
FUNCTION_PASS("infer-address-spaces", InferAddressSpacesPass()) // 推断指针地址空间属性
FUNCTION_PASS("infer-alignment", InferAlignmentPass()) // 推断并应用内存对齐属性
FUNCTION_PASS("inject-tli-mappings", InjectTLIMappings()) // 注入目标特定映射信息,支持目标集成
FUNCTION_PASS("instcount", InstCountPass()) // 统计指令数量和类型分布
FUNCTION_PASS("instnamer", InstructionNamerPass()) // 为指令生成可读名称,辅助调试
FUNCTION_PASS("instsimplify", InstSimplifyPass()) // 简化冰山浮点和整数指令
FUNCTION_PASS("interleaved-access", InterleavedAccessPass(TM)) // 将内存交错访问转换为标准访问
FUNCTION_PASS("interleaved-load-combine", InterleavedLoadCombinePass(TM)) // 合并交错加载为宽加载
FUNCTION_PASS("invalidate<all>", InvalidateAllAnalysesPass()) // 使所有函数级分析失效
FUNCTION_PASS("irce", IRCEPass()) // 交互式冗余计算消除(IR-level CSE)
FUNCTION_PASS("jump-threading", JumpThreadingPass()) // 进行跳转穿线以简化分支
FUNCTION_PASS("jump-table-to-switch", JumpTableToSwitchPass()) // 将跳表转换为 switch 语句
FUNCTION_PASS("kcfi", KCFIPass()) // 插装 KCFI 控制流完整性检查
FUNCTION_PASS("kernel-info", KernelInfoPrinter(TM)) // 打印内核特定信息
FUNCTION_PASS("lcssa", LCSSAPass()) // 将循环退出块上的 PHI 转换为 LCSSA 形式
FUNCTION_PASS("libcalls-shrinkwrap", LibCallsShrinkWrapPass()) // 缩减库调用保护代码路径
FUNCTION_PASS("load-store-vectorizer", LoadStoreVectorizerPass()) // 向量化串行 load/store
FUNCTION_PASS("loop-data-prefetch", LoopDataPrefetchPass()) // 在循环中插装数据预取指令
FUNCTION_PASS("loop-distribute", LoopDistributePass()) // 将循环分布到多个独立循环中
FUNCTION_PASS("loop-fusion", LoopFusePass()) // 合并相邻循环以减少循环开销
FUNCTION_PASS("loop-load-elim", LoopLoadEliminationPass()) // 消除循环内冗余加载
FUNCTION_PASS("loop-simplify", LoopSimplifyPass()) // 将循环标准化为单入口单出口形式
FUNCTION_PASS("loop-sink", LoopSinkPass()) // 将不常用计算下沉
FUNCTION_PASS("loop-versioning", LoopVersioningPass()) // 对循环进行版本化以消除边界检查
FUNCTION_PASS("lower-atomic", LowerAtomicPass()) // 将原子指令降级为库调用或内联序列
FUNCTION_PASS("lower-constant-intrinsics", LowerConstantIntrinsicsPass()) // 将常量内建函数展开为常规 IR
FUNCTION_PASS("lower-expect", LowerExpectIntrinsicPass()) // 将 expect 内建函数转换为分支预测提示
FUNCTION_PASS("lower-guard-intrinsic", LowerGuardIntrinsicPass()) // 将 guard 内建函数转换为条件跳转
FUNCTION_PASS("lower-invoke", LowerInvokePass()) // 将 invoke 指令转换为普通调用+异常处理
FUNCTION_PASS("lower-switch", LowerSwitchPass()) // 将 switch 指令转换为跳表或二分查找
FUNCTION_PASS("lower-widenable-condition", LowerWidenableConditionPass()) // 将可扩展条件转换为动态检查
FUNCTION_PASS("make-guards-explicit", MakeGuardsExplicitPass()) // 将隐式守护条件显式化,便于后续优化
FUNCTION_PASS("mem2reg", PromotePass()) // 将内存分配的局部变量提升到寄存器 (Mem2Reg)
FUNCTION_PASS("memcpyopt", MemCpyOptPass()) // 优化 memcpy 调用,合并或移除冗余内存复制
FUNCTION_PASS("memprof", MemProfilerPass()) // 插装内存探测器,以收集内存访问性能数据
FUNCTION_PASS("mergeicmps", MergeICmpsPass()) // 合并相邻的相同 icmp 比较以减少指令
FUNCTION_PASS("mergereturn", UnifyFunctionExitNodesPass()) // 将多个函数返回点合并为单一出口
FUNCTION_PASS("move-auto-init", MoveAutoInitPass()) // 将自动变量初始化代码移动到更优位置
FUNCTION_PASS("nary-reassociate", NaryReassociatePass()) // 对多元加减运算重新关联以增强常量传播
FUNCTION_PASS("newgvn", NewGVNPass()) // 执行新版全局值编号 (GVN) 优化,消除公共子表达式
FUNCTION_PASS("no-op-function", NoOpFunctionPass()) // 空操作函数级 Pass,占位不做变换
FUNCTION_PASS("objc-arc", ObjCARCOptPass()) // Objective-C ARC 自动引用计数优化
FUNCTION_PASS("objc-arc-contract", ObjCARCContractPass()) // ARC 优化中合并 retain/release 对
FUNCTION_PASS("objc-arc-expand", ObjCARCExpandPass()) // 将 ARC 内建操作展开为显式调用
FUNCTION_PASS("pa-eval", PAEvalPass()) // 对指令进行预测分析,以支持分支预测优化
FUNCTION_PASS("partially-inline-libcalls", PartiallyInlineLibCallsPass()) // 将部分库函数内联以减少调用开销
FUNCTION_PASS("pgo-memop-opt", PGOMemOPSizeOpt()) // 基于 PGO 数据优化内存操作大小
FUNCTION_PASS("place-safepoints", PlaceSafepointsPass()) // 插入垃圾回收安全点
FUNCTION_PASS("print", PrintFunctionPass(errs())) // 打印函数级 IR 到 stderr
FUNCTION_PASS("print-alias-sets", AliasSetsPrinterPass(errs())) // 打印函数别名集信息到 stderr
FUNCTION_PASS("print-cfg-sccs", CFGSCCPrinterPass(errs())) // 打印函数内 SCC CFG 到 stderr
FUNCTION_PASS("print-memderefs", MemDerefPrinterPass(errs())) // 打印可能的内存解引用点
FUNCTION_PASS("print-mustexecute", MustExecutePrinterPass(errs())) // 打印必须执行的指令上下文
FUNCTION_PASS("print-predicateinfo", PredicateInfoPrinterPass(errs())) // 打印谓词分析信息
FUNCTION_PASS("print\<access-info>", LoopAccessInfoPrinterPass(errs())) // 打印循环访问信息
FUNCTION_PASS("print\<assumptions>", AssumptionPrinterPass(errs())) // 打印假设分析结果
FUNCTION_PASS("print\<block-freq>", BlockFrequencyPrinterPass(errs())) // 打印基本块频率
FUNCTION_PASS("print\<branch-prob>", BranchProbabilityPrinterPass(errs())) // 打印分支概率
FUNCTION_PASS("print\<cost-model>", CostModelPrinterPass(errs())) // 打印成本模型估算
FUNCTION_PASS("print\<cycles>", CycleInfoPrinterPass(errs())) // 打印循环依赖分析信息
FUNCTION_PASS("print\<da>", DependenceAnalysisPrinterPass(errs())) // 打印依赖分析结果
FUNCTION_PASS("print\<debug-ata>", DebugAssignmentTrackingPrinterPass(errs())) // 打印赋值跟踪信息
FUNCTION_PASS("print\<delinearization>", DelinearizationPrinterPass(errs())) // 打印指针去线性化信息
FUNCTION_PASS("print\<demanded-bits>", DemandedBitsPrinterPass(errs())) // 打印位需求分析结果
FUNCTION_PASS("print\<domfrontier>", DominanceFrontierPrinterPass(errs())) // 打印支配边界
FUNCTION_PASS("print\<domtree>", DominatorTreePrinterPass(errs())) // 打印支配树
FUNCTION_PASS("print\<func-properties>", FunctionPropertiesPrinterPass(errs())) // 打印函数属性分析结果
FUNCTION_PASS("print\<inline-cost>", InlineCostAnnotationPrinterPass(errs())) // 打印内联成本注解
FUNCTION_PASS("print\<inliner-size-estimator>", InlineSizeEstimatorAnalysisPrinterPass(errs())) // 打印内联大小估算
FUNCTION_PASS("print\<lazy-value-info>", LazyValueInfoPrinterPass(errs())) // 打印延迟值分析信息
FUNCTION_PASS("print\<loops>", LoopPrinterPass(errs())) // 打印循环结构信息
FUNCTION_PASS("print\<memoryssa-walker>", MemorySSAWalkerPrinterPass(errs())) // 打印 MemorySSA 遍历器信息
FUNCTION_PASS("print\<phi-values>", PhiValuesPrinterPass(errs())) // 打印 φ 节点值信息
FUNCTION_PASS("print\<postdomtree>", PostDominatorTreePrinterPass(errs())) // 打印后支配树
FUNCTION_PASS("print\<regions>", RegionInfoPrinterPass(errs())) // 打印区域信息
FUNCTION_PASS("print\<scalar-evolution>", ScalarEvolutionPrinterPass(errs())) // 打印标量演化分析结果
FUNCTION_PASS("print\<stack-safety-local>", StackSafetyPrinterPass(errs())) // 打印栈安全本地分析结果
FUNCTION_PASS("print\<uniformity>", UniformityInfoPrinterPass(errs())) // 打印一致性分析信息
FUNCTION_PASS("reassociate", ReassociatePass()) // 对加减乘除表达式重新关联
FUNCTION_PASS("redundant-dbg-inst-elim", RedundantDbgInstEliminationPass()) // 删除冗余调试指令
FUNCTION_PASS("reg2mem", RegToMemPass()) // 将寄存器变量重新映射回内存
FUNCTION_PASS("safe-stack", SafeStackPass(TM)) // 插装安全栈以防止栈溢出
FUNCTION_PASS("sandbox-vectorizer", SandboxVectorizerPass()) // 在沙箱模式下向量化内存访问
FUNCTION_PASS("scalarize-masked-mem-intrin", ScalarizeMaskedMemIntrinPass(errs())) // 将掩码内存内建展开为标量操作
FUNCTION_PASS("sccp", SCCPPass()) // 稀疏条件常量传播 (SCCP)
FUNCTION_PASS("select-optimize", SelectOptimizePass(TM)) // 优化 select 内建指令
FUNCTION_PASS("separate-const-offset-from-gep", SeparateConstOffsetFromGEPPass()) // 从 GEP 提取常量偏移
FUNCTION_PASS("sink", SinkingPass()) // 将计算下沉到更冷的分支
FUNCTION_PASS("sjlj-eh-prepare", SjLjEHPreparePass(TM)) // 为 setjmp/longjmp 异常处理准备辅助结构
FUNCTION_PASS("slp-vectorizer", SLPVectorizerPass()) // 基于超块的向量化
FUNCTION_PASS("slsr", StraightLineStrengthReducePass()) // 直线代码强度归约
FUNCTION_PASS("stack-protector", StackProtectorPass(TM)) // 插装栈保护以检测溢出
FUNCTION_PASS("strip-gc-relocates", StripGCRelocates()) // 删除垃圾回收重定位指令
FUNCTION_PASS("tailcallelim", TailCallElimPass()) // 消除尾调用并转为跳转
FUNCTION_PASS("transform-warning", WarnMissedTransformationsPass()) // 对未应用的变换发出警告
FUNCTION_PASS("trigger-crash-function", TriggerCrashFunctionPass()) // 强制在函数中引发崩溃以测试管道
FUNCTION_PASS("trigger-verifier-error", TriggerVerifierErrorPass()) // 强制触发验证器错误
FUNCTION_PASS("tsan", ThreadSanitizerPass()) // 插装线程 Sanitizer 以检测数据竞争
FUNCTION_PASS("typepromotion", TypePromotionPass(TM)) // 将小整数类型提升为更大类型以优化指令
FUNCTION_PASS("unify-loop-exits", UnifyLoopExitsPass()) // 合并循环退出点
FUNCTION_PASS("vector-combine", VectorCombinePass()) // 合并向量操作以提高利用率
FUNCTION_PASS("verify", VerifierPass()) // 验证函数级 IR 合法性
FUNCTION_PASS("verify<cycles>", CycleInfoVerifierPass()) // 验证循环依赖分析正确性
FUNCTION_PASS("verify<domtree>", DominatorTreeVerifierPass()) // 验证支配树正确性
FUNCTION_PASS("verify<loops>", LoopVerifierPass()) // 验证循环分析正确性
FUNCTION_PASS("verify<memoryssa>", MemorySSAVerifierPass()) // 验证 MemorySSA 正确性
FUNCTION_PASS("verify<regions>", RegionInfoVerifierPass()) // 验证区域信息正确性
FUNCTION_PASS("verify<safepoint-ir>", SafepointIRVerifierPass()) // 验证安全点 IR 正确性
FUNCTION_PASS("verify<scalar-evolution>", ScalarEvolutionVerifierPass()) // 验证标量演化分析正确性
FUNCTION_PASS("view-cfg", CFGViewerPass()) // 图形化展示函数内控制流图
FUNCTION_PASS("view-cfg-only", CFGOnlyViewerPass()) // 仅图形化展示 CFG
FUNCTION_PASS("view-dom", DomViewer()) // 图形化展示支配树
FUNCTION_PASS("view-dom-only", DomOnlyViewer()) // 仅图形化展示支配树
FUNCTION_PASS("view-post-dom", PostDomViewer()) // 图形化展示后支配树
FUNCTION_PASS("view-post-dom-only", PostDomOnlyViewer()) // 仅图形化展示后支配树
FUNCTION_PASS("wasm-eh-prepare", WasmEHPreparePass()) // 为 WebAssembly 异常处理生成辅助结构
FUNCTION_PASS_WITH_PARAMS("cfguard", "CFGuardPass", [](CFGuardPass::Mechanism M){return CFGuardPass(M);}, parseCFGuardPassOptions, "check;dispatch") // 插装 Control-Flow Guard 检查与跳转保护
FUNCTION_PASS_WITH_PARAMS("early-cse", "EarlyCSEPass", [](bool UseMemorySSA){return EarlyCSEPass(UseMemorySSA);}, parseEarlyCSEPassOptions, "memssa") // 早期公共子表达式消除,可选 MemorySSA 支持
FUNCTION_PASS_WITH_PARAMS("ee-instrument", "EntryExitInstrumenterPass", [](bool PostInlining){return EntryExitInstrumenterPass(PostInlining);}, parseEntryExitInstrumenterPassOptions, "post-inline") // 插装函数入口/出口钩子,可选后内联模式
FUNCTION_PASS_WITH_PARAMS("function-simplification", "", [this](OptimizationLevel OL){return buildFunctionSimplificationPipeline(OL, ThinOrFullLTOPhase::None);}, parseFunctionSimplificationPipelineOptions, "O1;O2;O3;Os;Oz") // 构建函数级简化流水线,支持不同优化级别
FUNCTION_PASS_WITH_PARAMS("gvn", "GVNPass", [](GVNOptions Opts){return GVNPass(Opts);}, parseGVNOptions, "no-pre;pre;no-load-pre;load-pre;…") // 全局值编号消除公共子表达式,选项控制预合并与 MemorySSA
FUNCTION_PASS_WITH_PARAMS("hardware-loops", "HardwareLoopsPass", [](HardwareLoopOptions Opts){return HardwareLoopsPass(Opts);}, parseHardwareLoopOptions, "force-hardware-loops;…") // 将循环转换为硬件循环指令,可强制、嵌套与位宽选项
FUNCTION_PASS_WITH_PARAMS("instcombine", "InstCombinePass", [](InstCombineOptions Opts){return InstCombinePass(Opts);}, parseInstCombineOptions, "no-use-loop-info;…") // 指令合并与常见模式简化,控制循环信息与 fixpoint 验证
FUNCTION_PASS_WITH_PARAMS("lint", "LintPass", [](bool AbortOnError){return LintPass(AbortOnError);}, parseLintOptions, "abort-on-error") // 静态“代码审查”检查,遇错可中止
FUNCTION_PASS_WITH_PARAMS("loop-unroll", "LoopUnrollPass", [](LoopUnrollOptions Opts){return LoopUnrollPass(Opts);}, parseLoopUnrollOptions, "O0;O1;O2;O3;full-unroll-max=N;…") // 循环展开,支持部分/全展开与剥离策略
FUNCTION_PASS_WITH_PARAMS("loop-vectorize", "LoopVectorizePass", [](LoopVectorizeOptions Opts){return LoopVectorizePass(Opts);}, parseLoopVectorizeOptions, "no-interleave-forced-only;…") // 循环向量化,强制/排除交错与向量化策略
FUNCTION_PASS_WITH_PARAMS("lower-allow-check", "LowerAllowCheckPass", [](LowerAllowCheckPass::Options Opts){return LowerAllowCheckPass(Opts);}, parseLowerAllowCheckPassOptions, "") // 将允许检查谓词内建降低为显式条件
FUNCTION_PASS_WITH_PARAMS("lower-matrix-intrinsics", "LowerMatrixIntrinsicsPass", [](bool Minimal){return LowerMatrixIntrinsicsPass(Minimal);}, parseLowerMatrixIntrinsicsPassOptions, "minimal") // 将矩阵内建展开为循环或标量运算,可选最小化策略
FUNCTION_PASS_WITH_PARAMS("normalize", "IRNormalizerPass", [](IRNormalizerOptions Options){return IRNormalizerPass(Options);}, parseIRNormalizerPassOptions, "no-preserve-order;preserve-order;…") // 对 IR 做标准化重排,控制操作顺序与重命名
FUNCTION_PASS_WITH_PARAMS("mldst-motion", "MergedLoadStoreMotionPass", [](MergedLoadStoreMotionOptions Opts){return MergedLoadStoreMotionPass(Opts);}, parseMergedLoadStoreMotionOptions, "no-split-footer-bb;split-footer-bb") // 合并迁移加载/存储,优化访存合并与 BB 尾部分割
FUNCTION_PASS_WITH_PARAMS("print\<da>", "DependenceAnalysisPrinterPass", [](bool NormalizeResults){return DependenceAnalysisPrinterPass(errs(), NormalizeResults);}, parseDependenceAnalysisPrinterOptions, "normalized-results") // 打印依赖分析结果,可选归一化输出
FUNCTION_PASS_WITH_PARAMS("print\<memoryssa>", "MemorySSAPrinterPass", [](bool NoEnsureOptimizedUses){return MemorySSAPrinterPass(errs(), !NoEnsureOptimizedUses);}, parseMemorySSAPrinterPassOptions, "no-ensure-optimized-uses") // 打印 MemorySSA 结构,可选跳过优化检查
FUNCTION_PASS_WITH_PARAMS("print\<stack-lifetime>", "StackLifetimePrinterPass", [](StackLifetime::LivenessType Type){return StackLifetimePrinterPass(errs(), Type);}, parseStackLifetimeOptions, "may;must") // 打印栈生命周期信息,选择 may/must 分析
FUNCTION_PASS_WITH_PARAMS("scalarizer", "ScalarizerPass", [](ScalarizerPassOptions Opts){return ScalarizerPass(Opts);}, parseScalarizerOptions, "load-store;no-load-store;…") // 将矢量/内建内存操作标量化,细化 load/store 与插入/extract
FUNCTION_PASS_WITH_PARAMS("separate-const-offset-from-gep", "SeparateConstOffsetFromGEPPass", [](bool LowerGEP){return SeparateConstOffsetFromGEPPass(LowerGEP);}, parseSeparateConstOffsetFromGEPPassOptions, "lower-gep") // 从 GEP 指令中分离常量偏移,可降低 GEP 复杂度
FUNCTION_PASS_WITH_PARAMS("simplifycfg", "SimplifyCFGPass", [](SimplifyCFGOptions Opts){return SimplifyCFGPass(Opts);}, parseSimplifyCFGOptions, "no-forward-switch-cond;…") // 简化控制流图,支持 switch 优化、循环保留与公共指令提升/下沉
FUNCTION_PASS_WITH_PARAMS("speculative-execution", "SpeculativeExecutionPass", [](bool OnlyIfDivergentTarget){return SpeculativeExecutionPass(OnlyIfDivergentTarget);}, parseSpeculativeExecutionPassOptions, "only-if-divergent-target") // 插装或重写分支以进行投机执行,可选仅针对分歧目标
FUNCTION_PASS_WITH_PARAMS("sroa", "SROAPass", [](SROAOptions PreserveCFG){return SROAPass(PreserveCFG);}, parseSROAOptions, "preserve-cfg;modify-cfg") // 聚合类型标量替换,将 struct/array 拆为标量以支持 Mem2Reg
FUNCTION_PASS_WITH_PARAMS("structurizecfg", "StructurizeCFG", [](bool SkipUniformRegions){return StructurizeCFGPass(SkipUniformRegions);}, parseStructurizeCFGPassOptions, "skip-uniform-regions") // 将 CFG 转换为结构化控制流,以支持 GPU/Shader 后端
FUNCTION_PASS_WITH_PARAMS("win-eh-prepare", "WinEHPreparePass", [](bool DemoteCatchSwitchPHIOnly){return WinEHPreparePass(DemoteCatchSwitchPHIOnly);}, parseWinEHPrepareOptions, "demote-catchswitch-only") // 为 Windows 异常处理生成 PHI 和辅助块,可降级仅捕获 switch PHI
FUNCTION_PASS_WITH_PARAMS("bounds-checking", "BoundsCheckingPass", [](BoundsCheckingPass::Options Options){return BoundsCheckingPass(Options);}, parseBoundsCheckingOptions, "trap") // 插装数组/指针越界检查,可选 trap 中断行为
LOOPNEST_PASS("loop-flatten", LoopFlattenPass()) // 展平嵌套循环,将多层循环转换为单层
LOOPNEST_PASS("loop-interchange", LoopInterchangePass()) // 交换内外循环以改善数据局部性
LOOPNEST_PASS("loop-unroll-and-jam", LoopUnrollAndJamPass()) // 解卷循环并融合循环体以提高并行度
LOOPNEST_PASS("no-op-loopnest", NoOpLoopNestPass()) // 空操作 LoopNest Pass,占位测试
LOOP_ANALYSIS("ddg", DDGAnalysis()) // 构建循环数据依赖图(DDG)以分析依赖关系
LOOP_ANALYSIS("iv-users", IVUsersAnalysis()) // 分析归纳变量的使用情况以辅助变换
LOOP_ANALYSIS("no-op-loop", NoOpLoopAnalysis()) // 空操作 Loop Analysis,占位用
LOOP_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC)) // 插装循环级 Pass 运行统计
LOOP_ANALYSIS("should-run-extra-simple-loop-unswitch", ShouldRunExtraSimpleLoopUnswitch()) // 判断是否执行简单循环非交换优化
LOOP_PASS("canon-freeze", CanonicalizeFreezeInLoopsPass()) // 标准化循环中的 freeze 操作以简化优化
LOOP_PASS("dot-ddg", DDGDotPrinterPass()) // 将循环数据依赖图输出为 DOT 格式
LOOP_PASS("guard-widening", GuardWideningPass()) // 扩宽循环守护条件以减少分支
LOOP_PASS("extra-simple-loop-unswitch-passes", ExtraLoopPassManager<ShouldRunExtraSimpleLoopUnswitch>()) // 对可简单非交换的循环执行附加 Pass
LOOP_PASS("indvars", IndVarSimplifyPass()) // 归纳变量简化,标准化 IV 用法
LOOP_PASS("invalidate<all>", InvalidateAllAnalysesPass()) // 使所有循环级分析结果失效
LOOP_PASS("loop-bound-split", LoopBoundSplitPass()) // 按循环边界条件拆分循环以移除检查
LOOP_PASS("loop-deletion", LoopDeletionPass()) // 删除不执行或无效的循环
LOOP_PASS("loop-idiom", LoopIdiomRecognizePass()) // 识别并替换常见循环习语
LOOP_PASS("loop-idiom-vectorize", LoopIdiomVectorizePass()) // 将识别的习语向量化
LOOP_PASS("loop-instsimplify", LoopInstSimplifyPass()) // 在循环内简化指令
LOOP_PASS("loop-predication", LoopPredicationPass()) // 循环谓词化,移出条件分支
LOOP_PASS("loop-reduce", LoopStrengthReducePass()) // 循环强度归约,简化乘除为加法
LOOP_PASS("loop-term-fold", LoopTermFoldPass()) // 折叠循环终止条件表达式
LOOP_PASS("loop-simplifycfg", LoopSimplifyCFGPass()) // 将循环 CFG 标准化为单入口单出口
LOOP_PASS("loop-unroll-full", LoopFullUnrollPass()) // 对循环进行完全展开
LOOP_PASS("loop-versioning-licm", LoopVersioningLICMPass()) // 循环版本化,结合 LICM 消除边界检查
LOOP_PASS("no-op-loop", NoOpLoopPass()) // 空操作 Loop Pass,占位测试
LOOP_PASS("print", PrintLoopPass(errs())) // 打印循环信息到 stderr
LOOP_PASS("print\<ddg>", DDGAnalysisPrinterPass(errs())) // 打印循环数据依赖图分析结果
LOOP_PASS("print\<iv-users>", IVUsersPrinterPass(errs())) // 打印归纳变量使用情况
LOOP_PASS("print\<loop-cache-cost>", LoopCachePrinterPass(errs())) // 打印循环缓存成本估算
LOOP_PASS("print\<loopnest>", LoopNestPrinterPass(errs())) // 打印循环嵌套结构
LOOP_PASS_WITH_PARAMS("licm", "LICMPass", [](LICMOptions Params){return LICMPass(Params);}, parseLICMOptions, "allowspeculation") // 循环内存量化消除(LICM),可选投机执行
LOOP_PASS_WITH_PARAMS("lnicm", "LNICMPass", [](LICMOptions Params){return LNICMPass(Params);}, parseLICMOptions, "allowspeculation") // 延迟 LICM,待条件满足后再提升公共子表达式
LOOP_PASS_WITH_PARAMS("loop-rotate", "LoopRotatePass", [](std::pair<bool,bool> Params){return LoopRotatePass(Params.first, Params.second);}, parseLoopRotateOptions, "no-header-duplication;header-duplication;no-prepare-for-lto;prepare-for-lto") // 循环旋转,重排循环头部以优化分支和并行
LOOP_PASS_WITH_PARAMS("simple-loop-unswitch", "SimpleLoopUnswitchPass", [](std::pair<bool,bool> Params){return SimpleLoopUnswitchPass(Params.first, Params.second);}, parseLoopUnswitchOptions, "nontrivial;no-nontrivial;trivial;no-trivial") // 简单循环非交换,移出循环不变条件

附录 B-汇总表格

宏类型缩写Pass/Analysis 名称注释
MODULE_ANALYSIScallgraphCallGraphAnalysis构建和查询程序的调用图
MODULE_ANALYSIScollector-metadataCollectorMetadataAnalysis收集并管理自定义元数据
MODULE_ANALYSISctx-prof-analysisCtxProfAnalysis上下文敏感的 PG O(Profile-Guided Optimization)分析
MODULE_ANALYSISdxil-metadataDXILMetadataAnalysis解析和存储 DXIL(DirectX Intermediate Language)元数据
MODULE_ANALYSISdxil-resourcesDXILResourceAnalysis分析 DXIL 中的资源(纹理、缓冲区等)使用情况
MODULE_ANALYSISdxil-resource-typeDXILResourceTypeAnalysis推断和标记 DXIL 资源的类型信息
MODULE_ANALYSISinline-advisorInlineAdvisorAnalysis建议内联优化点,辅助 inliner 做决策
MODULE_ANALYSISir-similarityIRSimilarityAnalysis检测和聚类相似的 IR 代码片段
MODULE_ANALYSISlast-run-trackingLastRunTrackingAnalysis跟踪上次运行时的变更和执行情况
MODULE_ANALYSISlcgLazyCallGraphAnalysis延迟构建调用图,仅在需要时才生成节点/边
MODULE_ANALYSISmodule-summaryModuleSummaryIndexAnalysis为跨模块优化生成模块摘要索引
MODULE_ANALYSISno-op-moduleNoOpModuleAnalysis空操作分析,占位用,不做任何变换
MODULE_ANALYSISpass-instrumentationPassInstrumentationAnalysis为 Pass 插装探针,收集运行时统计
MODULE_ANALYSISprofile-summaryProfileSummaryAnalysis汇总 PG O 分析结果,生成整体概要
MODULE_ANALYSISreg-usagePhysicalRegisterUsageAnalysis分析物理寄存器的实际使用情况
MODULE_ANALYSISstack-safetyStackSafetyGlobalAnalysis全局栈安全分析,检测栈溢出风险
MODULE_ANALYSISverifyVerifierAnalysis验证 IR 的合法性和一致性
MODULE_ALIAS_ANALYSISglobals-aaGlobalsAA全局变量别名分析,识别不同全局变量间的别名关系
MODULE_PASSalways-inlineAlwaysInlinerPass强制将所有调用点内联被标记的函数
MODULE_PASSannotation2metadataAnnotation2MetadataPass将自定义注解转换成 IR 元数据
MODULE_PASSassign-guidAssignGUIDPass为 IR 指令分配全局唯一 ID(GUID)
MODULE_PASSattributorAttributorPass属性推导框架,用于发现和传播函数/调用约束
MODULE_PASSattributor-lightAttributorLightPass轻量级属性推导,仅执行快速检查
MODULE_PASScalled-value-propagationCalledValuePropagationPass传播已调用函数的返回值常量
MODULE_PASScanonicalize-aliasesCanonicalizeAliasesPass规范化别名,简化 bitcast/getelementptr
MODULE_PASScheck-debugifyNewPMCheckDebugifyPass检查并加入调试化信息,确保调试符号完整
MODULE_PASSconstmergeConstantMergePass合并相同常量的全局变量或常量表达式
MODULE_PASScoro-cleanupCoroCleanupPass清理协程生成的中间状态和标记
MODULE_PASScoro-earlyCoroEarlyPass提前识别协程开始/结束点,为后续优化做准备
MODULE_PASScross-dso-cfiCrossDSOCFIPass启用跨动态链接库的控制流完整性检查
MODULE_PASSctx-instr-genPGOInstrumentationGen生成上下文敏感的 PG O 插装指令
MODULE_PASSctx-prof-flattenPGOCtxProfFlatteningPass对上下文敏感的 PG O 插装数据执行展平,合并相同调用上下文的配置
MODULE_PASSctx-prof-flatten-prethinlinkPGOCtxProfFlatteningPass在 ThinLTO 链接前执行上下文敏感展平,以便后续跨模块 LTO 使用
MODULE_PASSnoinline-nonprevailingNoinlineNonPrevailing避免对非主导(non-prevailing)函数进行内联,以减少代码爆炸
MODULE_PASSdeadargelimDeadArgumentEliminationPass消除函数中未使用的参数,删除多余的入参
MODULE_PASSdebugifyNewPMDebugifyPass向 IR 中注入完整的调试信息,便于后续验证和调试
MODULE_PASSdfsanDataFlowSanitizerPass插装 DataFlowSanitizer 检测指针和数据流的安全性
MODULE_PASSdot-callgraphCallGraphDOTPrinterPass将调用图导出为 DOT 格式,便于用 Graphviz 可视化
MODULE_PASSdxil-upgradeDXILUpgradePass升级 DXIL IR 到最新规范,更新过时指令和元数据
MODULE_PASSelim-avail-externEliminateAvailableExternallyPass删除标记为 available_externally 的函数/全局变量,减小模块大小
MODULE_PASSextract-blocksBlockExtractorPass抽取指定基本块到新函数,支持代码分离和分析
MODULE_PASSexpand-variadicsExpandVariadicsPass将可变参数函数展开为固定参数形式(此处禁用,仅分析用途)
MODULE_PASSforceattrsForceFunctionAttrsPass强制根据函数实现添加或修改属性(如NoUnwind、ReadNone等)
MODULE_PASSfunction-importFunctionImportPass在跨模块优化中导入函数定义,实现内联和优化传递
MODULE_PASSglobal-merge-funcGlobalMergeFuncPass合并功能相同的全局函数,消除重复实现
MODULE_PASSglobaloptGlobalOptPass全局范围优化,包括常量传播、死代码删除、CFG 简化
MODULE_PASSglobalsplitGlobalSplitPass将全局变量拆分为热/冷区域,提高缓存局部性
MODULE_PASShipstdpar-interpose-allocHipStdParAllocationInterpositionPass对 HIP 标准并行分配调用插装拦截,用于分析或模拟
MODULE_PASShipstdpar-select-accelerator-codeHipStdParAcceleratorCodeSelectionPass根据目标加速器选择最优代码路径(比如 GPU vs CPU)
MODULE_PASShotcoldsplitHotColdSplittingPass将函数或基本块按热度拆分成热/冷部分,优化指令缓存
MODULE_PASSinferattrsInferFunctionAttrsPass基于函数体分析推断可用属性(如纯函数、无副作用等)
MODULE_PASSinliner-ml-advisor-releaseModuleInlinerWrapperPass使用机器学习模型建议内联,针对 Release 构建收集统计并执行内联
MODULE_PASSinliner-wrapperModuleInlinerWrapperPass通用模块内联包装器,根据参数动态决定内联行为
MODULE_PASSinliner-wrapper-no-mandatory-firstModuleInlinerWrapperPass模块内联包装器(不优先处理强制内联),优化裁剪内联顺序
MODULE_PASSinsert-gcov-profilingGCOVProfilerPass插装 GCOV 覆盖率分析点,生成运行时覆盖率数据
MODULE_PASSinstrprofInstrProfilingLoweringPass将 InstrumentationProfiler 插装调用下沉到 IR 中,生成测量钩子
MODULE_PASSctx-instr-lowerPGOCtxProfLoweringPass将上下文敏感 PG O 插装高层接口下沉为低级钩子
MODULE_PASSprint<ctx-prof-analysis>CtxProfAnalysisPrinterPass打印上下文敏感 PG O 分析结果到标准错误流
MODULE_PASSinvalidateInvalidateAllAnalysesPass在模块变更后使所有分析结果失效,确保数据一致性
MODULE_PASSiroutlinerIROutlinerPass将重复 IR 模式抽取为函数,提高代码重用性和紧凑性
MODULE_PASSjmc-instrumenterJMCInstrumenterPass插装 Just-My-Code 跟踪点,仅记录用户代码执行
MODULE_PASSlower-emutlsLowerEmuTLSPass将仿真 TLS 操作转换为显式内存访问,支持无本地 TLS 的目标
MODULE_PASSlower-global-dtorsLowerGlobalDtorsPass将全局析构函数列表转换为显式函数调用
MODULE_PASSlower-ifuncLowerIFuncPass将基于 GNU IFUNC 的可重定位函数解析转为直接调用
MODULE_PASSlowertypetestsLowerTypeTestsPass将类型测试(type tests)内建指令降级为显式检查
MODULE_PASSfatlto-cleanupFatLtoCleanup清理 FatLTO 中间产生的数据和标记,恢复模块基本状态
MODULE_PASSpgo-force-function-attrsPGOForceFunctionAttrsPass基于 PGO 冷调用分析,强制为函数添加冷/热属性
MODULE_PASSmemprof-context-disambiguationMemProfContextDisambiguation在 MemProf 中为不同调用上下文分离内存访问,消除歧义
MODULE_PASSmemprof-moduleModuleMemProfilerPass为模块插装内存访问探针,生成运行时追踪
MODULE_PASSmergefuncMergeFunctionsPass合并相似或等价函数,减少代码重复
MODULE_PASSmetarenamerMetaRenamerPass对 IR 元素(函数、变量)进行可读性重命名
MODULE_PASSmodule-inlineModuleInlinerPass模块级函数内联,执行常规内联转换
MODULE_PASSname-anon-globalsNameAnonGlobalPass为匿名全局符号生成唯一名称,便于调试和分析
MODULE_PASSno-op-moduleNoOpModulePass空操作 Pass,占位测试
MODULE_PASSnsanNumericalStabilitySanitizerPass插装检测数值计算稳定性问题
MODULE_PASSobjc-arc-apelimObjCARCAPElimPassObjective-C ARC 模式下消除不必要的自动引用计数调用
MODULE_PASSopenmp-optOpenMPOptPass针对 OpenMP 并行指令进行优化
MODULE_PASSopenmp-opt-postlinkOpenMPOptPass全链接后对 OpenMP 代码进行二次优化
MODULE_PASSpartial-inlinerPartialInlinerPass部分内联,仅内联小函数或满足阈值的函数
MODULE_PASSpgo-icall-promPGOIndirectCallPromotionPGO 基于探测数据将间接调用提升为直接调用
MODULE_PASSpgo-instr-genPGOInstrumentationGen生成 PGO 探针插装
MODULE_PASSpgo-instr-usePGOInstrumentationUse使用先前插装的 PGO 数据进行优化
MODULE_PASSpre-isel-intrinsic-loweringPreISelIntrinsicLoweringPass在选择指令前将内建函数降级为标准 IR
MODULE_PASSprintPrintModulePass打印模块 IR 到 stderr
MODULE_PASSprint-callgraphCallGraphPrinterPass打印调用图文本到 stderr
MODULE_PASSprint-callgraph-sccsCallGraphSCCsPrinterPass打印调用图强连通分量到 stderr
MODULE_PASSprint-ir-similarityIRSimilarityAnalysisPrinterPass打印 IR 相似度分组结果到 stderr
MODULE_PASSprint-lcgLazyCallGraphPrinterPass打印延迟调用图到 stderr
MODULE_PASSprint-lcg-dotLazyCallGraphDOTPrinterPass以 DOT 格式打印延迟调用图
MODULE_PASSprint-must-be-executed-contextsMustBeExecutedContextPrinterPass打印必定执行上下文分析结果到 stderr
MODULE_PASSprint-profile-summaryProfileSummaryPrinterPass打印 PGO 概要报告到 stderr
MODULE_PASSprint-stack-safetyStackSafetyGlobalPrinterPass打印栈安全分析结果到 stderr
MODULE_PASSprint<dxil-metadata>DXILMetadataAnalysisPrinterPass打印 DXIL 元数据分析结果到 stderr
MODULE_PASSprint<dxil-resources>DXILResourcePrinterPass打印 DXIL 资源分析结果到 stderr
MODULE_PASSprint<inline-advisor>InlineAdvisorAnalysisPrinterPass打印内联建议分析结果到 stderr
MODULE_PASSprint<module-debuginfo>ModuleDebugInfoPrinterPass打印模块调试信息到 stderr
MODULE_PASSprint<reg-usage>PhysicalRegisterUsageInfoPrinterPass打印物理寄存器使用信息到 stderr
MODULE_PASSpseudo-probeSampleProfileProbePass插装伪探针以支持低开销性能分析
MODULE_PASSpseudo-probe-updatePseudoProbeUpdatePass更新和合并伪探针信息
MODULE_PASSrecompute-globalsaaRecomputeGlobalsAAPass重新计算全局别名分析以反映最新 IR 改动
MODULE_PASSrel-lookup-table-converterRelLookupTableConverterPass转换相对查找表以优化运行时查找性能
MODULE_PASSrewrite-statepoints-for-gcRewriteStatepointsForGC重写 GC 状态点以支持精确垃圾回收
MODULE_PASSrewrite-symbolsRewriteSymbolPass重写符号名称或链接属性,支持虚拟化或混淆
MODULE_PASSrpo-function-attrsReversePostOrderFunctionAttrsPass按反后序遍历顺序推断函数属性以提升分析精度
MODULE_PASSrtsanRealtimeSanitizerPass插装实时 Sanitizer 以检测运行时错误
MODULE_PASSsample-profileSampleProfileLoaderPass加载采样分析配置并插装采样探针
MODULE_PASSsancov-moduleSanitizerCoveragePass插装 Sanitizer 覆盖率探针以收集执行路径覆盖信息
MODULE_PASSsanmd-moduleSanitizerBinaryMetadataPass生成二进制级别 Sanitizer 元数据
MODULE_PASSscc-oz-module-inlinerbuildInlinerPipeline构建针对 Oz 优化级别的 SCC 内联流水线
MODULE_PASSshadow-stack-gc-loweringShadowStackGCLoweringPass将 Shadow Stack GC 转换为显式指令序列
MODULE_PASSstripStripSymbolsPass删除所有符号表信息以减小二进制大小
MODULE_PASSstrip-dead-debug-infoStripDeadDebugInfoPass删除未引用的调试信息以加快加载速度
MODULE_PASSstrip-dead-prototypesStripDeadPrototypesPass删除无用的函数原型声明
MODULE_PASSstrip-debug-declareStripDebugDeclarePass删除 llvm.dbg.declare 调试声明
MODULE_PASSstrip-nondebugStripNonDebugSymbolsPass删除非调试符号,仅保留调试相关符号
MODULE_PASSstrip-nonlinetable-debuginfoStripNonLineTableDebugInfoPass删除行号表以外的调试信息
MODULE_PASSstrip-dead-cg-profileStripDeadCGProfilePass删除无用的调用图配置文件数据
MODULE_PASStrigger-crash-moduleTriggerCrashModulePass强制引发崩溃以测试 Pass 管道的鲁棒性
MODULE_PASStrigger-verifier-errorTriggerVerifierErrorPass强制触发验证器错误以测试验证流程
MODULE_PASStsan-moduleModuleThreadSanitizerPass插装线程 Sanitizer 以检测数据竞争
MODULE_PASStysanTypeSanitizerPass插装类型 Sanitizer 以检测内存越界和类型混用
MODULE_PASSverifyVerifierPass验证所有 IR 变换后的合法性以确保无错误
MODULE_PASSview-callgraphCallGraphViewerPass以图形化方式展示调用图(依赖 GUI)
MODULE_PASSwholeprogramdevirtWholeProgramDevirtPass全程序级虚函数去虚化,转为直接调用
MODULE_PASS_WITH_PARAMSasanAddressSanitizerPass插装 AddressSanitizer 以检测内存越界和使用后释放
MODULE_PASS_WITH_PARAMScg-profileCGProfilePass基于调用图数据插装或使用调用图分析
MODULE_PASS_WITH_PARAMSglobal-mergeGlobalMergePass按多种策略合并全局变量以减少冗余
MODULE_PASS_WITH_PARAMSembed-bitcodeEmbedBitcodePass将 Bitcode 嵌入到目标文件,支持 LTO 和摘要导出
MODULE_PASS_WITH_PARAMSglobaldceGlobalDCEPass删除全局范围内不可达的函数和变量
MODULE_PASS_WITH_PARAMShwasanHWAddressSanitizerPass插装硬件辅助 ASan 检测,并可选择恢复模式
MODULE_PASS_WITH_PARAMSinternalizeInternalizePass将非保留全局符号标记为内部可见,优化符号导出
MODULE_PASS_WITH_PARAMSipsccpIPSCCPPass在跨函数常量传播中应用间过程 SCCP 分析
MODULE_PASS_WITH_PARAMSloop-extractLoopExtractorPass从循环体中提取基本块用于独立分析或优化
MODULE_PASS_WITH_PARAMSmemprof-useMemProfUsePass指定采样文件并插装内存使用采样分析
MODULE_PASS_WITH_PARAMSmsanMemorySanitizerPass插装 MemorySanitizer 检测未初始化内存读取
MODULE_PASS_WITH_PARAMSprint<structural-hash>StructuralHashPrinterPass打印结构哈希分析结果,支持详细和忽略调用目标选项
CGSCC_ANALYSISno-op-cgsccNoOpCGSCCAnalysisCGSCC 级别空操作分析,占位用
CGSCC_ANALYSISfam-proxyFunctionAnalysisManagerCGSCCProxy在 CGSCC 管道中代理 FAM 分析结果
CGSCC_ANALYSISpass-instrumentationPassInstrumentationAnalysis插装 CGSCC 级别的 Pass 运行时数据采集
CGSCC_PASSargpromotionArgumentPromotionPass将函数内部可替换参数提升到寄存器以减少内存访问
CGSCC_PASSattributor-cgsccAttributorCGSCCPass在 CGSCC 级别运行属性推导
CGSCC_PASSattributor-light-cgsccAttributorLightCGSCCPass轻量级 CGSCC 属性推导
CGSCC_PASSinvalidateInvalidateAllAnalysesPass使 CGSCC 级别所有分析结果失效
CGSCC_PASSno-op-cgsccNoOpCGSCCPassCGSCC 级别空操作 Pass
CGSCC_PASSopenmp-opt-cgsccOpenMPOptCGSCCPass在 CGSCC 管道中优化 OpenMP 代码
CGSCC_PASScoro-annotation-elideCoroAnnotationElidePass消除协程注释以简化 CoroSplit 分析
CGSCC_PASS_WITH_PARAMScoro-splitCoroSplitPass分裂协程帧,可重用存储选项
CGSCC_PASS_WITH_PARAMSfunction-attrsPostOrderFunctionAttrsPassCGSCC 级别后序推断函数属性,可跳过非递归函数
CGSCC_PASS_WITH_PARAMSinlineInlinerPassCGSCC 级别仅内联强制标记的调用
FUNCTION_ANALYSISaaAAManager构建和管理别名分析,检测指针可能指向的内存区域
FUNCTION_ANALYSISaccess-infoLoopAccessAnalysis分析循环中内存访问模式,支持安全优化
FUNCTION_ANALYSISassumptionsAssumptionAnalysis收集并利用假设条件以驱动优化决策
FUNCTION_ANALYSISbb-sections-profile-readerBasicBlockSectionsProfileReaderAnalysis从分段配置文件读取基本块执行频率信息
FUNCTION_ANALYSISblock-freqBlockFrequencyAnalysis基于配置或分析推断基本块执行频率
FUNCTION_ANALYSISbranch-probBranchProbabilityAnalysis估算分支概率以辅助代码布局优化
FUNCTION_ANALYSIScyclesCycleAnalysis分析依赖图中的循环,以识别并行化机会
FUNCTION_ANALYSISdaDependenceAnalysis检测内存访问依赖关系,支持循环并行化和向量化
FUNCTION_ANALYSISdebug-ataDebugAssignmentTrackingAnalysis跟踪变量赋值以调试和分析数据流
FUNCTION_ANALYSISdemanded-bitsDemandedBitsAnalysis识别实际使用的值位,支持位级别优化
FUNCTION_ANALYSISdomfrontierDominanceFrontierAnalysis构建支配边界,用于 SSA 重构和优化
FUNCTION_ANALYSISdomtreeDominatorTreeAnalysis构建支配树,以便快速查询支配关系
FUNCTION_ANALYSISephemeralsEphemeralValuesAnalysis分析短生命周期值,用于消除不必要的存储
FUNCTION_ANALYSISfunc-propertiesFunctionPropertiesAnalysis推断函数属性(如无副作用、纯函数等)
FUNCTION_ANALYSISmachine-function-infoMachineFunctionAnalysis收集机器级函数信息,用于后端优化
FUNCTION_ANALYSISgc-functionGCFunctionAnalysis分析垃圾回收相关函数调用模式
FUNCTION_ANALYSISinliner-size-estimatorInlineSizeEstimatorAnalysis估算内联后代码规模,辅助内联决策
FUNCTION_ANALYSISlast-run-trackingLastRunTrackingAnalysis跟踪上次 Pass 运行状态以支持增量优化
FUNCTION_ANALYSISlazy-value-infoLazyValueAnalysis延迟评估值,以减少不必要的计算
FUNCTION_ANALYSISloopsLoopAnalysis检测并分类循环,支持后续循环优化
FUNCTION_ANALYSISmemdepMemoryDependenceAnalysis分析内存依赖,支持调度和并行优化
FUNCTION_ANALYSISmemoryssaMemorySSAAnalysis构建 MemorySSA,以便精确跟踪内存定义与使用
FUNCTION_ANALYSISno-op-functionNoOpFunctionAnalysis空操作分析,占位用
FUNCTION_ANALYSISopt-remark-emitOptimizationRemarkEmitterAnalysis在优化过程中生成诊断报告
FUNCTION_ANALYSISpass-instrumentationPassInstrumentationAnalysis插装函数级 Pass 运行统计采集
FUNCTION_ANALYSISphi-valuesPhiValuesAnalysis分析 φ 节点的值域,用于常量传播
FUNCTION_ANALYSISpostdomtreePostDominatorTreeAnalysis构建后支配树,用于控制依赖分析
FUNCTION_ANALYSISregionsRegionInfoAnalysis分析代码区域结构,支持大范围代码布局优化
FUNCTION_ANALYSISscalar-evolutionScalarEvolutionAnalysis对循环中的算术和指针进程建模
FUNCTION_ANALYSISshould-not-run-function-passesShouldNotRunFunctionPassesAnalysis判断哪些函数 Pass 应跳过
FUNCTION_ANALYSISshould-run-extra-vector-passesShouldRunExtraVectorPasses决定哪些函数需要额外向量化 Pass
FUNCTION_ANALYSISssp-layoutSSPLayoutAnalysis分析堆栈保护布局以插装安全检查
FUNCTION_ANALYSISstack-safety-localStackSafetyAnalysis本地函数级栈安全分析,检测潜在溢出
FUNCTION_ANALYSIStarget-irTM获取目标架构的 IR 分析接口
FUNCTION_ANALYSIStarget-lib-infoTargetLibraryAnalysis提供标准库函数的信息以支持内联和优化
FUNCTION_ANALYSISuniformityUniformityInfoAnalysis分析值在不同线程或向量元素间的一致性
FUNCTION_ANALYSISverifyVerifierAnalysis验证函数级 IR 的合法性和一致性
FUNCTION_ALIAS_ANALYSISbasic-aaBasicAA基础别名分析,快速检测简单指针别名情况
FUNCTION_ALIAS_ANALYSISobjc-arc-aaobjcarc::ObjCARCAA针对 Objective-C ARC 的别名分析
FUNCTION_ALIAS_ANALYSISscev-aaSCEVAA基于标量演化(SCEV)的别名分析
FUNCTION_ALIAS_ANALYSISscoped-noalias-aaScopedNoAliasAA在特定作用域内进行无别名假设分析
FUNCTION_ALIAS_ANALYSIStbaaTypeBasedAA基于类型信息的别名分析,利用类型不变性消除别名
FUNCTION_PASSaa-evalAAEvaluator评估别名分析结果,用于后续优化决策
FUNCTION_PASSadceADCEPass先进死代码删除(Aggressive DCE),移除尽可能多的无用代码
FUNCTION_PASSadd-discriminatorsAddDiscriminatorsPass在指令中添加调试鉴别器,改进混淆和剖析映射
FUNCTION_PASSaggressive-instcombineAggressiveInstCombinePass更积极地合并和简化指令
FUNCTION_PASSalignment-from-assumptionsAlignmentFromAssumptionsPass根据假设推断并应用更严格的对齐
FUNCTION_PASSannotation-remarksAnnotationRemarksPass发出关于注解使用的诊断备注
FUNCTION_PASSassume-builderAssumeBuilderPass构建假设条件表达式,支持条件优化
FUNCTION_PASSassume-simplifyAssumeSimplifyPass简化假设条件,减少冗余判断
FUNCTION_PASSatomic-expandAtomicExpandPass展开原子操作为平台指令序列
FUNCTION_PASSbdceBDCEPass基本块死代码删除(Block DCE),移除未执行块
FUNCTION_PASSbreak-crit-edgesBreakCriticalEdgesPass拆分关键控制流边,以便 SSA 转换
FUNCTION_PASScallbr-prepareCallBrPreparePass为调用/分支混合指令准备分析结构
FUNCTION_PASScallsite-splittingCallSiteSplittingPass拆分多调用站点以启用不同优化策略
FUNCTION_PASSchrControlHeightReductionPass降低控制流高度,简化嵌套分支
FUNCTION_PASScodegenprepareCodeGenPreparePass预处理 IR 以满足后端代码生成要求
FUNCTION_PASScomplex-deinterleavingComplexDeinterleavingPass对复杂交错访问执行反交错处理
FUNCTION_PASSconsthoistConstantHoistingPass将循环或条件内的常量提升到外部
FUNCTION_PASSconstraint-eliminationConstraintEliminationPass消除冗余约束条件
FUNCTION_PASScoro-elideCoroElidePass在协程转换中消除无用中间状态
FUNCTION_PASScorrelated-propagationCorrelatedValuePropagationPass基于相关性传播常量
FUNCTION_PASScount-visitsCountVisitsPass插装基本块访问计数,用于分析或 Profile
FUNCTION_PASSdceDCEPass标准死代码删除
FUNCTION_PASSdeclare-to-assignllvm::AssignmentTrackingPass跟踪变量赋值,替换声明为赋值链
FUNCTION_PASSdfa-jump-threadingDFAJumpThreadingPass数据流驱动的跳转合并,优化分支可达性
FUNCTION_PASSdiv-rem-pairsDivRemPairsPass合并除法和取余对以减少重复计算
FUNCTION_PASSdot-cfgCFGPrinterPass将控制流图输出为 DOT 格式
FUNCTION_PASSdot-cfg-onlyCFGOnlyPrinterPass仅输出 CFG,不生成分析
FUNCTION_PASSdot-domDomPrinter将支配树输出为 DOT 格式
FUNCTION_PASSdot-dom-onlyDomOnlyPrinter仅输出支配树,不生成分析
FUNCTION_PASSdot-post-domPostDomPrinter将后支配树输出为 DOT
FUNCTION_PASSdot-post-dom-onlyPostDomOnlyPrinter仅输出后支配树
FUNCTION_PASSdseDSEPass删除冗余存储和加载(Dead Store Elimination)
FUNCTION_PASSdwarf-eh-prepareDwarfEHPreparePass为 DWARF 异常处理生成辅助结构
FUNCTION_PASSexpand-large-div-remExpandLargeDivRemPass将大型除法/取余指令展开为循环或调用
FUNCTION_PASSexpand-fpExpandFpPass展开浮点操作以满足目标架构要求
FUNCTION_PASSexpand-memcmpExpandMemCmpPass将 memcmp 调用展开为字节比较循环
FUNCTION_PASSextra-vector-passesExtraFunctionPassManager对标记的函数执行额外向量化 Pass
FUNCTION_PASSfix-irreducibleFixIrreduciblePass转换不可约循环结构为可约
FUNCTION_PASSflatten-cfgFlattenCFGPass将多分支结构扁平化以简化分析
FUNCTION_PASSfloat2intFloat2IntPass将浮点 to 整数转换指令标准化
FUNCTION_PASSgc-loweringGCLoweringPass将垃圾回收相关调用转换为显式状态点
FUNCTION_PASSguard-wideningGuardWideningPass扩宽守护检查以减少分支
FUNCTION_PASSgvn-hoistGVNHoistPass将公共子表达式提升出循环或分支
FUNCTION_PASSgvn-sinkGVNSinkPass将不常用计算下沉到分支内部
FUNCTION_PASShelloworldHelloWorldPass示例 Pass,打印“Hello World”
FUNCTION_PASSindirectbr-expandIndirectBrExpandPass展开 indirectbr 指令为 switch 或跳表
FUNCTION_PASSinfer-address-spacesInferAddressSpacesPass推断指针地址空间属性
FUNCTION_PASSinfer-alignmentInferAlignmentPass推断并应用内存对齐属性
FUNCTION_PASSinject-tli-mappingsInjectTLIMappings注入目标特定映射信息,支持目标集成
FUNCTION_PASSinstcountInstCountPass统计指令数量和类型分布
FUNCTION_PASSinstnamerInstructionNamerPass为指令生成可读名称,辅助调试
FUNCTION_PASSinstsimplifyInstSimplifyPass简化冰山浮点和整数指令
FUNCTION_PASSinterleaved-accessInterleavedAccessPass将内存交错访问转换为标准访问
FUNCTION_PASSinterleaved-load-combineInterleavedLoadCombinePass合并交错加载为宽加载
FUNCTION_PASSinvalidateInvalidateAllAnalysesPass使所有函数级分析失效
FUNCTION_PASSirceIRCEPass交互式冗余计算消除(IR-level CSE)
FUNCTION_PASSjump-threadingJumpThreadingPass进行跳转穿线以简化分支
FUNCTION_PASSjump-table-to-switchJumpTableToSwitchPass将跳表转换为 switch 语句
FUNCTION_PASSkcfiKCFIPass插装 KCFI 控制流完整性检查
FUNCTION_PASSkernel-infoKernelInfoPrinter打印内核特定信息
FUNCTION_PASSlcssaLCSSAPass将循环退出块上的 PHI 转换为 LCSSA 形式
FUNCTION_PASSlibcalls-shrinkwrapLibCallsShrinkWrapPass缩减库调用保护代码路径
FUNCTION_PASSload-store-vectorizerLoadStoreVectorizerPass向量化串行 load/store
FUNCTION_PASSloop-data-prefetchLoopDataPrefetchPass在循环中插装数据预取指令
FUNCTION_PASSloop-distributeLoopDistributePass将循环分布到多个独立循环中
FUNCTION_PASSloop-fusionLoopFusePass合并相邻循环以减少循环开销
FUNCTION_PASSloop-load-elimLoopLoadEliminationPass消除循环内冗余加载
FUNCTION_PASSloop-simplifyLoopSimplifyPass将循环标准化为单入口单出口形式
FUNCTION_PASSloop-sinkLoopSinkPass将不常用计算下沉
FUNCTION_PASSloop-versioningLoopVersioningPass对循环进行版本化以消除边界检查
FUNCTION_PASSlower-atomicLowerAtomicPass将原子指令降级为库调用或内联序列
FUNCTION_PASSlower-constant-intrinsicsLowerConstantIntrinsicsPass将常量内建函数展开为常规 IR
FUNCTION_PASSlower-expectLowerExpectIntrinsicPass将 expect 内建函数转换为分支预测提示
FUNCTION_PASSlower-guard-intrinsicLowerGuardIntrinsicPass将 guard 内建函数转换为条件跳转
FUNCTION_PASSlower-invokeLowerInvokePass将 invoke 指令转换为普通调用+异常处理
FUNCTION_PASSlower-switchLowerSwitchPass将 switch 指令转换为跳表或二分查找
FUNCTION_PASSlower-widenable-conditionLowerWidenableConditionPass将可扩展条件转换为动态检查
FUNCTION_PASSmake-guards-explicitMakeGuardsExplicitPass将隐式守护条件显式化,便于后续优化
FUNCTION_PASSmem2regPromotePass将内存分配的局部变量提升到寄存器 (Mem2Reg)
FUNCTION_PASSmemcpyoptMemCpyOptPass优化 memcpy 调用,合并或移除冗余内存复制
FUNCTION_PASSmemprofMemProfilerPass插装内存探测器,以收集内存访问性能数据
FUNCTION_PASSmergeicmpsMergeICmpsPass合并相邻的相同 icmp 比较以减少指令
FUNCTION_PASSmergereturnUnifyFunctionExitNodesPass将多个函数返回点合并为单一出口
FUNCTION_PASSmove-auto-initMoveAutoInitPass将自动变量初始化代码移动到更优位置
FUNCTION_PASSnary-reassociateNaryReassociatePass对多元加减运算重新关联以增强常量传播
FUNCTION_PASSnewgvnNewGVNPass执行新版全局值编号 (GVN) 优化,消除公共子表达式
FUNCTION_PASSno-op-functionNoOpFunctionPass空操作函数级 Pass,占位不做变换
FUNCTION_PASSobjc-arcObjCARCOptPassObjective-C ARC 自动引用计数优化
FUNCTION_PASSobjc-arc-contractObjCARCContractPassARC 优化中合并 retain/release 对
FUNCTION_PASSobjc-arc-expandObjCARCExpandPass将 ARC 内建操作展开为显式调用
FUNCTION_PASSpa-evalPAEvalPass对指令进行预测分析,以支持分支预测优化
FUNCTION_PASSpartially-inline-libcallsPartiallyInlineLibCallsPass将部分库函数内联以减少调用开销
FUNCTION_PASSpgo-memop-optPGOMemOPSizeOpt基于 PGO 数据优化内存操作大小
FUNCTION_PASSplace-safepointsPlaceSafepointsPass插入垃圾回收安全点
FUNCTION_PASSprintPrintFunctionPass打印函数级 IR 到 stderr
FUNCTION_PASSprint-alias-setsAliasSetsPrinterPass打印函数别名集信息到 stderr
FUNCTION_PASSprint-cfg-sccsCFGSCCPrinterPass打印函数内 SCC CFG 到 stderr
FUNCTION_PASSprint-memderefsMemDerefPrinterPass打印可能的内存解引用点
FUNCTION_PASSprint-mustexecuteMustExecutePrinterPass打印必须执行的指令上下文
FUNCTION_PASSprint-predicateinfoPredicateInfoPrinterPass打印谓词分析信息
FUNCTION_PASSprint<access-info>LoopAccessInfoPrinterPass打印循环访问信息
FUNCTION_PASSprint<assumptions>AssumptionPrinterPass打印假设分析结果
FUNCTION_PASSprint<block-freq>BlockFrequencyPrinterPass打印基本块频率
FUNCTION_PASSprint<branch-prob>BranchProbabilityPrinterPass打印分支概率
FUNCTION_PASSprint<cost-model>CostModelPrinterPass打印成本模型估算
FUNCTION_PASSprint<cycles>CycleInfoPrinterPass打印循环依赖分析信息
FUNCTION_PASSprint<da>DependenceAnalysisPrinterPass打印依赖分析结果
FUNCTION_PASSprint<debug-ata>DebugAssignmentTrackingPrinterPass打印赋值跟踪信息
FUNCTION_PASSprint<delinearization>DelinearizationPrinterPass打印指针去线性化信息
FUNCTION_PASSprint<demanded-bits>DemandedBitsPrinterPass打印位需求分析结果
FUNCTION_PASSprint<domfrontier>DominanceFrontierPrinterPass打印支配边界
FUNCTION_PASSprint<domtree>DominatorTreePrinterPass打印支配树
FUNCTION_PASSprint<func-properties>FunctionPropertiesPrinterPass打印函数属性分析结果
FUNCTION_PASSprint<inline-cost>InlineCostAnnotationPrinterPass打印内联成本注解
FUNCTION_PASSprint<inliner-size-estimator>InlineSizeEstimatorAnalysisPrinterPass打印内联大小估算
FUNCTION_PASSprint<lazy-value-info>LazyValueInfoPrinterPass打印延迟值分析信息
FUNCTION_PASSprint<loops>LoopPrinterPass打印循环结构信息
FUNCTION_PASSprint<memoryssa-walker>MemorySSAWalkerPrinterPass打印 MemorySSA 遍历器信息
FUNCTION_PASSprint<phi-values>PhiValuesPrinterPass打印 φ 节点值信息
FUNCTION_PASSprint<postdomtree>PostDominatorTreePrinterPass打印后支配树
FUNCTION_PASSprint<regions>RegionInfoPrinterPass打印区域信息
FUNCTION_PASSprint<scalar-evolution>ScalarEvolutionPrinterPass打印标量演化分析结果
FUNCTION_PASSprint、StackSafetyPrinterPass打印栈安全本地分析结果
FUNCTION_PASSprint<uniformity>UniformityInfoPrinterPass打印一致性分析信息
FUNCTION_PASSreassociateReassociatePass对加减乘除表达式重新关联
FUNCTION_PASSredundant-dbg-inst-elimRedundantDbgInstEliminationPass删除冗余调试指令
FUNCTION_PASSreg2memRegToMemPass将寄存器变量重新映射回内存
FUNCTION_PASSsafe-stackSafeStackPass插装安全栈以防止栈溢出
FUNCTION_PASSsandbox-vectorizerSandboxVectorizerPass在沙箱模式下向量化内存访问
FUNCTION_PASSscalarize-masked-mem-intrinScalarizeMaskedMemIntrinPass将掩码内存内建展开为标量操作
FUNCTION_PASSsccpSCCPPass稀疏条件常量传播 (SCCP)
FUNCTION_PASSselect-optimizeSelectOptimizePass优化 select 内建指令
FUNCTION_PASSseparate-const-offset-from-gepSeparateConstOffsetFromGEPPass从 GEP 提取常量偏移
FUNCTION_PASSsinkSinkingPass将计算下沉到更冷的分支
FUNCTION_PASSsjlj-eh-prepareSjLjEHPreparePass为 setjmp/longjmp 异常处理准备辅助结构
FUNCTION_PASSslp-vectorizerSLPVectorizerPass基于超块的向量化
FUNCTION_PASSslsrStraightLineStrengthReducePass直线代码强度归约
FUNCTION_PASSstack-protectorStackProtectorPass插装栈保护以检测溢出
FUNCTION_PASSstrip-gc-relocatesStripGCRelocates删除垃圾回收重定位指令
FUNCTION_PASStailcallelimTailCallElimPass消除尾调用并转为跳转
FUNCTION_PASStransform-warningWarnMissedTransformationsPass对未应用的变换发出警告
FUNCTION_PASStrigger-crash-functionTriggerCrashFunctionPass强制在函数中引发崩溃以测试管道
FUNCTION_PASStrigger-verifier-errorTriggerVerifierErrorPass强制触发验证器错误
FUNCTION_PASStsanThreadSanitizerPass插装线程 Sanitizer 以检测数据竞争
FUNCTION_PASStypepromotionTypePromotionPass将小整数类型提升为更大类型以优化指令
FUNCTION_PASSunify-loop-exitsUnifyLoopExitsPass合并循环退出点
FUNCTION_PASSvector-combineVectorCombinePass合并向量操作以提高利用率
FUNCTION_PASSverifyVerifierPass验证函数级 IR 合法性
FUNCTION_PASSverifyCycleInfoVerifierPass验证循环依赖分析正确性
FUNCTION_PASSverifyDominatorTreeVerifierPass验证支配树正确性
FUNCTION_PASSverifyLoopVerifierPass验证循环分析正确性
FUNCTION_PASSverifyMemorySSAVerifierPass验证 MemorySSA 正确性
FUNCTION_PASSverifyRegionInfoVerifierPass验证区域信息正确性
FUNCTION_PASSverifySafepointIRVerifierPass验证安全点 IR 正确性
FUNCTION_PASSverifyScalarEvolutionVerifierPass验证标量演化分析正确性
FUNCTION_PASSview-cfgCFGViewerPass图形化展示函数内控制流图
FUNCTION_PASSview-cfg-onlyCFGOnlyViewerPass仅图形化展示 CFG
FUNCTION_PASSview-domDomViewer图形化展示支配树
FUNCTION_PASSview-dom-onlyDomOnlyViewer仅图形化展示支配树
FUNCTION_PASSview-post-domPostDomViewer图形化展示后支配树
FUNCTION_PASSview-post-dom-onlyPostDomOnlyViewer仅图形化展示后支配树
FUNCTION_PASSwasm-eh-prepareWasmEHPreparePass为 WebAssembly 异常处理生成辅助结构
FUNCTION_PASS_WITH_PARAMScfguardCFGuardPass插装 Control-Flow Guard 检查与跳转保护
FUNCTION_PASS_WITH_PARAMSearly-cseEarlyCSEPass早期公共子表达式消除,可选 MemorySSA 支持
FUNCTION_PASS_WITH_PARAMSee-instrumentEntryExitInstrumenterPass插装函数入口/出口钩子,可选后内联模式
FUNCTION_PASS_WITH_PARAMSfunction-simplification构建函数级简化流水线,支持不同优化级别
FUNCTION_PASS_WITH_PARAMSgvnGVNPass全局值编号消除公共子表达式,选项控制预合并与 MemorySSA
FUNCTION_PASS_WITH_PARAMShardware-loopsHardwareLoopsPass将循环转换为硬件循环指令,可强制、嵌套与位宽选项
FUNCTION_PASS_WITH_PARAMSinstcombineInstCombinePass指令合并与常见模式简化,控制循环信息与 fixpoint 验证
FUNCTION_PASS_WITH_PARAMSlintLintPass静态“代码审查”检查,遇错可中止
FUNCTION_PASS_WITH_PARAMSloop-unrollLoopUnrollPass循环展开,支持部分/全展开与剥离策略
FUNCTION_PASS_WITH_PARAMSloop-vectorizeLoopVectorizePass循环向量化,强制/排除交错与向量化策略
FUNCTION_PASS_WITH_PARAMSlower-allow-checkLowerAllowCheckPass将允许检查谓词内建降低为显式条件
FUNCTION_PASS_WITH_PARAMSlower-matrix-intrinsicsLowerMatrixIntrinsicsPass将矩阵内建展开为循环或标量运算,可选最小化策略
FUNCTION_PASS_WITH_PARAMSnormalizeIRNormalizerPass对 IR 做标准化重排,控制操作顺序与重命名
FUNCTION_PASS_WITH_PARAMSmldst-motionMergedLoadStoreMotionPass合并迁移加载/存储,优化访存合并与 BB 尾部分割
FUNCTION_PASS_WITH_PARAMSprint<da>DependenceAnalysisPrinterPass打印依赖分析结果,可选归一化输出
FUNCTION_PASS_WITH_PARAMSprint<memoryssa>MemorySSAPrinterPass打印 MemorySSA 结构,可选跳过优化检查
FUNCTION_PASS_WITH_PARAMSprint<stack-lifetime>StackLifetimePrinterPass打印栈生命周期信息,选择 may/must 分析
FUNCTION_PASS_WITH_PARAMSscalarizerScalarizerPass将矢量/内建内存操作标量化,细化 load/store 与插入/extract
FUNCTION_PASS_WITH_PARAMSseparate-const-offset-from-gepSeparateConstOffsetFromGEPPass从 GEP 指令中分离常量偏移,可降低 GEP 复杂度
FUNCTION_PASS_WITH_PARAMSsimplifycfgSimplifyCFGPass简化控制流图,支持 switch 优化、循环保留与公共指令提升/下沉
FUNCTION_PASS_WITH_PARAMSspeculative-executionSpeculativeExecutionPass插装或重写分支以进行投机执行,可选仅针对分歧目标
FUNCTION_PASS_WITH_PARAMSsroaSROAPass聚合类型标量替换,将 struct/array 拆为标量以支持 Mem2Reg
FUNCTION_PASS_WITH_PARAMSstructurizecfgStructurizeCFG将 CFG 转换为结构化控制流,以支持 GPU/Shader 后端
FUNCTION_PASS_WITH_PARAMSwin-eh-prepareWinEHPreparePass为 Windows 异常处理生成 PHI 和辅助块,可降级仅捕获 switch PHI
FUNCTION_PASS_WITH_PARAMSbounds-checkingBoundsCheckingPass插装数组/指针越界检查,可选 trap 中断行为
LOOPNEST_PASSloop-flattenLoopFlattenPass展平嵌套循环,将多层循环转换为单层
LOOPNEST_PASSloop-interchangeLoopInterchangePass交换内外循环以改善数据局部性
LOOPNEST_PASSloop-unroll-and-jamLoopUnrollAndJamPass解卷循环并融合循环体以提高并行度
LOOPNEST_PASSno-op-loopnestNoOpLoopNestPass空操作 LoopNest Pass,占位测试
LOOP_ANALYSISddgDDGAnalysis构建循环数据依赖图(DDG)以分析依赖关系
LOOP_ANALYSISiv-usersIVUsersAnalysis分析归纳变量的使用情况以辅助变换
LOOP_ANALYSISno-op-loopNoOpLoopAnalysis空操作 Loop Analysis,占位用
LOOP_ANALYSISpass-instrumentationPassInstrumentationAnalysis插装循环级 Pass 运行统计
LOOP_ANALYSISshould-run-extra-simple-loop-unswitchShouldRunExtraSimpleLoopUnswitch判断是否执行简单循环非交换优化
LOOP_PASScanon-freezeCanonicalizeFreezeInLoopsPass标准化循环中的 freeze 操作以简化优化
LOOP_PASSdot-ddgDDGDotPrinterPass将循环数据依赖图输出为 DOT 格式
LOOP_PASSguard-wideningGuardWideningPass扩宽循环守护条件以减少分支
LOOP_PASSextra-simple-loop-unswitch-passesExtraLoopPassManager对可简单非交换的循环执行附加 Pass
LOOP_PASSindvarsIndVarSimplifyPass归纳变量简化,标准化 IV 用法
LOOP_PASSinvalidateInvalidateAllAnalysesPass使所有循环级分析结果失效
LOOP_PASSloop-bound-splitLoopBoundSplitPass按循环边界条件拆分循环以移除检查
LOOP_PASSloop-deletionLoopDeletionPass删除不执行或无效的循环
LOOP_PASSloop-idiomLoopIdiomRecognizePass识别并替换常见循环习语
LOOP_PASSloop-idiom-vectorizeLoopIdiomVectorizePass将识别的习语向量化
LOOP_PASSloop-instsimplifyLoopInstSimplifyPass在循环内简化指令
LOOP_PASSloop-predicationLoopPredicationPass循环谓词化,移出条件分支
LOOP_PASSloop-reduceLoopStrengthReducePass循环强度归约,简化乘除为加法
LOOP_PASSloop-term-foldLoopTermFoldPass折叠循环终止条件表达式
LOOP_PASSloop-simplifycfgLoopSimplifyCFGPass将循环 CFG 标准化为单入口单出口
LOOP_PASSloop-unroll-fullLoopFullUnrollPass对循环进行完全展开
LOOP_PASSloop-versioning-licmLoopVersioningLICMPass循环版本化,结合 LICM 消除边界检查
LOOP_PASSno-op-loopNoOpLoopPass空操作 Loop Pass,占位测试
LOOP_PASSprintPrintLoopPass打印循环信息到 stderr
LOOP_PASSprint<ddg>DDGAnalysisPrinterPass打印循环数据依赖图分析结果
LOOP_PASSprint<iv-users>IVUsersPrinterPass打印归纳变量使用情况
LOOP_PASSprint<loop-cache-cost>LoopCachePrinterPass打印循环缓存成本估算
LOOP_PASSprint<loopnest>LoopNestPrinterPass打印循环嵌套结构
LOOP_PASS_WITH_PARAMSlicmLICMPass循环内存量化消除(LICM),可选投机执行
LOOP_PASS_WITH_PARAMSlnicmLNICMPass延迟 LICM,待条件满足后再提升公共子表达式
LOOP_PASS_WITH_PARAMSloop-rotateLoopRotatePass循环旋转,重排循环头部以优化分支和并行
LOOP_PASS_WITH_PARAMSsimple-loop-unswitchSimpleLoopUnswitchPass简单循环非交换,移出循环不变条件

附录 C-解析脚本

#!/usr/bin/env python3
"""
生成 LLVM PassRegistry.def 宏定义的 Markdown 表格
用法:python3 generate_pass_table.py PassRegistry.def > passes.md
"""

import re, sys, itertools

def glue_lines(lines):
    """跨行累积直到括号平衡并含注释,输出(逻辑行号, 拼合行)"""
    depth, buf = 0, []
    for ln, raw in enumerate(lines, 1):
        txt = raw.rstrip("\n")
        if not txt.strip():
            continue
        buf.append(txt)
        depth += txt.count("(") - txt.count(")")
        if depth == 0 and "//" in txt:
            yield ln, " ".join(buf)
            buf.clear()
    if buf:
        yield ln, " ".join(buf)

# 宏名前缀
MACROS = r'\w+_(?:PASS(?:_WITH_PARAMS)?|ANALYSIS|ALIAS_ANALYSIS|NEST_PASS)'

# 模式1:第二个参数为字符串(允许为空)
P1 = re.compile(
    rf'^(?P<macro>{MACROS})\s*'
    r'\(\s*"(?P<short>[^"]+)"\s*,\s*'      # "short"
    r'"(?P<name>[^"]*)"'                   # "Name"(可为空)
    r'.*?\)\s*//\s*(?P<comment>.+)$'       # ) // comment
)

# 模式2:第二个参数为构造器名
P2 = re.compile(
    rf'^(?P<macro>{MACROS})\s*'
    r'\(\s*"(?P<short>[^"]+)"\s*,\s*'      # "short"
    r'(?P<name>[A-Za-z_][A-Za-z0-9_:<>]*)' # Name
    r'.*?\)\s*//\s*(?P<comment>.+)$'       # ) // comment
)

def parse(path):
    ok, bad = [], []
    with open(path, encoding='utf-8') as f:
        for ln, line in glue_lines(f):
            s = line.strip()
            m = P1.match(s) or P2.match(s)
            if m:
                ok.append(m.groupdict())
            else:
                bad.append((ln, s))
    return ok, bad

def to_markdown(rows):
    header = [
        "| 宏类型 | 缩写 | Pass/Analysis 名称 | 注释 |",
        "|--------|------|--------------------|------|"
    ]
    body = [
        f"| {r['macro']} | {r['short']} | {r['name']} | {r['comment']} |"
        for r in rows
    ]
    return "\n".join(itertools.chain(header, body))

def main():
    if len(sys.argv) != 2:
        sys.exit(f"Usage: {sys.argv[0]} PassRegistry.def")
    ok, bad = parse(sys.argv[1])
    sys.stderr.write(f"[*] 解析成功 {len(ok)} 条\n")
    if bad:
        sys.stderr.write(f"[!] 未匹配 {len(bad)} 条,前 20 行示例:\n")
        for ln, txt in bad[:20]:
            sys.stderr.write(f"    Line {ln}: {txt}\n")
        if len(bad) > 20:
            sys.stderr.write("    ...\n")
    print(to_markdown(ok))

if __name__ == '__main__':
    main()