0

在LLVM中,BasicBlock具有属性getSinglePredecessor()和getSingleSuccessor(),但我需要获取整个基本块的后继和前辈列表。我如何在llvm中实现这一点?查找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 
    } 
} 

回答

1

我同意,没有直接的财产为BasicBlock。相反,您可以在基本块的get the terminator instruction,然后遍历其successors

或者,基于将source code读取到BasicBlock类,您可以从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)