g++ 中的调用图扩展阶段是什么?

What is the callgraph expansion stage in g++?

我正在分析我的程序;编译并寻找瓶颈。我最初认为模板实例化将是最昂贵的部分,但似乎是调用图函数扩展。问题是,我不知道那个阶段指的是什么。

callgraph functions expansion      :  28.98 ( 80%)   0.95 ( 39%)  29.98 ( 73%)   782M ( 60%)
 template instantiation             :   2.36 (  7%)   0.47 ( 19%)   2.84 (  7%)   191M ( 15%)

我试图在网上搜索它,但没有找到答案。

它似乎是 GCC 实施的优化过程的一部分。我找到了一个参考文献 The GCC call graph module,它描述为编译器前端执行的最后一步:

  1. Expansion: We proceed in reverse DFS order on functions that are still present in the call-graph, applying inter-procedural optimizations such as inlining to the functions, and finally leaving them to the back-end to do the actual optimization and compilation.