0

假设我们有一个包含一些没有递归调用的函数的模块(所以调用图是一个 DAG)。就调用顺序而言,从按拓扑顺序排序的模块中获取 Function* 向量的最有效方法是什么?通过拓扑顺序,我的意思是如果 foo() 调用 bar() 那么 foo 将出现在排序列表中的 bar 之前。是否有任何分析通行证可以为我提供此信息,还是我必须编写自己的排序例程?

4

1 回答 1

0

虽然我不熟悉完全符合您要求的现有通行证,但 LLVM 中的代码非常接近,我相信您可以使用它来快速解决您的问题。它位于 IPA(程序间分析)库中,位于lib/Analysis/IPA. 特别是,看看lib/Analysis/IPA/CallGraph.cpp- 它在模块中构建了一个调用图。对这样的图进行拓扑排序应该相当容易。

于 2013-08-23T16:18:05.810 回答