043、Dialect间转换(Conversion)的基本原理 043、Dialect间转换(Conversion)的基本原理从一次半夜的调试说起凌晨两点,盯着终端里那一串“AssertionisaLLVM::CallOp(op)failed”的报错,我喝了第三杯咖啡。问题出在一个自定义Dialect到LLVM Dialect的转换pass上——明明按照官方教程写的模式匹配,为什么生成的LLVM IR里会混进一个原Dialect的算子?这个bug让我意识到:很多人(包括当时的我)对MLIR中Dialect间转换的理解,停留在“写个RewritePattern就完事”的层面。直到被这个断言打脸,才老老实实去翻Conversion的源码和设计文档。Conversion的本质:不是“翻译”,是“降维”很多人把Dialect转换想象成“把中文翻译成英文”——找到对应关系,一对一替换就行。这是最大的误解。MLIR的Conversion机制,本质上是将一个高抽象层次的表示,逐步降维到低抽象层次的表示。这个“降维”过程包含三个核心动作:类型转换(TypeConverter)——高层的TensorType怎么变成MemRefType?复杂结构体怎么展平?值转换(Value Mapping)——转换前后的SSA值如何对应?一个操作产生多个结果时怎么映射?