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:
“Faultless honesty is a sine qua non of business life. Not alone the honesty according to the moral code and the Bible. When I speak of honesty I refer to the small, hidden, evasive meannesses of our natures. I speak of the honesty of ourselves to ourselves.”
—Alice Foote MacDougall (18671945)
“A commodity appears at first sight an extremely obvious, trivial thing. But its analysis brings out that it is a very strange thing, abounding in metaphysical subtleties and theological niceties.”
—Karl Marx (18181883)