搜索最近的GCC GIMPLE语法
在最后一年的项目中,我正在学习编译器技术,目前我正在尝试使用GCC中间表示(raw GIMPLE),并使用GCC-5.4从不同的源文件(C、Cpp和Java)获取控制流图 到目前为止,我可以使用搜索最近的GCC GIMPLE语法,gcc,grammar,xtext,gcc5,gimple,Gcc,Grammar,Xtext,Gcc5,Gimple,在最后一年的项目中,我正在学习编译器技术,目前我正在尝试使用GCC中间表示(raw GIMPLE),并使用GCC-5.4从不同的源文件(C、Cpp和Java)获取控制流图 到目前为止,我可以使用-fdump tree all graph raw生成*.004t.gimple和*.011t.cfg原始文件,但后来我想进一步了解gimple语言,所以我搜索了它的语法,我发现: (没有语法!!!) (也没有语法!!!) 因此,该语言似乎在不断变化,并且有多种格式(高级GIMPLE,低级
-fdump tree all graph raw
生成*.004t.gimple
和*.011t.cfg
原始文件,但后来我想进一步了解gimple语言,所以我搜索了它的语法,我发现:
- (没有语法!!!)
- (也没有语法!!!)
- 在哪里可以找到GCC-5.4和更新版本中使用的GIMPLE语法
- 它是怎么写的?(以BNF或EBNF或…)
- GCC如何实现这种语法来生成、解析和理解 Gimple它生成的文件,然后将它们转换为RTL
- 我可以写一小部分GIMPLE语法吗
在我生成的
文件示例的Xtext中*.004t.gimple
- 3种Gimple格式之间有什么区别?(我似乎不知道 在wiki中查找每一项的详细文档)
- 原始文件
和*.c.004t.gimple
?(高或低,…)*.c.011t.cfg
- 哪一个更好地表示来自原始源的控制流 没有优化的代码
谢谢,看起来你刚刚开始学习GIMPLE,甚至没有阅读上面发布的文档。我正在深入研究GCC一段时间,我将尝试回答您的问题
gccint
文档:它有助于回答一些问题并提供有关GIMPLE的一些信息,这是唯一一个至少以某种方式描述GIMPLE的文档。最好的描述来源,它是悲伤的,但它是。请看这里,本文档基于gccint
,由以下内容组成:gimple.h
,basic block.h
,tree pass.h
,例如,所有这些都位于$src/GCC/
中。部分功能在章节GIMPLE
中的gccint
中介绍。引用gccint
并不准确,它包含一些过时的函数和引用,您必须记住这一点(例如,对于每个\u BB,2013年已弃用)IL
,您可以创建一个插件来优化代码流,但我看不到单独使用GIMPLE的必要性GIMPLE HIGH
只是GIMPLE没有完全降下,而是在通过前由IL组成pass\u lower\u cf
High GIMPLE
包含一些容器语句,如词法范围(由GIMPLE\u BIND
表示)和嵌套表达式(例如GIMPLE\u TRY
)Low GIMPLE
直接在IL
和EH
区域树中公开控制和异常表达式的所有隐式跳转(EH
表示异常处理
)。还有RAW
表示法,据我所知,它是一种波兰符号,比通常的表示法更有用,例如,您可以使用-fdump tree all RAW
获得它*.c.004t.gimple
-这是gimple出现的第一步,*.c.011t.cfg
-首次尝试控制流图(cfg
)。GIMPLE lower的内部名称为“lower
”,您可以在第节的GIMPLE low.c
中看到它们
const pass_data pass_data_lower_cf =
{
GIMPLE_PASS, /* type */
"lower", /* name */
OPTGROUP_NONE, /* optinfo_flags */
TV_NONE, /* tv_id */
PROP_gimple_any, /* properties_required */
PROP_gimple_lcf, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
0, /* todo_flags_finish */
};
您可以使用搜索功能查找此通行证*.c.007t.lower
-fdump tree all
,当然,但这是针对编译器黑客的,操作不需要);gimple结构由语言前端(和gimplifier)生成,它们保存在内存中并在内存中进行处理,rtl随后由该语言前端生成。最近添加了GIMPLE前端(在7.2,IIRC中),但这并不完整(同样,它的目的是为com编写单元测试