-loop-simplify: Canonicalize Natural Loops
在了解这个 pass 之前需要学习的背景知识是 Loop Terminology in LLVM。
Description
-loop-simplify 也就是在让这个 natural loop 给标准化成 simplify form (i.e. canonical form),也是为了后续的优化能够更精确的执行。
虽然在 background 文档里已经说过了,不过这里再描述一下。
在 LLVM 中,loop simplify form (i.e. canonical form) 指的是满足如下条件的 loop:
一个 preheader。
一个 latch。
Exits 被 header dominant(即,这个 loop 的 exit 没有 loop 以外的其他 node 作为 predecessor)。
其实仔细想想,在平时写代码的时候,我们写的 do-while, for , 和 while 其实都是很标准的 form。所以如果 code 写的比较简洁的话,单独使用这个 pass 其实优化没有想象中的那么高,还是得结合别的 loop transformation pass 一起来做比较高效。
Code Example
Background 文档里已经很详细了,所以这里略一下。