获得拓扑有序函数列表的最有效方法是什么?

时间:2013-08-22 16:07:42

标签: llvm topological-sort

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

1 个答案:

答案 0 :(得分:0)

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