2013-08-22 40 views
0

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

+1

实现拓扑排序并不困难... http://en.wikipedia.org/wiki/Topological_sorting –

+0

我同意,但使用现有的分析过程更加不难。 –

回答

0

虽然我不熟悉正好的现有通道,但LLVM中的代码非常接近,我相信您可以使用它来快速解决您的问题。它在IPA(程序间分析)库中,位于lib/Analysis/IPA。尤其要看lib/Analysis/IPA/CallGraph.cpp - 它在模块中建立一个调用图。对拓扑图进行排序应该相当容易。

相关问题