Induction variable (IV) substitution pass recognizes and substitutes induction
variables in loops that take the form of iv = iv + expr.
This form of assignment prevents the automatic parallelizer from performing
analysis and code generation, due to the data dependence on the assignment
operation. Our IV pass detects such induction variables and replaces them
with equivalent expressions in terms of relevant loop index variables. The
scope of the IV pass is up to detection and substitution of
Generalized Inudction Variables (GIV) with additive
induction operations; it allows multiple induction operations on a variable
in a multiply nested loop, and the increment expression should not contain
any loop-variant variables other than other induction variables. The following
example shows an input program and a transformed code with our IV pass.
iv = 1;
for (i=0; i<10; i++) { iv = 1;
iv = iv+1; for (i=0; i<10; i++) {
... = iv; ... = 2+41*i;
for (j=0; j<20; j++) { --> for (j=0; j<20; j++) {
iv += 2; ... = 4+41*i+2*j;
... = iv; }
} }
}