43 lines
1.3 KiB
Plaintext
43 lines
1.3 KiB
Plaintext
|
.bp
|
||
|
.NH 1
|
||
|
Common subexpression elimination
|
||
|
.NH 2
|
||
|
Introduction
|
||
|
.PP
|
||
|
The Common Subexpression Elimination optimization technique (CS)
|
||
|
tries to eliminate multiple computations of EM expressions
|
||
|
that yield the same result.
|
||
|
It places the result of one such computation
|
||
|
in a temporary variable,
|
||
|
and replaces the other computations by a reference
|
||
|
to this temporary variable.
|
||
|
The primary goal of this technique is to decrease
|
||
|
the execution time of the program,
|
||
|
but in general it will save space too.
|
||
|
.PP
|
||
|
As an example of the application of Common Subexpression Elimination,
|
||
|
consider the piece of program in Fig. 7.1(a).
|
||
|
.DS
|
||
|
x := a * b; TMP := a * b; x := a * b;
|
||
|
CODE; x := TMP; CODE
|
||
|
y := c + a * b; CODE y := x;
|
||
|
y := c + TMP;
|
||
|
|
||
|
(a) (b) (c)
|
||
|
|
||
|
Fig. 7.1 Examples of Common Subexpression Elimination
|
||
|
.DE
|
||
|
If neither a nor b is changed in CODE,
|
||
|
the instructions can be replaced by those of Fig. 7.1(b),
|
||
|
which saves one multiplication,
|
||
|
but costs an extra store instruction.
|
||
|
If the value of x is not changed in CODE either,
|
||
|
the instructions can be replaced by those of Fig. 7.1(c).
|
||
|
In this case
|
||
|
the extra store is not needed.
|
||
|
.PP
|
||
|
In the following sections we will describe
|
||
|
which transformations are done
|
||
|
by CS and how this phase
|
||
|
was implemented.
|