【发布时间】:2019-11-27 17:41:13
【问题描述】:
对于我的最后一年项目,我正在学习编译器技术,目前我正在尝试使用 GCC 中间表示(raw GIMPLE)并获得使用 GCC-5.4 来自不同源文件(C、Cpp 和 Java)的控制流程图。
到目前为止,我可以使用 -fdump-tree-all-graph-raw 生成 *.004t.gimple 和 *.011t.cfg 原始文件,但后来我希望了解更多 GIMPLE 语言,所以我搜索了它的 grammar 我发现了这个:
- GIMPLE WIKI
- SIMPLE
- GENERIC and GIMPLE
- latest GIMPLE Doc(没有语法!!!)
- GCC FE
- grammar for gcc-4.3.6
- grammar for gcc-4.2.1
- GIMPLE Doc for gcc-5.4.0(也没有语法!!!)
所以语言似乎在不断变化并且有多种格式(High level GIMPLE、Low_level_GIMPLE、SSA GIMPLE、tree ) 并且语法似乎在版本之间不断变化,但我找不到最新版本的 GIMPLE 语法,特别是 GCC-5.4 中使用的语法,我无法理解不同的格式。
语法问题:
- 在哪里可以找到 GCC-5.4 和更新版本中使用的 GIMPLE 语法?
- 是怎么写的? (在 BNF 或 EBNF 或 ...)
- GCC如何实现这个语法来生成、解析和理解 它生成 Gimple 文件,然后将它们转换为 RTL?
- 我可以写一小部分 GIMPLE 语法
在 Xtext 中来自我生成的
*.004t.gimple文件的示例?
关于格式的问题:
- 3 种 Gimple 格式有什么区别? (我似乎不能 在 wiki 中查找有关每个文档的详细文档)
- 在原始文件
*.c.004t.gimple和*.c.011t.cfg? (高或低,...) - 哪一个更好地代表原始源的控制流 没有优化的代码?
谢谢,
【问题讨论】:
-
我在哪里可以找到 GIMPLE 语法... 我认为不存在任何这样的定义。 Uday Khedeker 在第 33 页的slides 中给出了一个非常简单的概述。
-
GCC 如何实现此语法以生成、解析和理解它生成的 Gimple 文件... GCC 通常不会将 gimple 输出到文件(您可以要求转储,例如
-fdump-tree-all,当然,但这是为编译器黑客准备的,不需要操作); gimple 结构由语言前端(和 gimplifier)生成,并在 内存中 保存和处理,rtl 是后来由它制成的。最近添加了一个 GIMPLE 前端(在 7.2,IIRC 中),但这绝不是完整的(同样,它的目的是使为编译器编写单元测试成为可能)。 -
哦,我还在 Jason Merrill 的 GENERIC and GIMPLE: A New Tree Representation for Entire Functions 论文中找到了“粗略的 GIMPLE 语法”
-
@VladislavIvanishin 感谢幻灯片,我知道第一篇论文和 GCC-4.3.6 和 GCC-4.2.1 中有一个“粗略的 GIMPLE 语法”,您可以在我的链接中找到但我正在寻找一个更新的
-
或者他们从文档中删除了语法,因为他们不再使用它了?!!那么它现在如何工作?!他们如何从内存结构中生成转储文件,转储文件是否完全代表源文件?
标签: gcc grammar xtext gcc5 gimple