【发布时间】:2017-10-31 16:09:39
【问题描述】:
有没有办法在 LLVM 函数上进行 reverse 迭代。我检查了文档 但似乎找不到任何成员 typedef 用于反向迭代基本块(在函数中)。
任何帮助将不胜感激。
谢谢, 马尔哈尔
【问题讨论】:
标签: function llvm reverse-iterator
有没有办法在 LLVM 函数上进行 reverse 迭代。我检查了文档 但似乎找不到任何成员 typedef 用于反向迭代基本块(在函数中)。
任何帮助将不胜感激。
谢谢, 马尔哈尔
【问题讨论】:
标签: function llvm reverse-iterator
for (BasicBlock::reverse_iterator i = BB->rbegin(), e = BB->rend(); i != e; ++i)
{
// your code
}
【讨论】:
我认为您可以致电Function::getBasicBlockList(),然后在该列表中使用.rbegin() 和rend()。
【讨论】:
begin()/end()没什么区别。我想这些会按某种顺序迭代。
根据@arrowd 的建议分享工作代码sn-p:
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()<<", ";
}
如果有多个前任和后继,打印基本块名称的顺序是什么?
与反向后序相反,即后序(以反向方式迭代)
【讨论】: