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

--- Comment #3 from Dhruv Chawla <dhruvc at gcc dot gnu.org> ---
(In reply to Harald Anlauf from comment #2)
> (In reply to Richard Biener from comment #1)
> > The auto-parallelizer has not changed, it's unmaintained.  IIRC the issue is
> > that the dependences idea of the auto-parallelizer and do concurrent are not
> > compatible.  In principle the frontend could be more selective with setting
> > the flag, but DO CONCURRENT does not mean there are no dependences at all(?)
> 
> F2023: 11.1.7.4.3  The execution cycle
> 
> (3) The block of a DO CONCURRENT construct is executed for every active
> combination of the index-name values.  Each execution of the block is an
> iteration.  The executions may occur in any order.
> 
> 
> There is a couple of restrictions in
> 
> 11.1.7.5  Additional semantics for DO CONCURRENT constructs
> 
> and at the end:
> 
> NOTE 3
> 
> The restrictions on the statements in a DO CONCURRENT construct are designed
> to ensure there are no data dependencies between iterations of the loop.
> This permits code optimizations that might otherwise be difficult or
> impossible because they would depend on properties of the program not
> visible to the compiler.

This makes me curious as to why the annotation was changed to be this way in
the first place. Shouldn't the language construct by-default guarantee it
working correctly?

It looks like this was supposed to be handled in GCC 9:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83064#c24, so was it? Was this
just something that was forgotten along the way?

Reply via email to