# Tilelang Pass Analyzer

> TileLang Pass 功能分析与对比工具。触发条件：(1) 用户询问特定 pass 的功能、作用、原理、实现细节，关键词包括"XXpass是干什么的"、"介绍XXpass"、"XXpass的功能"、"XXpass怎么实现的"、"分析XXpass"；(2) 对比两个 pass 的差异、联系；(3) 查询某类 pass 列表；(4) 模糊匹配 pass 名称。支持精确匹配和模糊匹配，返回由浅入深的 Markdown 分析报告，包含伪代码、IR 变换示例、代码位置等。

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

---


# TileLang Pass 分析工具

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

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

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

**执行规则：**
```
用户首次提问 Pass 功能
  ↓
1. 立即读取 reference 文件（pass-registry-*.md / pass-classification.md）
  ↓
2. 基于 reference 信息生成报告（足够回答 90% 的查询）
  ↓
3. 仅在用户追问"具体实现"、"源码细节"、"某个函数逻辑"时才读取源码
```

**禁止行为：**
- ❌ 首次回答就读取 `src/transform/*.cc` 源码文件
- ❌ 忽略 reference 文件中的已有信息
- ❌ 过度深入分析辅助工具类（首次回答时）
- ❌ 首次回答就并行读取 reference 和源码

---

## 核心工作流程

### Step 1: 解析用户意图

根据用户输入判断查询类型：

| 意图类型 | 关键词特征 | 处理方式 |
|---------|-----------|---------|
| 单 Pass 分析 | "XX pass 是做什么的"、"分析 XX pass"、"XX 的功能" | 查 registry → 分析代码 → 生成报告 |
| 双 Pass 对比 | "XX 和 YY 的区别"、"对比 XX YY"、"XX YY 的差异" | 生成对比报告（每节对比） |
| 双 Pass 联系 | "XX 和 YY 的联系"、"XX YY 的关系"、"XX YY 协作" | 生成联系报告（每节分析关系） |
| 分类查询 | "XX 类的 pass"、"内存相关 pass"、"Ascend pass 有哪些" | 查 classification → 列表报告 |
| 模糊匹配 | "sync 相关"、"vector pass"、"那个插入同步的" | 搜索 → 返回候选列表 |

---

### Step 2: Pass 定位

**精确匹配：**
```
1. 读取 references/pass-registry-ascend.md 或 pass-registry-general.md
2. 根据名称获取：C++ 文件路径、Python 函数名、配置键
3. 定位到具体文件
```

**模糊匹配策略：**
```
1. 提取用户输入的关键词（去除 pass、transform 等通用词）
2. 在 registry 中搜索名称包含关键词的所有 pass
3. 返回候选列表（最多 5 个）：序号、名称、简述、分类
4. 提示用户选择序号或输入完整名称
```

**分类查询：**
```
1. 读取 references/pass-classification.md
2. 根据用户指定的分类（如"内存管理"、"同步"、"Ascend平台"）返回列表
3. 按子分类组织输出
```

---

### Step 3: 代码分析（仅在用户追问深入时执行）

**⚠️ 重要：首次提问时跳过此步骤，仅使用 reference 文件信息。**

仅在用户追问以下问题时才执行此步骤：
- "某个函数的具体实现"
- "源码中的某个细节"
- "算法的具体逻辑"
- "某个配置项的作用"

按以下顺序分析 Pass 实现：

**1. Python API 层**
- 文件：`tilelang/transform/__init__.py`
- 提取：函数签名、docstring、参数

**2. C++ 实现层**
- 文件：`src/transform/<pass_name>.cc`
- 提取：
  - 文件头注释 `/*! \file ... */`
  - 主类名（通常继承 `IRMutatorWithAnalyzer`、`StmtExprVisitor` 等）
  - 核心方法名（如 `Substitute`、`VisitStmt`、`VisitExpr`）
  - 注册宏 `TVM_REGISTER_PASS_CONFIG_OPTION` 或 `TVM_REGISTER_GLOBAL`

**3. 配置层**
- 文件：`tilelang/transform/pass_config.py`
- 提取：配置键名、默认值、描述

**分析方法：**
```
- 快速浏览文件头注释，理解 pass 目标
- 找到主类的 Substitute 或 VisitXxx 方法，理解核心逻辑
- 分析算法流程：遍历 → 匹配 → 变换 → 输出
- 查看 common/ 目录下的辅助工具类
```

