https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100846
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rguenth at gcc dot gnu.org --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- I think that this is iteration space splitting, turning the loop into for (int i = 0; i < 100; i+=2) if (1) x[i] += 1; for (int i = 1; i < 100; i+=2) if (0) x[i] += 1; alternatively it is unrolling driven by jump threading. That said, we'd likely want to handle for (int i = 0; i < 100; ++i) if ((i & 1) == 0) x[i] += 1; else y[i] += 1; as well. loop distribution would eventually create two of the original loops out of that. I think the most promising way is to do unrolling and have that keyed on the ability to optimize away the branches. So yes, it's ivcanon, but not said pass but the implementation file.