openmp: -fopenmp-simd fixes [PR98187]
authorJakub Jelinek <jakub@redhat.com>
Tue, 8 Dec 2020 09:45:30 +0000 (10:45 +0100)
committerJakub Jelinek <jakub@redhat.com>
Tue, 8 Dec 2020 09:45:30 +0000 (10:45 +0100)
commit31007091b10944c358e5038a6271d7e2744cde37
treebeb5b083c035dd644ad764ab68d9ab8f6c240a4c
parentc2c198bfd1e747b761c6b9b13417685bd4378d57
openmp: -fopenmp-simd fixes [PR98187]

This patch fixes two bugs in the -fopenmp-simd support.  One is that
in C++ #pragma omp parallel master would actually create OMP_PARALLEL
in the IL, which is a big no-no for -fopenmp-simd, we should be creating
only the constructs -fopenmp-simd handles (mainly OMP_SIMD, OMP_LOOP which
is gimplified as simd in that case, declare simd/reduction and ordered simd).

The other bug was that #pragma omp master taskloop simd combined construct
contains simd and thus should be recognized as #pragma omp simd (with only
the simd applicable clauses), but as master wasn't included in
omp_pragmas_simd, we'd ignore it completely instead.

2020-12-08  Jakub Jelinek  <jakub@redhat.com>

PR c++/98187
* c-pragma.c (omp_pragmas): Remove "master".
(omp_pragmas_simd): Add "master".

* parser.c (cp_parser_omp_parallel): For parallel master with
-fopenmp-simd only, just call cp_parser_omp_master instead of
wrapping it in OMP_PARALLEL.

* c-c++-common/gomp/pr98187.c: New test.
gcc/c-family/c-pragma.c
gcc/cp/parser.c
gcc/testsuite/c-c++-common/gomp/pr98187.c [new file with mode: 0644]