031、SCF Dialect:结构化控制流(for, while, if)

031、SCF Dialect:结构化控制流(for, while, if)

从一次循环展开翻车说起

上个月调一个AI推理加速器后端,发现生成的LLVM IR里循环结构乱成一锅粥。明明MLIR前端写的是嵌套for循环,结果下游Pass一跑,循环边界被拆成标量加减,循环体里插满了条件跳转。调试器里单步走,PC指针像喝醉了酒——该循环的地方不循环,不该跳的地方乱跳。

后来定位到问题:前端生成的SCF(Structured Control Flow)操作被过早地降级成了CFG(Control Flow Graph)形式。SCF Dialect里那些漂亮的for、while、if结构,一旦被拆成基本块和跳转指令,后续优化Pass就再也认不出“这是一个循环”了。这个教训让我重新审视SCF的设计哲学——它不是为了“能跑”,而是为了“能被优化”。

SCF到底在解决什么问题

MLIR里最底层的控制流是Region + Block + BranchOp,这玩意儿跟LLVM IR的CFG本质上是一回事。但问题在于:当你看到一个由十几个基本块组成的循环时,你很难一眼看出循环边界在哪里、步长是多少、有没有循环不变量。

SCF Dialect就是给控制流穿上“结构化”的外衣。它把for、while、if这些高级控制流模式封装成独立的Operation,每个Operation内部自带Region,Region里再嵌套Block。这样做的直接好处是:下游Pass可以“按图索骥”,直接读取循环的lb、ub、step,而不需要做数据流分析去反推。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值