[1] For example, in the following loop, i and j are induction variables: 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.
This optimization is a special case of strength reduction.
In some cases, it is possible to reverse this optimization in order to remove an induction variable from the code entirely.
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 Induction variable substitution is a compiler transformation to recognize variables which can be expressed as functions of the indices of enclosing loops and replace them with expressions involving loop indices.
Example: Input code: Output code The same optimizations can be applied to induction variables that are not necessarily linear functions of the loop counter; for example, the loop may be converted to