在LLVM中,BasicBlock具有属性getSinglePredecessor()和getSingleSuccessor(),但我需要获取基本块的后继者和前置者的完整列表。我怎样才能在llvm中实现这个目标?
我的代码是
virtual bool runOnFunction(Function &F) {
for (Function::iterator b = F.begin(), be = F.end(); b != be; ++b) {
//Here I need to get the predecessor and successsor of the basic block b
}
}
答案 0 :(得分:3)
如果愿意的话,代码少一些:
#include "llvm/IR/CFG.h"
BasicBlock *BB = ...;
for (BasicBlock *Pred : predecessors(BB)) {
// ...
}
答案 1 :(得分:2)
我同意BasicBlock没有直接属性。相反,您可以get the terminator instruction基本块,然后遍历其successors。
或者,基于读取BasicBlock类的source code,您可以从BasicBlock实例创建pred_iterator和succ_iterator。例如:
for (Function::iterator b = F.begin(), be = F.end(); b != be; ++b)
{
BasicBlock* bb = dyn_cast<BasicBlock>(&*b);
for (pred_iterator pit = pred_begin(bb), pet = pred_end(bb); pit != pet; ++pit)