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

            Bug ID: 68315
           Summary: ivdep has no effect in parloops
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vries at gcc dot gnu.org
  Target Milestone: ---

Consider testcase ivdep.c:
...
void
foo (int n, int *a, int *b, int *c)
{
  int i, j;
#pragma GCC ivdep
  for (i = 0; i < n; ++i)
    a[i] = b[i] + c[i];
}
...

When compiling it with autopar on:
...
$ gcc -O2 -ftree-parallelize-loops=2 -fdump-tree-all-details ivdep.c -S
...

We find in the dump-file:
...
   FAILED: data dependencies exist across iterations
...

Although the definition of the pragma is in terms of SIMD:
...
With this pragma, the programmer asserts that there are no loop-carried
dependencies which would prevent consecutive iterations of the following loop
from executing concurrently with SIMD (single instruction multiple data)
instructions. 
...

I'd say the no loop-carried dependencies bit means that we can use it for
autopar.

Reply via email to