---

### Step 4: 报告生成

根据查询类型选择模板：

| 查询类型 | 模板选择 |
|---------|---------|
| 单 Pass 分析 | 使用【单 Pass 分析报告模板】 |
| 双 Pass 对比 | 使用【双 Pass 对比报告模板】 |
| 双 Pass 联系 | 使用【双 Pass 联系报告模板】 |
| 分类查询 | 使用【分类查询报告模板】 |
| 模糊匹配 | 使用【模糊匹配候选列表模板】 |

**通用风格要求：**
```
✅ 由浅入深：先一句话总结，再逐步展开细节
✅ 伪代码精简：不超过 10 行，每个关键步骤标注函数名和备注
✅ IR 示例清晰：简化结构，标注变化点
✅ 核心函数标识：指出函数名，不引用完整代码片段
✅ 伪 IR 说明：首次使用时标注"本示例为伪 IR"，真实 TIR 格式见 ir-examples.md
```

---

## 伪代码编写规范

**格式模板：**
```python
# 伪代码示例 (精简版)

输入: PrimFunc / IR Module
处理流程:
  1. 遍历 IR 结构 → VisitStmt()           # [备注: 深度优先遍历每个语句]
  2. 匹配目标模式 → MatchPattern()        # [备注: 检查是否为特定 op/buffer 类型]
  3. 执行变换操作 → TransformStmt()       # [备注: 生成新的 IR，保持语义等价]
输出: 变换后的 PrimFunc

# 关键点备注
- VisitStmt: 继承 IRMutatorWithAnalyzer，访问 Stmt 节点
- MatchPattern: 检查 buffer scope、op type 等属性
- TransformStmt: 根据规则生成新语句，可能涉及同步/地址映射等
```

**编写规则：**
- 每个关键步骤标注对应的 C++ 函数名
- 用 `# [备注: ...]` 说明该步骤的作用或决策依据
- 总行数不超过 10 行
- 输入/输出明确标注类型

---

## IR 示例编写规范

参考 `references/ir-examples.md` 的格式。

**基本格式：**
```
**输入伪 IR：**
# 变换前状态（简要说明）
[简化 IR 结构]

**输出伪 IR：**
# 变换后状态（简要说明）
[简化 IR 结构，用 ← 标注变化点]

**变换要点：**
- [变化点1]
- [变化点2]
```

**注意事项：**
- 首次使用伪 IR 时，添加说明：`本示例为伪 IR 格式，真实 TIR 结构见 ir-examples.md`
- 只保留关键元素，不超过 10 行
- 用 `←` 标注新增/修改，用 `# [备注]` 添加说明

---

## 报告模板

以下模板用于生成不同类型的 Pass 分析报告。

---

### 模板一：单 Pass 分析报告

```markdown
# [Pass名称] 功能分析报告

## 一句话总结
> [核心功能概括，不超过 30 字]

## 功能详解

### 1. 作用与目的
[解决的问题和必要性]

### 2. 工作原理
输入: PrimFunc → 遍历 IR → 匹配模式 → 执行变换 → 输出: PrimFunc
核心函数: [函数名1]、[函数名2]

### 3. IR 变换示例
变换前: [简化IR] → 变换后: [简化IR，←标注变化]
要点: [变化点1]、[变化点2]

### 4. 使用场景与触发条件
| 项目 | 说明 |
| 适用平台 | Ascend 专用 / 通用 |
| 启用配置 | `配置键` (默认值) |
| 触发时机 | 编译阶段 |

### 5. Pass 关系与工作流
如需了解本 Pass 在 Pipeline 中的位置、与其他 Pass 的依赖关系，请使用 **tilelang-pass-workflow-analyzer** skill。

## 代码位置
| 组件 | 路径 | 核心元素 |
| Python API | `路径` | `函数名()` |
| C++ 实现 | `路径` | `类名::方法` |
| 配置项 | `路径` | `配置键` |
```

---

### 模板二：双 Pass 对比报告

