Next: Operands, Previous: GIMPLE Exception Handling, Up: GIMPLE
当gimplification遇到一个过于复杂的子表达式的时候,会创建一个新的临时变量来存放子表达式的值,并且在当前语句之前,增加一条新的语句对其初始化。这些特殊的临时对象被称作‘expression temporaries’,并使用get_formal_tmp_var
来分配。编译器总是尝试将相等的表达式放到同一个临时对象中,来简化冗余计算消除。
只有当我们知道在使用表达式临时对象的值之前,其不会被重新求值的时候,才可以使用,否则其将不能被修改1。其它临时对象可以使用get_initialized_tmp_var
或create_tmp_var
来分配。
目前,像a = b + 5
这样的表达式没有被进一步简化。我们曾经尝试将其转换成型如
T1 = b + 5; a = T1;
的样子。但这会使表示变得膨胀,而无法获益。然而,必须在内存中的变量不能出现在表达式中;其值先被显式的加载到一个临时对象中。类似的,将表达式的值存放到内存变量中,也要通过一个临时对象。