【问题标题】:Playing with gcc's intermediate GIMPLE format玩 gcc 的中间 GIMPLE 格式
【发布时间】:2012-02-24 08:15:02
【问题描述】:

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

为此,我首先需要知道如何生成 GIMPLE 格式代码并将其保存在文件中。所以我正在寻找一些文件和例子。另外,如果有人做过这样的事情,我能知道这个任务的复杂性,即在中间代码中插入一些代码吗?

【问题讨论】:

标签: c gcc compiler-construction backend gimple


【解决方案1】:

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

否则,您可以查看here 以获取有关 GCC 的 GIMPLE 工作原理的信息。 在倾销 GIMPLE 方面:

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

【讨论】:

【解决方案2】:

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

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

-fdump-<ir>-<passname>

ir 可能在哪里:

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

使用&lt;passname&gt; = all 查看所有转储,例如-fdump-ipa-all.

【讨论】:

    【解决方案3】:

    我尝试了标志-fdump-tree-gimple。它仅适用于 C/C++ 语言,不适用于 Java、Ada、Fortran 和 Objective-C 等其他语言)

    【讨论】:

    • 问题被标记为 C。因此其他语言无关紧要。
    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 2014-03-06
    • 2019-11-27
    • 2015-07-27
    • 2012-02-24
    • 2015-10-18
    • 1970-01-01
    • 2018-11-07
    相关资源
    最近更新 更多