Next: , Previous: GIMPLE Exception Handling, Up: GIMPLE


12.4 Temporaries

当gimplification遇到一个过于复杂的子表达式的时候,会创建一个新的临时变量来存放子表达式的值,并且在当前语句之前,增加一条新的语句对其初始化。这些特殊的临时对象被称作‘expression temporaries’,并使用get_formal_tmp_var来分配。编译器总是尝试将相等的表达式放到同一个临时对象中,来简化冗余计算消除。

只有当我们知道在使用表达式临时对象的值之前,其不会被重新求值的时候,才可以使用,否则其将不能被修改1。其它临时对象可以使用get_initialized_tmp_varcreate_tmp_var来分配。

目前,像a = b + 5这样的表达式没有被进一步简化。我们曾经尝试将其转换成型如

       T1 = b + 5;
       a = T1;

的样子。但这会使表示变得膨胀,而无法获益。然而,必须在内存中的变量不能出现在表达式中;其值先被显式的加载到一个临时对象中。类似的,将表达式的值存放到内存变量中,也要通过一个临时对象。


Footnotes

[1] 这些限制源自Morgan 4.8.