| 01 |
InlineFunctions |
把 FunctionType.Inline 函数体展开到每个调用点 |
| 02 |
UnrollLoops |
在编译期展开 ForKind::Unroll 循环 |
| 03 |
CtrlFlowTransform |
把 break / continue 改写为结构化控制流 |
| 04 |
ConvertToSSA |
转换为 SSA 形式,含变量重命名、phi 节点与 iter_args |
| 05 |
Simplify |
折叠算术表达式、shape 表达式与标量常量绑定 |
| 06 |
FlattenCallExpr |
把嵌套调用表达式拍平为三地址形式 |
| 07 |
OutlineHierarchyScopes |
把 Hierarchy 作用域外提为带 level / role 元数据的函数 |
| 08 |
OutlineGraphScopes |
把 pl.graph 区域外提为 FunctionType.Graph 函数,使作用域形式与 @pl.jit.graph 汇聚 |
| 09 |
OutlineIncoreScopes |
把 InCore 作用域外提为独立函数 |
| 10 |
OutlineClusterScopes |
把 Cluster 作用域外提为 Group 函数,独立 Spmd 作用域外提为 Spmd 函数 |
| 11 |
ConvertTensorToTileOps |
在 InCore 函数中把 tensor 算子转为 tile 算子,并更新编排层调用点 |
| 12 |
OptimizeOrchTensors |
消除编排层冗余分配并改善数据流 |
| 13 |
LowerCompositeOps |
把复合 tile / 分布式算子分解为基础原语 |
| 13 |
FlattenTileNdTo2D |
合并除最后一维外的所有维度,把 3D+ tile 操作拍平为 2D |
| 15 |
BlockNzTensorViews |
把逻辑 pl.NZ 张量改写为 pto-isa 的分块 rank-5 形式,并同步改写其 tile.load 坐标 |
| 16 |
BlockMxScaleTensorViews |
将逻辑 MX scale 视图迁移为规范的 rank-5 物理分块形式 |
| 17 |
LegalizeTileCast |
把 ISA 无法单条指令完成的 tile.cast 展开为最短的原生 cast 链 |
| 18 |
AutoTileMatmulL0 |
依据后端 L0 容量选择 L0 tile 形状 (m, n, k) 并据此分块 matmul |
| 19 |
CanonicalizeTileSlice |
把 tile.slice 下降为规范的 tile.extract 形式 |
| 20 |
InferTileMemorySpace |
推断每个 tile 的片上 MemorySpace,并插入 tile.move 消解残留不匹配 |
| 21 |
InsertMxScaleAddr |
在 memory space 解析完成后,于 MX matmul 消费者前插入 tile.tget_scale_addr |
| 22 |
ResolveBackendOpLayouts |
修正逐元素算子所需的后端 tile layout |
| 23 |
LowerAutoVectorSplit |
把 AUTO pl.split 的混合 InCore 函数转换为显式 split_aiv 形式 |
| 24 |
ExpandMixedKernel |
把混合 InCore 函数拆分为独立的 AIC(Cube)与 AIV(Vector)kernel |
| 25 |
InjectGMPipeBuffer |
为经 GM 路由的跨核 pipe 注入 __gm_pipe_buffer workspace(Ascend910B) |
| 26 |
SplitVectorKernel |
标记 split 属性并处理不拆分的双 AIV 路径 |
| 27 |
StampTfreeSplit |
把每个跨核 tpop 的 split 与 pipe id 复制到与之配对的 tfree 上 |
| 28 |
NormalizeReturnOrder |
把每个 InCore 函数的返回元组重排为规范顺序 |
| 29 |
SkewCrossCorePipeline |
对混合 cube/vector 循环做软流水,使两个核重叠执行 |
| 30 |
LowerPipelineToSlots |
把 pl.pipeline 循环体改为轮转一个分配的多个 slot,而不是复制(memory_planner=PTOAS) |
| 31 |
LowerPipelineLoops |
把 pl.pipeline(N, stage=F) 的循环体复制 F 份以启用乒乓缓冲 |
| 32 |
CanonicalizeIOOrder |
按 scalar → load → compute → store 阶梯重排流水循环体内的语句 |
| 33 |
MaterializeTensorStrides |
为每个尚无 stride 的 tensor view 填入紧致规范 stride |
| 34 |
InitMemRef |
初始化 MemRef 并创建地址未分配的 alloc 操作 |
| 35 |
MaterializeSemanticAliases |
强制语义要求同一分配的缓冲区真正共用一块(循环携带、原地更新) |
| 36 |
MemoryReuse |
基于生命周期分析复用缓冲区并删除冗余 alloc |
| 37 |
AllocateMemoryAddr |
为已有 alloc 操作分配真实地址 |
| 38 |
FoldNoOpReshape |
折叠既不改变物理形状也不改变分配的 tile.reshape |
| 39 |
FuseCreateAssembleToSlice |
把 tensor.create + tensor.assemble 融合为单个 tensor.slice 视图 |
| 40 |
LowerL2TensorCollectives |
把写在 CHIP orchestration 函数体里的托管集合通信改写成一个本地 builtin AIV task,不按设备扇出,也不产生嵌套 L2 dispatch |
| 41 |
DeriveCallDirections |
先物化包装函数的 ParamDirection,再为每个调用逐实参推导 ArgDirection |
| 42 |
AutoDeriveTaskDependencies |
推导保守的任务间依赖边 |
| 43 |
ExpandManualPhaseFence |
压缩 manual scope 中收益明确的全数组 TaskId 依赖 |
| 44 |
SynthesizeAllReduceSignals |
把 host allreduce 的可选 signal 转为显式的内部 signal IR |
| 45 |
MaterializeCommDomainScopes |
在每个 host 编排函数体内装配 WindowBuffer 与 CommDomainScopeStmt 包装 |
| 46 |
LowerHostTensorCollectives |
把 host 级 tensor 集合通信改写为内部 builtin chip 派发 |
| 47 |
MaterializeDistTensorCtx |
为每个 DistributedTensor 物化显式的 CommCtx 参数与实参 |
| 48 |
LegalizeGraphBoundary |
把 Graph 函数体内派生的边界标量外提到调用点,并拒绝 host_build_graph runtime 无法录制的边界 |
| 49 |
MaterializeRuntimeScopes |
插入 AUTO RuntimeScopeStmt 使编排 codegen 能 1:1 发射 SIMPLER_SCOPE |
| 50 |
ClassifyIterArgCarry |
把编排层 ForStmt 的每个 iter_arg 分类为平凡别名或需物化的重绑定携带 |
| 51 |
InsertCommFence |
为每个发布性写入打标记(本地:region system.cacheinvalid + system.fence;远端写:仅 fence;opaque 写:whole-GM),并为每个 wait 插入 whole-GM system.cacheinvalid;notify 本身不加任何标记 |
| 52 |
MaterializeValidShapeSymbols |
将设备 kernel 中无法绑定的 valid_shape 符号转换为前置的 Scalar[INDEX] 参数,并传入调用方的实际有效范围 |