共享 Pass 工具函数
include/pypto/ir/transforms/utils/ 中的可复用工具。
变量收集器 (var_collectors.h)
头文件: #include "pypto/ir/transforms/utils/var_collectors.h"
命名空间: pypto::ir::var_collectors
快速参考
| 工具 |
收集内容 |
VarDefUseCollector |
单次遍历收集所有定义、使用、仅赋值定义和有序定义。 |
CollectStmtDefinedVars() |
语句后可见的变量。非递归。 |
CollectTypeVars() |
类型形状中的变量(动态维度)。遍历类型树。 |
VisitTypeExprFields() |
在类型表达式字段上分派 visitor。 |
GetSortedVarRefs() |
按名称+ID 确定性排序。 |
VarDefUseCollector 字段
| 字段 |
内容 |
var_defs |
所有定义点(无序集合)。 |
var_uses |
所有使用点(无序集合)。 |
var_defs_ordered |
定义点的 DFS 前序遍历(vector)。 |
var_assign_defs |
仅 AssignStmt 左值(无序集合)。 |
GetAllVarRefs() |
返回 var_defs ∪ var_uses。 |
各语句填充内容
| 语句 |
var_defs / var_defs_ordered |
var_assign_defs |
var_uses |
AssignStmt |
var_ |
var_ |
右值 value_ |
ForStmt |
loop_var_、return_vars_、iter_args_ |
— |
边界、initValues |
WhileStmt |
return_vars_、iter_args_ |
— |
condition_、initValues |
IfStmt |
return_vars_ |
— |
condition_ |
使用示例
#include "pypto/ir/transforms/utils/var_collectors.h"
using namespace pypto::ir;
// 单次遍历同时获取定义、使用和有序定义
var_collectors::VarDefUseCollector collector;
collector.VisitStmt(scope_body);
// 输入 = 使用但未在本地定义的变量
for (const Var* use : collector.var_uses) {
if (!collector.var_defs.count(use)) {
// 'use' 来自外层作用域
}
}
// SSA:查找仅赋值定义(不含循环变量、iter_args)
for (const Var* v : collector.var_assign_defs) {
// 循环携带状态或逃逸变量的候选
}
// 确定性定义排序用于重命名映射
for (const Var* def : collector.var_defs_ordered) {
rename_map[def] = next_name();
}
类型表达式访问器
VisitTypeExprFields(visitor, type) 在类型的所有表达式字段上
分派 visitor。CollectTypeVars(type) 是便捷包装器,返回所有
Var 指针。这些操作类型(非 IR 语句),因此保留为自由函数。
MemRef 收集器 (memref_collectors.h)
头文件: #include "pypto/ir/transforms/utils/memref_collectors.h"
命名空间: pypto::ir::memref_collectors
快速参考
| 工具 |
收集内容 |
MemRefWithSpaceCollector |
TileType 变量中唯一的 (MemRef, MemorySpace) 对。类形式,支持多次访问。 |
CollectMemRefsWithSpace() |
语句中所有 (MemRef, MemorySpace) 对。 |
CollectNonDDRMemRefsWithSpace() |
语句中非 DDR 的 (MemRef, MemorySpace) 对。 |
CollectShapedTypeMemRefs() |
表达式中任意 ShapedType(Tensor 或 Tile)的 MemRefPtr。 |
CollectUsedBasePtrs() |
语句中 TileType/TensorType 变量的 MemRef base Ptr 原始指针。 |
使用示例
#include "pypto/ir/transforms/utils/memref_collectors.h"
using namespace pypto::ir;
// 收集所有 MemRef 及其 memory space
auto memrefs = memref_collectors::CollectMemRefsWithSpace(func->body_);
// 收集非 DDR MemRef(例如用于 tile.alloc 生成)
auto non_ddr = memref_collectors::CollectNonDDRMemRefsWithSpace(func->body_);
// 多次访问:同时收集参数和函数体
memref_collectors::MemRefWithSpaceCollector collector(/*skip_ddr=*/true);
for (const auto& param : func->params_) collector.VisitExpr(param);
collector.VisitStmt(func->body_);
// 结果在 collector.memrefs 中
// 从表达式收集(同时支持 TensorType 和 TileType)
auto expr_memrefs = memref_collectors::CollectShapedTypeMemRefs(expr);
// base Ptr 原始指针集合用于快速成员检查(检测未使用的 alloc)
auto used = memref_collectors::CollectUsedBasePtrs(func->body_);
其他共享工具
| 头文件 |
工具 |
transform_utils.h |
Substitute、CollectDefVars、FindYieldStmt、FlattenToStmts、IsComputeTensorOp |
loop_state_repair.h |
BuildDefMap、循环重建辅助函数、StripDeadIterArgs |
scope_outline_utils.h |
VarCollector、StoreTargetCollector、ScopeOutliner、ScopeKindAbsenceVerifier |
auto_name_utils.h |
SSA 名称生成、重命名映射、名称解析 |
parent_stmt_analysis.h |
父子语句映射 |
dead_code_elimination.h |
函数内死代码消除 |