# Tilelang Pass Design

> 根据 Pass 需求生成 TileLang-Ascend Pass 设计文档（pass-design.md）。涵盖 Pass 定位分析（Phase 1/2归属、Pipeline位置、依赖关系）、IR 变换设计、C++ 实现方案、测试方案、风险分析等。触发关键词：设计 Pass、Pass 设计文档、写 Pass、实现 Pass、添加 Pass、新建 Pass、Pass 设计、开发 Pass。

- Skill: `tile-ai/tilelang-pass-design` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add tile-ai/tilelang-pass-design`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tile-ai/tilelang-pass-design/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-design

---


# TileLang-Ascend Pass 设计文档生成 Skill

---

## 1. 目标

根据 Pass 需求信息，生成一份完整的 TileLang-Ascend Pass 设计文档（`pass-design.md`），涵盖以下核心决策：

- **Pass 定位**：Phase 1 / Phase 2 归属、Pipeline 具体位置
- **依赖分析**：上游 Pass 输入、下游 Pass 输出、数据流传递
- **IR 变换设计**：输入 IR 结构、输出 IR 结构、变换逻辑
- **实现方案**：C++ 类设计、核心方法、Python Wrapper、Pipeline 集成
- **测试方案**：功能测试、依赖测试、边界测试
- **风险分析**：已知约束、常见错误、与其他 Pass 的交互

---

## 2. 输入要求

### 必需信息

| 字段 | 说明 |
|------|------|
| Pass 名称 | 如 `BufferReuseOptimizer`、`L0CLayoutOptimization` |
| 功能描述 | Pass 要解决的问题和目标 |
| IR 变换类型 | 修改 IR / 收集信息 / 验证 IR |
| 平台范围 | 平台无关 / Ascend 特定 |

**提问规则（必须严格遵守）**：
1. **每次只询问一个字段**：使用 `question` 工具时，`questions` 数组中只包含一个元素
2. **按表格顺序依次询问**：Pass 名称 → 功能描述 → IR 变换类型 → 平台范围
3. **已提供的字段跳过**：如果用户在初始请求中已提供某个字段的值，跳过该字段继续下一个

### 推荐信息

| 字段 | 说明 |
|------|------|
| 参考 Pass | 可参考的现有 Pass 名称 |
| 输入数据依赖 | Pass 需要哪些 attrs（如 `buffer_shapess`、`address_map`） |
| 输出数据供给 | Pass 产生哪些 attrs 供下游使用 |
| 性能目标 | Pass 对编译时间或生成代码性能的影响 |

---

## 3. 工作流程

### Phase 1：需求澄清

1. 解析用户提供的 Pass 需求信息
2. 检查必需字段是否完整
3. **按顺序逐一提问补全缺失字段**（每次只问一个）

### Phase 2：信息收集

1. **查阅 Pass 定位参考资料**：
   - `tilelang-pass-workflow-analyzer/references/pass-pipeline-overview.md` - Pipeline 架构
   - `tilelang-pass-workflow-analyzer/references/new-pass-placement-guide.md` - 定位决策流程
   - `tilelang-pass-workflow-analyzer/references/pass-dependency-graph.md` - 依赖关系

2. **查阅 Pass 实现参考资料**：
   - `tilelang-pass-analyzer/references/pass-registry-ascend.md` - 类似 Pass 实现
   - `tilelang-pass-analyzer/references/ir-examples.md` - IR 变换示例格式

3. **查阅本 skill 的实现模式参考**：
   - `references/pass-impl-patterns.md` - C++ 类模板、注册方式

### Phase 3：Pass 定位分析

按照 `new-pass-placement-guide.md` 的决策流程：

**Step 1：分析 Pass 功能**
- Pass 的主要功能是什么？
- Pass 修改 IR 还是收集信息？
- Pass 是平台无关还是 Ascend 特定？
- Pass 属于哪类优化（Lowering / 合法化 / 内存 / 流水线 / 同步 / 其他）？

**Step 2：分析依赖关系**
- Pass 需要哪些输入数据（attrs）？
- 这些数据由哪个 Pass 产生？
- Pass 产生哪些输出数据？
- 这些数据由哪个 Pass 使用？

**Step 3：确定阶段归属**
- DSL Lowering / IR 合法化 → Phase 1
- 硬件优化 / 内存优化 / 同步优化 → Phase 2
- 输入数据来自 Phase 1 → 可在 Phase 1 或 Phase 2
- 输入数据来自 Phase 2 → 必须在 Phase 2

**Step 4：确定具体位置**
- 依赖优先：Pass 必须在产生其输入数据的 Pass 后执行
- 供给优先：Pass 必须在使用其输出数据的 Pass 前执行
- 功能相邻：将 Pass 放在功能相似的 Pass 附近

### Phase 4：生成 pass-design.md

基于 `templates/pass-design-template.md` 模板，填充所有章节：

1. 概述
2. Pass 定位
3. IR 变换设计
4. 实现方案
5. 测试方案
6. 风险点与注意事项
7. 交付清单

### Phase 5：质量自检

按照 §5 中的自检清单逐项检查，确保文档质量。

### Phase 6：针对性修订

仅修正未通过自检的项目。信息确实不足的标注为「待确认」并说明原因。

### Phase 7：输出与关联引导

1. 将 `pass-design.md` 输出到当前目录或用户指定路径
2. 若文件已存在，询问是否覆盖
3. **关联引导**：提示用户可使用相关 skill 查看详细信息

---

## 4. 定位决策速查表

### 阶段归属速查

| Pass 功能特征 | 阶段归属 | 理由 |
|-------------|---------|------|
| DSL Lowering | Phase 1 | 将高级 DSL 转换为底层 IR |
| IR 合法化 | Phase 1 | 确保 lowered IR 符合规范 |
| 信息收集 | Phase 1 或 Phase 2 | 根据收集时机决定 |
| 硬件优化 | Phase 2 | 针对 Ascend 硬件特性优化 |
| 内存优化 | Phase 2 | 利用硬件内存层级优化 |
| 流水线优化 | Phase 2 | 多核流水线规划 |
| 同步优化 | Phase 2 | 多核同步策略 |

### 典型定位场景

| Pass 功能特征 | 推荐位置 |
|-------------|---------|
| IR 合法化检查 | Phase 1 末尾 |
| 新 Tile 操作 Lowering | Phase 1，`LowerTileOp` 后 |
| 内存优化 | Phase 2，`AscendStorageRewrite` 后，`AscendMemoryPlanning` 前 |
| 同步优化 | Phase 2，`AscendMemoryPlanning` 后，`AscendSyncInsert` 前 |
| 流水线优化 | Phase 2，`PipelinePlanning` 后 |
| 信息收集 | 根据收集内容类型决定 |

### 关键数据依赖

| 输入数据 | 产生 Pass | 阶段 |
|---------|-----------|------|
| `buffer scope` | `AscendInferBufferScope` | Phase 1 |
| `buffer_shapess` | `CollectBufferShapes` | Phase 1 |
| `address_map` | `AscendMemoryPlanning` | Phase 2 |
| `size_map` | `AscendMemoryPlanning` | Phase 2 |

---

## 5. 质量自检清单

生成 `pass-design.md` 后，逐项检查：

| # | 检查项 | 是否必须通过 |
|---|--------|-------------|
| 1 | **阶段归属有明确结论和理由**：不是「视情况而定」 | ✅ 必须 |
| 2 | **Pipeline 位置具体到步骤**：如「Phase 2 步骤 13，在 X Pass 后」 | ✅ 必须 |
| 3 | **依赖关系完整**：上游 Pass + 下游 Pass + 数据传递 | ✅ 必须 |
| 4 | **IR 变换有输入/输出示例**：伪 IR 格式，标注变化点 | ✅ 必须 |
| 5 | **C++ 类名和核心方法明确**：具体到类名和关键方法名 | ✅ 必须 |
| 6 | **Pipeline 集成代码完整**：包含集成到 `phase.py` 的代码片段 | ✅ 必须 |
| 7 | **无占位符或模糊描述**：无 `{placeholder}`、TODO、「待补充」 | ✅ 必须 |

**通过条件**：所有必须项全部通过。

---

## 6. 信息源优先级

| 优先级 | 信息源 | 用途 |
|--------|--------|------|
| 1 | `tilelang-pass-workflow-analyzer/references/` | Pass 定位、依赖分析 |
| 2 | `tilelang-pass-analyzer/references/` | Pass 实现参考、IR 变换示例 |
| 3 | `references/pass-impl-patterns.md`（本 skill） | C++ 类模板、注册方式 |
| 4 | `tilelang/engine/phase.py` | Pipeline 集成参考 |
| 5 | `src/transform/*.cc` | 典型实现模式（仅在追问时使用） |

**冲突处理**：当信息源之间矛盾时，以 `pass-pipeline-overview.md` 和 `new-pass-placement-guide.md` 为准。

---

## 7. 错误处理

| 场景 | 处理方式 |
|------|----------|
| 用户未提供 Pass 名称 | 提问补全 |
| 必需字段缺失 | 列出缺失项，逐一提问 |
| 无法确定阶段归属 | 分析依赖关系后给出推荐方案，标注为「需确认」 |
| 目标文件已存在 | 询问用户是否覆盖或另存 |
| Pass 功能过于复杂 | 建议拆分为多个子 Pass 分别设计 |

---

## 8. 完成报告与关联引导

文档生成完成后，输出以下格式的报告：

```
## Pass 设计文档生成报告

- Pass 名称: {Pass 名称}
- 阶段归属: {Phase 1 / Phase 2}
- Pipeline 位置: {具体位置描述}
- IR 变换类型: {修改 IR / 收集信息 / 验证 IR}
- 输出路径: {文件路径}

### 自检结果
1. 阶段归属明确: ✅ / ❌
2. Pipeline 位置具体: ✅ / ❌
3. 依赖关系完整: ✅ / ❌
4. IR 变换示例清晰: ✅ / ❌
5. C++ 实现方案明确: ✅ / ❌
6. Pipeline 集成代码完整: ✅ / ❌
7. 无占位符: ✅ / ❌

### 待确认项
- {列出需要用户进一步确认的内容}

### 后续步骤建议
1. 查看详细 Pass 工作流：使用 **tilelang-pass-workflow-analyzer** skill
2. 查看类似 Pass 实现：使用 **tilelang-pass-analyzer** skill
3. 开始实现 Pass：使用 **tilelang-pass-generate** skill
```

---

## 9. 参考资料

本 skill 依赖以下参考文件：

| 文件 | 路径 | 用途 |
|------|------|------|
| Pass 定位指南 | `tilelang-pass-workflow-analyzer/references/new-pass-placement-guide.md` | 定位决策流程 |
| Pipeline 架构 | `tilelang-pass-workflow-analyzer/references/pass-pipeline-overview.md` | 阶段划分、Pass 列表 |
| 依赖关系图 | `tilelang-pass-workflow-analyzer/references/pass-dependency-graph.md` | 数据流分析 |
| Pass 注册表 | `tilelang-pass-analyzer/references/pass-registry-ascend.md` | 类似 Pass 参考 |
| IR 示例 | `tilelang-pass-analyzer/references/ir-examples.md` | IR 变换格式 |
| 实现模式 | `references/pass-impl-patterns.md`（本 skill） | C++ 模板代码 |

---

## 10. 与其他 Skill 的关系

| Skill | 关系 | 使用时机 |
|------|------|----------|
| `tilelang-pass-workflow-analyzer` | 依赖 | 查阅 Pipeline 架构、Pass 定位、依赖关系 |
| `tilelang-pass-analyzer` | 依赖 | 查阅现有 Pass 实现细节、IR 变换示例 |
| `tilelang-pass-generate` | 后续 | 根据设计文档生成 Pass 代码（先输出 `pass-impl-skeleton.md` 框架，再落 C++/Python/Pipeline/测试） |
