MLIR的Parser与Printer:文本格式与二进制格式
从一次凌晨三点的调试说起
上周五晚上,我在调试一个自定义的MLIR方言,把IR dump到文件里,第二天再load回来跑。结果Parser报了个“unexpected token”错误,定位到一行看起来完全正常的操作上。我盯着那行代码看了十分钟,最后发现是Printer输出时把某个属性类型缩写成了“i32”,而Parser在读取时默认把它当成了“si32”——一个根本不存在的类型。这个坑让我意识到,MLIR的文本格式和二进制格式之间的转换,远没有想象中那么简单。
如果你也在写自定义方言,或者正在把MLIR集成到生产环境中,这篇文章可能会帮你省下几个通宵。
文本格式:MLIR的“人类语言”
MLIR的文本格式(通常以.mlir结尾)是调试和开发阶段的主力。它看起来像这样:
module {
func.func @main(%arg0: i32) -> i32 {
%0 = arith.addi %arg0, %arg0 : i32
return %0 : i32
}
}
但别被它的“可读性”骗了。Parser在解析这段文本时,背后有一套严格的语法规则。我踩过最深的坑是属性(Attribute)的解析顺序。
属性解析的“先来后到”<
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/Jack010169/article/details/161851962



