Induction variable
From Wikipedia, the free encyclopedia
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 a linear function of another induction variable.
For example, in the following loop, i and j are induction variables:
for (i=0; i < 10; ++i) {
j = 17 * i;
}
Contents |
[edit] 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.
[edit] 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 and j. Either one can be rewritten as a linear function of the other; therefore, the compiler may optimize this code as if it had been written
extern int sum;
int foo(int n) {
int i;
for (i=0; i < n; ++i) {
sum += (5 + 2*i);
}
return sum;
}
[edit] 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;
}

