在编译过程中,GCC使用了三种主要的中间语言来表示程序:GENERIC,GIMPLE和RTL。GENERIC是一种由每个前端生成的语言无关的表示。它用来作为语法分析器和优化器之间的接口。GENERIC是一种通用表示,能够表示使用GCC支持的所有语言编写的程序。
GIMPLE和RTL用于优化程序。GIMPLE用于目标和语言无关的优化(例如,内联,常数传播,尾调用消除,冗余消除等)。与GENERIC比较相似,GIMPLE是一种语言无关的树型表示。不过,与GENERIC不同的是GIMPLE的语法有更多的限制:表达式不包含3个以上的操作数(函数调用除外),它没有控制流程结构,并且具有副作用的表达式只允许出现在赋值语句的右端。详情参见描述GENERIC和GIMPLE的章节。
本章描述在GIMPLE优化器(也称为“树优化器”或者“中端”)中使用的数据结构和函数。特别是侧重于所有的宏,数据结构,函数和实现GIMPLE优化过程所需要的编程架构。