# Tilelang Pass Workflow Analyzer

> TileLang Ascend Pass 工作流分析。用于理解 Pass 之间的关系、执行顺序、数据依赖，以及帮助定位新 Pass 应该在哪里添加。触发时机：用户询问 Pass pipeline、Pass 执行顺序、Pass 之间的关系、如何添加新 Pass、Pass 依赖关系、"Pass 工作流"、"Pass 顺序"、"在哪里加 Pass" 等关键词时。

- Skill: `tile-ai/tilelang-pass-workflow-analyzer` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add tile-ai/tilelang-pass-workflow-analyzer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tile-ai/tilelang-pass-workflow-analyzer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: tile-ai (https://skillmd.com/u/tile-ai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tile-ai/tilelang-pass-workflow-analyzer

---


# TileLang Pass 工作流分析 Skill

## ⭐ 核心约束：分阶段信息获取

**严格遵守以下信息获取优先级：**

| 查询阶段 | 信息来源 | 工具使用 |
|---------|---------|---------|
| **首次回答** | ✅ **优先使用 reference 文件** | `read(references/*.md)` |
| 用户追问深入细节 | ✅ **读取源码补充** | `read(tilelang/engine/phase.py)` |

**执行规则：**
```
用户首次提问 Pass 工作流
  ↓
1. 立即读取 reference 文件（pass-pipeline-overview.md / pass-dependency-graph.md）
  ↓
2. 基于 reference 信息生成报告（足够回答 90% 的查询）
  ↓
3. 仅在用户追问"具体实现"、"源码细节"时才读取源码
```

**禁止行为：**
- ❌ 首次回答就读取源码文件
- ❌ 忽略 reference 文件中的已有信息
- ❌ 首次回答就并行读取 reference 和源码

---

## 核心目标

这个 skill 用于：
1. **串联 Pass 关系** - 展示 Pass 之间的依赖关系和数据流传递
2. **解释 Pipeline 架构** - 说明两阶段编译流程及其设计原理
3. **定位新 Pass** - 帮助用户确定新 Pass 应该添加在 Pipeline 的哪个位置

**与 tilelang-pass-analyzer 的区别：**
- `tilelang-pass-analyzer`：侧重于单个 Pass 的功能、原理、实现细节
- `tilelang-pass-workflow-analyzer`：侧重于 Pass 之间的关系、整体工作流、新 Pass 定位

## 工作流程

当用户提出与 Pass 工作流相关的询问时，按照以下步骤响应：

### Step 1: 识别用户意图

判断用户是想要：
- **了解整体架构** → 提供 Pipeline overview
- **理解 Pass 关系** → 展示依赖关系图
- **添加新 Pass** → 提供定位指南和建议
- **查询特定阶段** → 定位到具体阶段并解释

### Step 2: 选择合适的分析方式

根据意图，使用以下工具：

| 用户意图 | 参考文档 | 分析方式 |
|---------|---------|---------|
| 了解整体架构 | `references/pass-pipeline-overview.md` | 展示两阶段架构图，解释设计原理 |
| 理解 Pass 关系 | `references/pass-dependency-graph.md` | 展示依赖关系图，说明数据传递 |
| 添加新 Pass | `references/new-pass-placement-guide.md` | 分析 Pass 功能特征，给出定位建议 |
| 查询特定阶段 | 根据阶段名称查找 | 定位到具体 Pass，展示上下游关系 |

### Step 3: 提供分析报告

输出格式：

```markdown
# Pass 工作流分析报告

## 用户问题
[用户的具体问题]

## 分析结果

### [根据意图提供对应内容]

### 关键要点
- [要点 1]
- [要点 2]

### 建议操作
[如果用户要添加新 Pass，给出具体建议]
```

## 两阶段 Pipeline 架构概要

TileLang-Ascend 采用两阶段编译流程：

```
Python DSL (@tilelang.jit)
    ↓
[Phase 1: LowerAndLegalize] ← 前端标准化、Lowering
    - 目标：将高级 DSL 转换为标准化 TIR
    - 特点：语义保持、平台无关优化
    ↓
[Phase 2: OptimizeForTarget] ← 后端优化、平台特化
    - 目标：针对 Ascend 硬件特性的优化
    - 特点：硬件相关、性能导向
    ↓
CANN 工具链 → NPU 执行
```

**详细架构请查阅：** `references/pass-pipeline-overview.md`

## Pass 依赖关系核心概念

### 数据传递方式

Pass 之间通过 `PrimFunc` attrs 传递数据：

| 数据名称 | Attr 键 | 产生 Pass | 消费 Pass |
|---------|---------|-----------|-----------|
| Buffer Scope | buffer annotations | `AscendInferBufferScope` | `CrossCorePipeline`, `CombineCV` |
| Buffer Shapes | `buffer_shapess` | `CollectBufferShapes` | `AscendMemoryPlanning` |
| Address Map | `address_map` | `AscendMemoryPlanning` | `AscendSyncInsert` |
| Size Map | `size_map` | `AscendMemoryPlanning` | `AscendSyncInsert` |

**详细依赖关系请查阅：** `references/pass-dependency-graph.md`

## 新 Pass 定位指南核心原则

### 定位原则

添加新 Pass 时，遵循以下原则：

1. **功能归属** - Pass 的功能属于哪个阶段？
   - 前端 Lowering → Phase 1 (LowerAndLegalize)
   - 后端优化 → Phase 2 (OptimizeForTarget)

2. **数据依赖** - Pass 需要哪些输入数据？
   - 识别上游 Pass 产生的 attrs
   - 确保上游 Pass 已经执行

3. **输出供给** - Pass 产生哪些输出数据？
   - 识别下游 Pass 需要的 attrs
   - 确保下游 Pass 可以访问

4. **语义范围** - Pass 是平台无关还是平台特定？
   - 平台无关 → Phase 1
   - Ascend 特定 → Phase 2

### 典型定位场景

| Pass 功能特征 | 推荐位置 | 理由 |
|-------------|---------|------|
| IR 合法化检查 | Phase 1 末尾 | 确保 lowered IR 正确性 |
| 新 Tile 操作 lowering | Phase 1，`LowerTileOp` 后 | 紧跟核心 lowering pass |
| 内存优化 | Phase 2，`AscendStorageRewrite` 后 | 利用 memory planning 信息 |
| 同步优化 | Phase 2，`AscendSyncInsert` 前 | 为 sync insert 提供信息 |

**详细定位指南请查阅：** `references/new-pass-placement-guide.md`

## 参考资料

当需要详细信息时，查阅以下文档：

- **Pipeline 架构详解**：`references/pass-pipeline-overview.md`（两阶段架构、每个阶段的 Pass 列表、设计原理）
- **依赖关系图**：`references/pass-dependency-graph.md`（数据流、依赖链、关键 Pass 之间的关系）
- **新 Pass 定位指南**：`references/new-pass-placement-guide.md`（定位原则、典型场景、案例分析）
- **已有 Pass 注册表**：`.agents/skills/tilelang-pass-analyzer/references/pass-registry-ascend.md`（所有 Pass 的详细信息）

## 输出报告模板

当用户询问 Pass 工作流时，使用以下模板生成报告：

```markdown
# Pass 工作流分析报告

## 问题类型
[整体架构 / Pass 关系 / 新 Pass 定位 / 特定阶段查询]

## 核心分析

### [根据问题类型提供对应分析]

#### [具体分析内容]
- [要点 1]
- [要点 2]
- [要点 3]

## 数据流分析

### 输入依赖
- [上游 Pass 1]: [提供的数据 1]
- [上游 Pass 2]: [提供的数据 2]

### 输出供给
- [下游 Pass 1]: [需要的数据 1]
- [下游 Pass 2]: [需要的数据 2]

## 定位建议

### 推荐位置
[具体位置描述，如 "Phase 2，在 Pass X 和 Pass Y 之间"]

### 理由
1. [理由 1]
2. [理由 2]

### 需要注意的依赖
- [依赖说明 1]
- [依赖说明 2]

## 实现建议

### 参考实现
可以参考以下 Pass 的实现：
- [Pass A]: [文件路径]
- [Pass B]: [文件路径]

### 关键步骤
1. C++ 实现：[说明]
2. Python Wrapper：[说明]
3. Pipeline 集成：[说明]

## 相关文件路径
- Pipeline 定义：`tilelang/engine/phase.py`
- Pass 注册：`src/transform/*.cc`
- Python API：`tilelang/transform/__init__.py`
```

## 使用示例

### 示例 1: 用户询问整体架构

**用户问题**: "整个 Pass pipeline 是怎么组织的？"

**响应策略**:
1. 读取 `references/pass-pipeline-overview.md`
2. 展示两阶段架构图
3. 解释 Phase 1 和 Phase 2 的设计原理
4. 提供关键 Pass 的简要说明

### 示例 2: 用户询问 Pass 关系

**用户问题**: "AscendMemoryPlanning 和 AscendSyncInsert 有什么关系？"

**响应策略**:
1. 读取 `references/pass-dependency-graph.md`
2. 展示数据流：`AscendMemoryPlanning` → `address_map` → `AscendSyncInsert`
3. 解释依赖关系：Sync Insert 需要 Memory Planning 提供的地址映射
4. 说明如果要在它们之间添加新 Pass，需要注意数据传递

### 示例 3: 用户想添加新 Pass

**用户问题**: "我想加一个 Pass 来优化 L0C buffer 的数据布局，应该加在哪里？"

**响应策略**:
1. 读取 `references/new-pass-placement-guide.md`
2. 分析 Pass 功能特征：
   - 功能：优化 buffer 数据布局
   - 依赖：需要知道 buffer scope (L0C)
   - 平台：Ascend 特定
3. 推荐位置：Phase 2，在 `AscendStorageRewrite` 后
4. 理由：
   - `AscendStorageRewrite` 已经完成存储优化
   - 此时 buffer scope 和 shape 信息已经完备
   - 属于 Ascend 后端优化范畴
5. 给出实现建议和参考 Pass

## 注意事项

1. **区分单个 Pass 分析 vs 工作流分析**
   - 用户询问单个 Pass 功能 → 使用 `tilelang-pass-analyzer` skill
   - 用户询问 Pass 关系/工作流 → 使用此 skill

2. **优先展示关键信息**
   - 避免一次性输出过多细节
   - 先展示概要，再根据用户追问提供详细信息

3. **定位建议需明确**
   - 提供具体位置（如 "Phase 2，第 X 步，在 Pass Y 之后"）
   - 解释理由，不要只给出结论

4. **关联已有文档**
   - 充分利用 `tilelang-pass-analyzer` skill 的注册表文档
   - 当用户询问特定 Pass 时，引导其查看详细注册信息
