Compiler construction 如何在LLVM IR中查找循环的开始和结束

Compiler construction 如何在LLVM IR中查找循环的开始和结束,compiler-construction,llvm,clang,Compiler Construction,Llvm,Clang,如何在LLVM IR中找到回路感应变量的起始值和结束值 for(int i = start; i < end; i++) { A[i] = 0; } for(int i=start;i

如何在LLVM IR中找到回路感应变量的起始值和结束值

for(int i = start; i < end; i++) {
    A[i] = 0;
}
for(int i=start;i
要替换为对“零(a,开始,结束)”的调用


还是用叮当AST更好?clang中是否有进行此类更改的工具?

您可能还希望查看类的
SCEV
层次结构:

查看LLVM过程,如
LoopSimplify
LoopUnroll
以及其他依赖于
LoopInfo
分析过程的过程。后者应该为您的转换提供足够的信息。不过,对于更复杂的数组索引依赖关系分析,除了现有的LLVM功能之外,还需要类似于Polly的东西。