使用gcc的中间GIMPLE格式

时间:2012-02-01 16:26:35

标签: c gcc compiler-construction backend gimple

根据this article gcc在生成代码之前使用了几种中间格式。我读到GIMPLE格式使用三个地址代码,这似乎是最容易使用的中间语言。但我需要更多细节,因为我需要构建一个工具,可以在生成最终代码之前接受中间代码并插入一些代码。

为此,我首先需要知道如何生成GIMPLE格式代码并将其保存在文件中。所以我正在寻找一些文件和例子。此外,如果有人使用过这些东西,我是否可以知道这项任务的复杂性,即将一些代码插入到中间代码中?

3 个答案:

答案 0 :(得分:13)

您可能会发现为GCC编写plugin更容易,这将允许您挂钩GIMPLE生成并在GCC中更改它,这将减少保存,编辑然后尝试从GIMPLE表单编译的停机时间。 MELT是一个这样的插件(虽然它提供方式而不仅仅是改变较低级别的表示)。在GIMPLE改变插件上还有一个很好的PDF here

另外,您可以查看here以获取有关GCC GIMPLE如何工作的信息。 在倾销GIMPLE方面:

  

您可以请求使用标志-fdump-tree-gimple转储GIMPLE表单的类C表示。

答案 1 :(得分:5)

您可以使用标记-fdump-tree-gimple轻松生成任何文件的GIMPLE表示。

如果你想写一个插件,那么你可能会对GCC的传递方式感兴趣。您可以使用以下格式的标志查看每个传递的输出:

-fdump-<ir>-<passname>

ir可以是:

  • tree:GIMPLE上的过程内传递
  • ipa:GIMPLE上的过程间通行证
  • rtl:RTL的过程内传递

使用<passname> = all查看所有转储,例如-fdump-ipa-all

答案 2 :(得分:-1)

我尝试了旗帜-fdump-tree-gimple。它仅适用于C / C ++语言,而不适用于其他语言,如Java,Ada,Fortran和Objective-C)