从函数/模块中提取llvm位代码中的循环

时间:2018-12-14 16:31:46

标签: loops llvm bitcode

是否可以从llvm位代码中提取函数或模块中的循环?? 我正在将LLVM LoopPass迁移到独立的位码读取器/写入器应用程序。迁移的主要原因是调试opt pass的困难,但是还有其他原因。我已经搜索了Function / Module / BasicBlock的API,但找不到任何接近的东西。 因为LoopPass正是这样做的,所以我敢肯定这是可能的吗?我的意思是这样的:

Function f;
for (auto loop = f.getLoops().begin(); loop != f.getLoops().end(); loop++)
{
    // process loop here
}

1 个答案:

答案 0 :(得分:2)

您想要的东西称为LoopInfo,然后通过支配者树创建它:

DominatorTree dt(function);
LoopInfo li(dt);
for(Instruction * foo : bar) {
  Loop * l = li.getLoopFor(foo->getParent());