##
8.1.1 Sub-expression Elimination

The compiler does local and global common subexpression elimination, e.g.:

> i = x + y + 1;
> j = x + y;

will be translated to

> iTemp = x + y;
> i = iTemp + 1;
> j = iTemp;

Some subexpressions are not as obvious as the above example, e.g.:

> a->b[i].c = 10;
> a->b[i].d = 11;

In this case the address arithmetic a->b[i] will be computed only once; the equivalent code in C would be.

> iTemp = a->b[i];
> iTemp.c = 10;
> iTemp.d = 11;

The compiler will try to keep these temporary variables in registers.