玩gcc的中间格式

Met*_*est 9 c compiler-construction gcc backend gimple

根据这篇文章, gcc在生成代码之前使用了几种中间格式.我读到GIMPLE格式使用三个地址代码,这似乎是最容易使用的中间语言.但我需要一些更详细,因为我需要建立一个工具,可以把中间代码,并生成最终的代码之前插入一些代码到它.

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

Nec*_*lis 16

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

另外,您可以在这里查看有关GCC GIMPLE如何工作的信息.在倾销GIMPLE方面:

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

  • 我是MELT的主要开发人员,几天前我在http://gcc-melt.org/GCC-MELT-HiPEAC2012.pdf上添加了新的教程幻灯片(还有其他的http:// gcc -melt.org/ ...) (12认同)

nee*_*eel 7

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

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

-fdump-<ir>-<passname>
Run Code Online (Sandbox Code Playgroud)

哪里ir可能是:

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

使用<passname> = all到看到所有的转储,如-fdump-ipa-all.