根据这篇文章gcc 在生成代码之前使用了几种中间格式。我读到 GIMPLE 格式使用三个地址码,这似乎是最容易使用的中间语言。但我需要更多细节,因为我需要构建一个可以获取中间代码并在生成最终代码之前向其中插入一些代码的工具。
为此,我首先需要知道如何生成 GIMPLE 格式代码并将其保存在文件中。所以我正在寻找一些文件和例子。另外,如果有人做过这样的事情,我能知道这个任务的复杂性,即在中间代码中插入一些代码吗?
您可能会发现为 GCC 编写一个插件更容易,这将允许您挂钩 GIMPLE 生成并在 GCC 中更改它,这应该会减少保存、编辑然后尝试从 GIMPLE 形式编译的停机时间。MELT就是这样一个插件(尽管它提供的不仅仅是改变较低级别的表示)。这里还有一个很好的关于 GIMPLE 修改插件的 PDF。
否则,您可以在此处查看有关 GCC 的 GIMPLE 工作原理的信息。在倾销 GIMPLE 方面:
您可以使用标志 -fdump-tree-gimple 请求转储 GIMPLE 表单的类 C 表示。
您可以使用 flag 轻松生成任何文件的 GIMPLE 表示-fdump-tree-gimple
。
如果您想编写一个插件,那么您可能会对 GCC 上的 pass 工作方式感兴趣。您可以使用以下形式的标志查看每个通道的输出:
-fdump-<ir>-<passname>
ir
可能在哪里:
tree
: GIMPLE 上的程序内传递ipa
: GIMPLE 上的程序间传递rtl
: RTL 上的程序内传递用于<passname> = all
查看所有转储,例如-fdump-ipa-all
.
我试过国旗-fdump-tree-gimple
。它仅适用于 C/C++ 语言,不适用于 Java、Ada、Fortran 和 Objective-C 等其他语言)