在LLVM中使用Loop的getSmallConstantTripCount方法

时间:2011-04-27 19:29:23

标签: optimization compiler-construction llvm

在我的传球中,我添加了LoopInfo作为必需的传球。然后我想打印每个循环的常量循环行程计数(如果有的话)。但是,每次调用getSmallConstantTripCount时,它都会返回0,即使是非常简单的循环:

for(i=0; i<3; ++i) {;}  

知道为什么吗?

1 个答案:

答案 0 :(得分:4)

LLVM的原则是使每个部分的工作量最少。 LoopInfo :: getSmallConstantTripCount不进行任何花哨分析,它会查找一个带有单个后备的简单循环,每次将值递增1并使用!=与常量整数进行比较。

当您编译在-O0处编写的代码时,每个“i&lt; 3”实际上会导致内存中的加载读取最新的“i”值。 LoopInfo肯定不会进行必要的分析,以确定不需要内存访问,这是“opt -mem2reg”的工作。尝试运行该优化,并且可能-instcombine -loopsimplify -loop-rotate代码以使其成为getSmallConstantTripCount将处理的形状。