https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70193

            Bug ID: 70193
           Summary: missed loop splitting support based on iteration space
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vekumar at gcc dot gnu.org
  Target Milestone: ---

Following the comments in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70103#c2
and discussion with Richard, filing this PR.

This is inspired by the loop flux_lam.f:68:0 at bwaves which has % operation.

int a[100],b[100];
void test(int x, int N1)
{
    int i,im1;
    for (i=0;i<N1;i++)
    { im1 = (i-1)%N1 ;
      b[i] =(a[im1]-a[i]);
    }
}

Try to split the iteration space into two and cases where no wraparound happens
can be vectorized.

int a[100],b[100];
void test(int x, int N1)
{
    int i,im1;

    for (i=0;i<1;i++)
    { im1 = (i-1)%N1 ;
      b[i] =(a[im1]-a[i]);
    }

    for (i=1;i<N1;i++)
    { im1 = (i-1);
      b[i] =(a[im1]-a[i]);<== loop can be vectorized
    }
}

Reply via email to