018、MLIR的Transform Dialect:IR的声明式变换 018、MLIR的Transform Dialect:IR的声明式变换从一次深夜调试说起凌晨两点,盯着屏幕上那段MLIR的IR,我差点把咖啡泼到键盘上。一个简单的循环融合优化,用Pattern Rewrite写了三百多行C++,跑起来却总是把循环体里的临时变量给优化没了。更糟的是,每次修改优化顺序,都要重新编译整个Pass Pipeline——编译一次五分钟,调试一次又五分钟,循环往复,像极了在泥潭里跑步。直到我在LLVM的邮件列表里看到有人提到Transform Dialect,说“你可以用MLIR来变换MLIR”。当时觉得这话像绕口令,但试过之后,我只想说:早该用这个了。Transform Dialect到底是什么简单说,Transform Dialect是MLIR生态里一个“元编程”工具——它允许你用MLIR的IR本身来描述对IR的变换操作。传统做法是写C++ Pass,编译成动态库,再通过mlir-opt的-pipeline参数调用。Transform Dialect把这套流程变成了声明式的:你写一段Transform IR,运行时解释执行,直接操作目标IR。别把Transform Dialect和Pass混淆。Pass是编译时确定的、静态的优化流程;Transform Dialect是运行时动态组合的、可交互的变换脚本。打个比方:Pass是写死的菜谱,Transform Dialect是你在厨房里根据