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?
