以下哪一项是错误的?
(A)基本块是一个指令序列,其中控制在开始时进入序列并在结束时退出。
(B)可用的表达分析可用于常见的子表达消除。
(C)活变量分析可用于消除死代码。
(D) x = 4 ∗ 5 => x = 20 是公共子表达式消除的一个例子。答案: (D)
解释: (A) 基本块是一个指令序列,其中控制在开始时进入序列并在结束时退出为 TRUE。
(B) 可用表达式分析可用于公共子表达式消除为 TRUE。可用表达式是一种分析算法,它为程序中的每个点确定不需要重新计算的表达式集。可用的表达式分析用于进行全局公共子表达式消除 (CSE)。如果某个表达式在某个点可用,则无需重新评估它。
(C) 可用于死代码消除的活变量分析为 TRUE。
(D) x = 4 ∗ 5 => x = 20 是公共子表达式消除的一个例子是 FALSE。
公共子表达式消除 (CSE) 是指编译器优化将相同的表达式(即,它们都计算为相同的值)替换为一个保存计算值的变量,当值得这样做时。
下面是一个例子
In the following code:
a = b * c + g;
d = b * c * e;
it may be worth transforming the code to:
tmp = b * c;
a = tmp + g;
d = tmp * e;
资料来源:
https://en.wikipedia.org/wiki/Common_subexpression_elimination
https://en.wikipedia.org/wiki/Available_expression
这个问题的测验