Consider the following ANSI C code segment:
z = x + 3 + y->f1 + y->f2;
for (i = 0; i < 200; i = i + 2){
if (z > i) {
p = p + x + 3;
q = q + y->f1;
} else {
p = p + y->f2;
q = q + x + 3;
}
}
Assume that the variable
y points to a
struct (allocated on the heap) containing two fields
f1 and
f2, and the local variables
x, y, z, p, q, and
i are allotted registers. Common sub-expression elimination (CSE) optimization is applied on the code. The number of addition and dereference operations (of the form
y->f1 or
y->f2) in the optimized code, respectively, are: