[Paper] MLIR‑Smith:一种用于评估编译器流水线的新型随机程序生成器
发布: (2026年1月5日 GMT+8 23:43)
7 min read
原文: arXiv
Source: arXiv - 2601.02218v1
Overview
本文介绍了 MLIR‑Smith,一个为可扩展的多层中间表示(MLIR)生态系统构建的随机程序生成器。通过自动生成多样的 MLIR 代码片段,该工具能够系统性地测试面向 MLIR 的编译器流水线,填补了早期生成器(如 Csmith)留下的空白。
关键贡献
- MLIR‑Smith generator – 首个开源随机程序生成器,能够原生生成跨任意方言的有效 MLIR。
- Differential testing framework – 集成的测试框架,可将生成的程序在多个后端(MLIR、LLVM、DaCe、DCIR)上运行并自动比较结果。
- Bug discovery – 作者利用该框架发现了真实编译器栈中的数十个正确性和性能缺陷。
- Extensibility model – 展示了如何以最小的工作量将新方言插件化到生成器中,支持 MLIR 的 “dialect‑as‑plugin” 哲学。
- Public artifacts – 所有源代码、测试语料库和脚本均在宽松许可证下发布,鼓励社区采纳。
方法论
- Program Sketching – MLIR‑Smith 从描述通用操作(例如算术、控制流、内存访问)的高级抽象语法树(AST)开始。
- Dialect Mapping – 对于每个操作,工具根据可配置的概率分布选择具体的 MLIR 方言(例如
arith、memref、linalg)。 - Random Parameterization – 类型、形状、循环界限和常量值从保证类型正确且避免未定义行为(例如除以零)的范围中抽样。
- Validity Checks – 轻量级类型检查器在生成的 IR 上运行,以确保其满足 MLIR 的不变式后再进行输出。
- Differential Execution – 将同一程序通过多个后端编译/执行。比较输出(或退出码);不匹配时会生成包含有问题的 IR 和最小复现案例的错误报告。
- Feedback Loop – 将检测到的错误按(语义、优化、代码生成)分类,并反馈给生成器,以便在未来的抽样中倾向于出现问题模式。
该流水线刻意保持简洁:不使用复杂的符号执行或约束求解,从而实现快速生成(每秒数百个程序),同时仍能覆盖广泛的语义空间。
结果与发现
- 覆盖率 – 生成了超过 10 k 个随机程序,涉及 30 多种不同的 MLIR 方言以及各种优化通道。
- 错误数量 – 差分测试活动发现 23 个 MLIR 核心错误,7 个 LLVM 的 MLIR‑to‑LLVM 降低阶段错误,5 个 DaCe 的代码生成错误,以及 3 个 DCIR 错误。许多是细微的语义错误,仅在特定的优化序列下才会显现。
- 性能洞察 – 某些生成的程序暴露出回归问题,即激进的循环融合通道会显著增加运行时间,凸显了更好成本模型的需求。
- 可扩展性 – 生成器随添加的方言数量线性扩展,验证了设计的模块化。
总体而言,研究结果验证了随机 MLIR 生成是对现代多方言编译器流水线的有效“压力测试”。
实际影响
- 持续集成 – 使用 MLIR‑Smith 的团队可以将其嵌入 CI 流水线,在问题到达用户之前捕获回归。
- 方言开发 – 新的方言作者可以使用生成器对其操作定义进行健全性检查,并验证现有的 Pass 能够优雅地处理它们。
- 优化验证 – 通过自动比较多个后端,开发者可以发现某些优化在一个目标上提升性能但在另一个目标上产生负面影响,从而制定更稳健的 Pass 顺序。
- 教育与调试 – 最小复现输出使新人更容易理解特定方言组合如何触发 bug,加速上手。
- 工具生态 – 由于 MLIR‑Smith 是开源且语言无关的,它可以作为更高级模糊测试器的基础(例如针对降至 MLIR 的领域特定语言)。
限制与未来工作
- 语义深度 – 生成器侧重于语法正确性;它并不保证有意义的计算语义(例如,避免死代码或琐碎循环)。
- 覆盖空白 – 由于缺乏专用随机器,某些高级方言(例如
gpu、tosa)的抽样受到限制。 - 性能指标 – 当前评估依赖输出相等性;更丰富的性能分析(例如缓存行为)留待未来扩展。
- 引导模糊测试 – 融入反馈驱动的变异(例如覆盖引导)可能提升漏洞发现效率。
作者计划扩大方言支持范围,集成覆盖引导技术,并探索对失败程序的自动最小化,以进一步简化调试工作流。
作者
- Berke Ates
- Filip Dobrosavljević
- Theodoros Theodoridis
- Zhendong Su
论文信息
- arXiv ID: 2601.02218v1
- 分类: cs.PL, cs.SE
- 出版时间: 2026年1月5日
- PDF: 下载 PDF