...
original loop |
---|
for (int i = init, i < limit; i += stride) { // loop with array range check |
after loop predication |
---|
if ( scale * imax + offset < a.length ) { // loop predicate. imax is the maximum value of i where init <= i < limit |
...
Existing optimizations that perform elimination of checks inside the loops are iteration range splitting based. The loop is peeled
...
The major disadvantage of iteration range splitting based check elimination is the dramatic increase in code size due to the copies
of the loop. In addition, the checks in the pre- and post-loops are not eliminated, and thus the performance gain is limited if when the iteration
space is small.
Compared with the iteration range splitting based check elimination, loop predication has the following advantages:
...
4. (for future work) Loop predication provides a unified interface that can be implemented (extended) to replace the existing iteration range
splitting based check eliminations (loop peeling, partial peeling, range check elimination)
...