No, this form of strength reduction can often eliminate modulo operations in a loop even when the modulus is not a constant. The example given is:
for(t = 0; t < T; t++)
for(i = 0; i < NN; i++)
A[i%N] = 0;
which is optimised to this, without a modulo in sight: _invt = (NN-1)/N;
for(t = 0; t <= T-1; t++) {
for(_Mdi = 0; _Mdi <= _invt; _Mdi++) {
_peeli = 0;
for(i = N*_Mdi; i <= min(N*_Mdi+N-1,NN-1); i++) {
A[_peeli] = 0;
_peeli = _peeli + 1;
}
}
}
I find the modulo easier to read in this case, but I guess that's a question of taste. It's certainly not 'wrong' to use a modulo, and probably worth the trade off in most cases if it makes your code clearer.