https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101145
--- Comment #2 from bin cheng <amker at gcc dot gnu.org> --- (In reply to Richard Biener from comment #1) > This comes up with a pending patch to split loops like > > void > foo (int *a, int *b, unsigned l, unsigned n) > { > while (++l != n) > a[l] = b[l] + 1; > } > > into > > while (++l > n) > a[l] = b[l] + 1; > while (++l < n) > a[l] = b[l] + 1; > > since for the second loop (the "usual" case involving no wrapping of the IV) > this results in affine IVs and thus analyzable data dependence. Special case like "i++ > constant" are handled in function adjust_cond_for_loop_until_wrap, however, it only handles constant invariant on the other side right now. Will see how to cover simple cases as reported here.