Извлечение циклов в битовом коде llvm из функций / модулей

Можно ли извлечь из llvm битовый код цикла (ов) внутри функции или модуля? Я переношу LLVM LoopPass в независимое приложение для чтения / записи битового кода. Основная причина миграции - трудности с отладкой опционов, но есть и другие причины. Я искал API функции / модуля / BasicBlock, но не нашел ничего близкого. Поскольку LoopPass делает именно это, я почти уверен, что это возможно, не так ли? Я имею в виду что-то вроде этого:

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

person OrenIshShalom    schedule 14.12.2018    source источник


Ответы (1)


То, что вам нужно, называется LoopInfo, и вы создаете его с помощью дерева доминаторов:

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