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;
   }


[edit] See also