016、MLIR的Parser与Printer:文本格式与二进制格式
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)的解析顺序。属性解析的“先来后到”