内联算法

时间:2010-12-16 02:20:54

标签: algorithm ocaml compiler-optimization compiler-theory graph-algorithm

2 个答案:

答案 0 :(得分:5)

我意识到你可能已经知道了这一切,但是仍然完整地写它似乎很重要,至少为了进一步参考。

在功能界,有一些文学大多来自GHC人。请注意,他们认为内联作为源语言的转换,而您似乎在较低级别工作。我认为,使用源语言 - 或者是一种相似类似语义的中间语言 - 对简单性和正确性有很大帮助。

对于排序编译器通过的问题,这是非常神秘的。仍然在Haskell设置中,有Compilation by Transformation in a Non-strict Functional Language博士论文,它讨论了不同编译器传递(以及内联)的排序。

最近还有一篇关于Compilation by Equality Saturation的论文提出了一种优化传递排序的新方法。我不确定它是否已经大规模地展示了适用性,但它肯定是一个有趣的探索方向。

答案 1 :(得分:1)

对于递归情况,您可以在调用图上使用Tarjan算法来检测循环依赖关系集群,并将它们从内联中排除。它不会影响兄弟电话。

http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm