Llvm 什么';获取拓扑有序函数列表的最有效方法是什么?

Llvm 什么';获取拓扑有序函数列表的最有效方法是什么?,llvm,topological-sort,Llvm,Topological Sort,假设我们有一个模块,其中包含一些没有递归调用的函数(因此调用图是DAG)。从按调用顺序按拓扑顺序排序的模块中获取函数*向量的最有效方法是什么? 拓扑顺序的意思是,如果foo()调用bar(),那么foo将出现在排序列表中的bar之前。 是否有任何分析过程可以为我提供这些信息,或者我必须编写自己的排序例程?虽然我不熟悉现有的过程可以完全满足您的需要,但LLVM中的代码非常接近,我相信您可以使用它快速解决您的问题。它位于IPA(过程间分析)库中的lib/analysis/IPA中。特别是看lib/A

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

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

实现拓扑排序并不难。。。我同意,但使用现有的分析通行证更不难。