假设我们有一个包含一些没有递归调用的函数的模块(所以调用图是一个DAG)。在调用顺序方面,从topologcal顺序排序的模块中获取Function *的向量的最有效方法是什么? 按拓扑顺序,我的意思是如果foo()调用bar(),那么foo将出现在排序列表中的bar之前。 是否有任何Analysis传递可以给我这个信息,还是我必须编写自己的排序例程?
答案 0 :(得分:0)
虽然我不熟悉完全你想要的现有传递,但LLVM中的代码非常接近,我相信你可以用它来快速解决你的问题。它位于lib/Analysis/IPA
的IPA(程序间分析)库中。特别是,看看lib/Analysis/IPA/CallGraph.cpp
- 它在模块中构建一个调用图。从拓扑上对这样的图表进行排序应该相当容易。