```markdown
# [Pass1] 与 [Pass2] 对比分析报告

## 一句话总结
> [共同点和核心差异，不超过 40 字]

## 功能对比

### 1. 作用与目的对比
| 维度 | [Pass1] | [Pass2] |
| 核心目标 | [简述] | [简述] |
| 解决问题 | [简述] | [简述] |

### 2. 工作原理对比
| Pass | 输入 | 处理 | 输出 |
| [Pass1] | ... | [函数名] | ... |
| [Pass2] | ... | [函数名] | ... |
关键差异: [差异点1]、[差异点2]

### 3. IR 变换对比
| Pass | 变换前 | 变换后 |
| [Pass1] | [IR] | [IR，←变化] |
| [Pass2] | [IR] | [IR，←变化] |

### 4. 使用场景对比
| 维度 | [Pass1] | [Pass2] |
| 适用平台 | ... | ... |
| 启用配置 | `key1` | `key2` |

### 5. 关系分析
执行顺序: [PassA] → [PassB] (原因: ...)
数据依赖: [Pass1] 提供 [数据] → [Pass2]
协作方式: 共同完成 [目标]
冲突限制: [限制条件]

## 代码位置对比
| Pass | Python API | C++ 实现 | 配置项 |
| [Pass1] | `路径` | `路径` | `key1` |
| [Pass2] | `路径` | `路径` | `key2` |
```

---

### 模板三：双 Pass 联系报告

```markdown
# [Pass1] 与 [Pass2] 关系分析报告

## 一句话总结
> [协作关系概括]

## 关系分析

### 1. 作用与目的的联系
共同目标: [共同服务的目标]
分工协作: [Pass1] 负责 [职责1]，[Pass2] 负责 [职责2]

### 2. 工作原理的联系
数据流: [Pass1] → 输出: [数据] → [Pass2] 输入
依赖关系: [Pass1] 提供 [内容]，[Pass2] 需要 [内容]

### 3. IR 变换联系
Pass1 输出: ... (提供给 Pass2) → Pass2 输入: ... (来自 Pass1)
整体效果: [组合后的效果]

### 4. 执行顺序与触发
执行顺序: ... → [Pass1] → ... → [Pass2] → ...
顺序原因: [必须按此顺序的原因]

### 5. 协作场景
典型场景: [具体协作场景]
协作效果: [对比单独使用的效果]

## 代码位置
| Pass | Python API | C++ 实现 | 配置项 |
| [Pass1] | `路径` | `路径` | `key1` |
| [Pass2] | `路径` | `路径` | `key2` |
```

---

### 模板四：分类查询报告

```markdown
# Pass 分类查询报告：[分类名称]

## 分类概述
> [该类 Pass 的共同特征]

## Pass 列表

### [子分类1]
| Pass 名称 | 功能简述 | 配置项 |
| [Pass1] | [描述] | `配置键` |
| [Pass2] | [描述] | `配置键` |

### [子分类2]
...

## 典型使用场景
场景1: [描述] → 推荐组合: [PassA]+[PassB]
```

---

### 模板五：模糊匹配候选列表

```markdown
# Pass 匹配结果

根据关键词 "**[用户输入]**" 找到以下候选 Pass：

| 序号 | Pass 名称 | 功能简述 | 所属分类 |
| 1 | [Pass1] | [描述] | [分类] |
| 2 | [Pass2] | [描述] | [分类] |
| 3 | [Pass3] | [描述] | [分类] |

请选择你想了解的 Pass（输入序号 1-3 或完整名称）：
```

---

## Reference 文件使用指南

本 skill 包含以下 reference 文件，按需查阅：

| 文件 | 用途 | 使用时机 |
| `pass-registry-ascend.md` | Ascend Pass 名称→路径 | 精确匹配 Ascend pass |
| `pass-registry-general.md` | 通用 Pass 名称→路径 | 精确匹配通用 pass |
| `pass-classification.md` | Pass 分类索引 | 分类查询 |
| `ir-examples.md` | IR 变换示例 | 编写 IR 示例 |

---

## 注意事项

1. **⭐ 分阶段信息获取**：首次回答只读 reference，追问细节才读源码
2. **伪 IR 格式说明**：首次使用时添加说明，后续无需重复
3. **模糊匹配**：最多返回 5 个候选，按相关性排序
4. **双 Pass 报告**：对比报告每节对比，联系报告每节分析关系
5. **代码位置**：尽量提供行号，核心元素指函数名、类名、配置键
6. **分析深度**：不深入分析辅助工具类，聚焦主类和核心方法
7. **Pass 工作流查询**：
   - 当用户询问 Pass 执行顺序、依赖关系、Pipeline 架构时，引导使用 **tilelang-pass-workflow-analyzer** skill
   - 本 skill 专注于单个 Pass 的功能分析，不深入分析 Pass 之间的关系
