使用 gcc 的中间 GIMPLE 格式

发布于 2025-01-02 06:48:06 字数 290 浏览 3 评论 0原文

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

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

According to this article gcc uses several intermediate formats before generating code. I read that the GIMPLE format uses three address code, which seems to be the easiest intermediate language to use. But I need some more detail, as I need to build a tool that can take the intermediate code and insert some code to it before generating the final code.

For this I first need to know how can I even generate the GIMPLE format code and save it in a file. So I'm looking for some documents and examples. Also, if anyone has worked with such things, can I know the complexity of this task, which is to insert some code into the intermediate code?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

献世佛 2025-01-09 06:48:06

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

另外,您可以在此处查看有关 GCC GIMPLE 如何工作的信息。
就转储 GIMPLE 而言:

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

You might find it easier to write a plugin for GCC, which would allow you to hook the GIMPLE generation and alter it inside GCC, which should drop the downtime of saving, editing then trying to compile from GIMPLE form. MELT is one such plugin (though it offers way more than just altering the lower level representations). There is also a nice PDF here on GIMPLE altering plugins.

Else, you can look here for information on how GCC's GIMPLE works.
In terms of dumping GIMPLE out:

You can request to dump a C-like representation of the GIMPLE form with the flag -fdump-tree-gimple.

太阳男子 2025-01-09 06:48:06

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

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

-fdump-<ir>-<passname>

其中 ir 可以是:

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

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

You can easily generate GIMPLE representation of any file using the flag -fdump-tree-gimple.

If you want to write a plugin, then you might be interested in how passes work on GCC. You can see the output of each pass with flags of the form:

-fdump-<ir>-<passname>

where ir could be:

  • tree : Intraprocedural passes on GIMPLE
  • ipa : Interprocedural passes on GIMPLE
  • rtl : Intraprocedural passes on RTL

Use <passname> = all to see all the dumps, e.g. -fdump-ipa-all.

许你一世情深 2025-01-09 06:48:06

从 GCC 7 开始,现在可以在函数的声明说明符中使用 __GIMPLE 以及 -fgimple 命令行标志,让 GCC 直接编译 GIMPLE。 GCC 内部文档

类似的基础设施也可用于 RTL

It is now possible, since GCC 7, to use __GIMPLE in a function's declaration specifiers, along with the -fgimple command-line flag, to have GCC directly compile GIMPLE. This is explained in more detail in the documentation for GCCs internals

Similar infrastructure is also available for RTL

盛装女皇 2025-01-09 06:48:06

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

I tried the flag -fdump-tree-gimple. It works only for the C/C++ language, and not for other languages such as Java, Ada, Fortran, and Objective-C)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文