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.

Reply via email to