我正在尝试使用 L->getCanonicalInductionVariable() 在给定其参考 L* 的情况下获取循环传递中循环的规范归纳变量。
但是我遇到的许多循环都不是规范的形式。例如:
for (int i = 10; i < 20 ; i++) {
....
}
根据 llvm 文档http://llvm.org/docs/Passes.html#indvars-canonicalize-induction-variables),使用“opt”中的“indvars”传递应该通过将循环归纳变量转换为规范形式来解决问题. 我试过运行:
opt -mem2reg -indvars < test.bc > optTest.bc
其中“test.bc”是上述for循环的位代码格式。但是indvars pass好像没有效果(这里我省略了汇编代码,但是我查过了)。
稍后,使用 L->getCanonicalInductionVariable() 返回 null。我也尝试过将“indvars”与“loops”、“loop-simplify”等其他通行证一起使用,但无济于事。
关于如何让它发挥作用的任何想法?