在LLVM函数中迭代反向的基本块

时间:2017-05-31 02:53:41

标签: function llvm reverse-iterator

有没有办法在LLVM函数上迭代反向。我检查了文档 但似乎找不到任何成员typedef来反向迭代Basic块(在函数中)。

任何帮助将不胜感激。

谢谢, Malhar

3 个答案:

答案 0 :(得分:1)

我认为您可以致电Function::getBasicBlockList(),然后在该列表中使用.rbegin()rend()

答案 1 :(得分:0)

for (BasicBlock::reverse_iterator i = BB->rbegin(), e = BB->rend(); i != e; ++i)
{ 
    // you're code
}

答案 2 :(得分:0)

根据@arrowed建议共享有效代码段:

    auto bbList = &(func_ptr->getBasicBlockList()); //fetch the pointer of the list

    errs()<<"reverse  \n";

    for(auto bb = bbList->rbegin(); bb != bbList->rend(); bb++) {

        b = &(*bb);

        errs() << b->getName()<<", ";

    }

如果有多个前任和后继人,打印基本块名称的顺序是什么?

相反的后订单顺序,即后订单(以相反的方式迭代)