如何遍历LLVM 3.5中的支配树?

时间:2015-03-23 22:57:02

标签: c++ llvm

有没有人知道如何在LLVM 3.5中遍历统治者树?我可以使用DominatorTree *DT = &getAnalysis<DominatorTreeWrapperPass>(F).getDomTree();检索DOM树。但是,我不确定如何遍历它。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

这里的“横越”是什么意思? DominatorTree包含有用的调用,例如dominatesgetDescendantsisReachableFromEntry。请注意,它也来自DominatorTreeBase,因此您可能需要检查此类提供的方法。

有大量DominatorTree使用LLVM本身的例子。

答案 1 :(得分:3)

如果您只想以深度优先顺序遍历DominatorTree,可以尝试:

for (auto node = GraphTraits<DominatorTree *>::nodes_begin(DT);
     node != GraphTraits<DominatorTree *>::nodes_end(DT); ++node) {
  BasicBlock *BB = node->getBlock();
  // whatever you want to do with BB
}

此代码段摘自StraightLineStrengthReduce