Loop-invariant code motion
|
Loop-invariant code in an imperative programming language consists of statements which could be moved to before the loop (if the loop always terminates), or after the loop, without affecting the semantics of the program. As a result it is executed less often, providing a speedup. Loop-invariant code motion is a compiler optimization which performs this movement automatically.
Worked Example
If we consider the code sample, two optimization possibilites can be applied.
while (i < maximum - 1)
{
j = j + (4+array[k])*pi+5;
}
The calculation of maximum - 1
and (4+array[k])*pi+5
can be moved outside the loop, and precalculated, resulting in something similar to:
int maxval = maximum - 1;
int calcval = (4+array[k])*pi+5;
while (i < maxval)
{
j = j + calcval;
}