dal*_*cai 2 compiler-construction optimization llvm
在我的通行证中,我添加了LoopInfo必需的通行证。然后我想打印每个循环的恒定循环行程计数(如果有的话)。然而,每次我调用 时getSmallConstantTripCount,它都会返回 0,即使对于一个非常简单的循环也是如此:
for(i=0; i<3; ++i) {;}
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?
小智 5
LLVM有一个原则,就是让每个部分做最少的工作。LoopInfo::getSmallConstantTripCount 不做任何花哨的分析,它寻找一个具有单个后沿的简单循环,每次将值递增 1,并使用 != 与常量整数进行比较。
当您编译在 -O0 处编写的代码时,每个“i < 3”实际上都会导致从内存加载以读取“i”的最新值。LoopInfo 当然不会进行必要的分析类型来确定不需要内存访问,这是“opt -mem2reg”的工作。尝试运行该优化,也许可以在代码上使用 -instcombine -loopsimplify -loop-rotate 使其达到 getSmallConstantTripCount 将处理的形状。
| 归档时间: |
|
| 查看次数: |
1329 次 |
| 最近记录: |