首页 > 解决方案 > 从函数/模块中提取 llvm 位码中的循环

问题描述

是否可以从 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
}

标签: loopsllvmbitcode

解决方案


您想要的称为LoopInfo,您可以通过支配树创建它:

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

推荐阅读