Code Analysis
Most of a program's execution time is typically spent in a small section of code, and that code is often inside a loop that is executed over and over.
A compiler uses methods to identify loops and recognize the characteristics of register values within those loops. For strength reduction, the compiler is interested in
- loop invariants. These are values that do not change within the body of a loop.
- induction variables. These are the values that are being iterated each time through the loop.
Loop invariants are essentially constants within a loop, but their value may change outside of the loop. Induction variables are changing by known amounts. The terms are relative to a particular loop. When loops are nested, an induction variable in the outer loop can be a loop invariant in the inner loop.
Strength reduction looks for expressions involving a loop invariant and an induction variable. Some of those expressions can be simplified. For example, the multiplication of loop invariant c
and induction variable i
can be replaced with successive weaker additions
c = 8; k = 0; for (i = 0; i < N; i++) { y = k; k = k + c; }Read more about this topic: Strength Reduction
Famous quotes containing the words code and/or analysis:
“Acknowledge your will and speak to us all, This alone is what I will to be! Hang your own penal code up above you: we want to be its enforcers!”
—Friedrich Nietzsche (18441900)
“Ask anyone committed to Marxist analysis how many angels on the head of a pin, and you will be asked in return to never mind the angels, tell me who controls the production of pins.”
—Joan Didion (b. 1934)