-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:

  1. 一个 preheader。

  2. 一个 latch。

  3. Exits 被 header dominant(即,这个 loop 的 exit 没有 loop 以外的其他 node 作为 predecessor)。

其实仔细想想,在平时写代码的时候,我们写的 do-whilefor , 和 while 其实都是很标准的 form。所以如果 code 写的比较简洁的话,单独使用这个 pass 其实优化没有想象中的那么高,还是得结合别的 loop transformation pass 一起来做比较高效。

Code Example

Background 文档里已经很详细了,所以这里略一下。