Next: , Previous: Passes, Up: Top


11 GENERIC

GENERIC的目的是简单的提供一个使用tree来表示整个函数的语言无关的方式。为此,之前需要为后端增加一些新的tree代码,但是大多数东西都已经存在。如果你可以使用gcc/tree.def中的代码来表示,则其即为GENERIC。

早期,有一个很大的争论,关于如何在tree IL级别来考虑语句。在GENERIC中,一条语句被定义为任意的表达式,其值,如果存在,被忽略。语句总是设置TREE_SIDE_EFFECTS,不过一个非语句的表达式也可以具有副作用。例如,CALL_EXPR

对于一些局部优化,可以在函数的GENERIC形式上进行工作;的确,被改写的tree内联在GENERIC上可以很好的工作,不过目前编译器是在下降到GIMPLE(一个严格的形式,在下节有描述)之后,才执行内联的。确实,目前前端是在移交给tree_rest_of_compilation之前,来执行该下降,不过这看起来不太优雅。