- Induction variable
In
computer science , an induction variable is a variable that gets increased or decreased by a fixed amount on every iteration of a loop, or is alinear function of another induction variable.For example, in the following loop,
i
andj
are induction variables:for (i=0; i < 10; ++i) { j = 17 * i; }
Application to strength reduction
A common
compiler optimization is to recognize the existence of induction variables and replace them with simpler computations; for example, the code above could be rewritten by the compiler as follows, on the assumption that the addition of a constant will be cheaper than a multiplication.j = 0; for (i=0; i < 10; ++i) { j = j + 17; }
This optimization is a special case of
strength reduction .Application to reduce register pressure
In some cases, it is possible to reverse this optimization in order to remove an induction variable from the code entirely. For example:
extern int sum; int foo(int n) { int i, j; j = 5; for (i=0; i < n; ++i) { j += 2; sum += j; } return sum; }
This function's loop has two induction variables:
i
andj
. Either one can be rewritten as a linear function of the other; therefore, the compiler may optimize this code as if it had been writtenextern int sum; int foo(int n) { int i; for (i=0; i < n; ++i) { sum += (5 + 2*i); } return sum; }
Non-linear induction variables
The same optimizations can be applied to induction variables that are not necessarily linear functions of the loop counter; for example, the loop
j = 1; for (i=0; i < 10; ++i) { j = j << 1; }
may be converted to
for (i=0; i < 10; ++i) { j = 1 << i; }
ee also
*
Loop optimization
Wikimedia Foundation. 2010.