diff options
author | Jakub Jelinek <jakub@redhat.com> | 2022-09-06 09:19:24 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2022-09-06 09:19:24 +0200 |
commit | 3f585bdaa7f6fb02753ba7b4918f065357a6b7fd (patch) | |
tree | 53ea65f5ebeb1bdd0118b0fc92532776c4ccfb69 /gcc/cp/pt.cc | |
parent | fc52efeb9c6fe214ea78f9d506aa9e8ee9ebdd61 (diff) | |
download | gcc-3f585bdaa7f6fb02753ba7b4918f065357a6b7fd.zip gcc-3f585bdaa7f6fb02753ba7b4918f065357a6b7fd.tar.gz gcc-3f585bdaa7f6fb02753ba7b4918f065357a6b7fd.tar.bz2 |
openmp: Introduce gimple_omp_ordered_standalone_p
On Sat, Sep 03, 2022 at 10:07:27AM +0200, Jakub Jelinek via Gcc-patches wrote:
> Incrementally, I'd like to change the way we differentiate between
> stand-alone and block-associated ordered constructs, because the current
> way of looking for presence of doacross clause doesn't work well if those
> clauses are removed because they had been invalid (wrong syntax or
> unknown variables in it etc.)
The following, so far only lightly tested, patch implements that.
2022-09-06 Jakub Jelinek <jakub@redhat.com>
gcc/
* gimple.h (enum gf_mask): Add GF_OMP_ORDERED_STANDALONE enumerator.
(gimple_omp_subcode): Use GIMPLE_OMP_ORDERED instead of
GIMPLE_OMP_TEAMS as upper bound.
(gimple_omp_ordered_standalone_p, gimple_omp_ordered_standalone): New
inline functions.
* gimplify.cc (find_standalone_omp_ordered): Look for OMP_ORDERED with
NULL OMP_ORDERED_BODY rather than with OMP_DOACROSS clause.
(gimplify_expr): Call gimple_omp_ordered_standalone for OMP_ORDERED
with NULL OMP_ORDERED_BODY.
* omp-low.cc (check_omp_nesting_restrictions): Use
gimple_omp_ordered_standalone_p test instead of
omp_find_clause (..., OMP_CLAUSE_DOACROSS).
(lower_omp_ordered): Likewise.
* omp-expand.cc (expand_omp, build_omp_regions_1,
omp_make_gimple_edges): Likewise.
gcc/cp/
* pt.cc (tsubst_expr) <case OMP_ORDERED>: If OMP_BODY was NULL, keep
it NULL after instantiation too.
gcc/testsuite/
* c-c++-common/gomp/sink-3.c: Don't expect a superfluous error during
error recovery.
* c-c++-common/gomp/doacross-6.c (foo): Add further tests.
Diffstat (limited to 'gcc/cp/pt.cc')
-rw-r--r-- | gcc/cp/pt.cc | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index cd0d892..c5fc0f1 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -19526,9 +19526,14 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl, case OMP_ORDERED: tmp = tsubst_omp_clauses (OMP_ORDERED_CLAUSES (t), C_ORT_OMP, args, complain, in_decl); - stmt = push_stmt_list (); - RECUR (OMP_BODY (t)); - stmt = pop_stmt_list (stmt); + if (OMP_BODY (t)) + { + stmt = push_stmt_list (); + RECUR (OMP_BODY (t)); + stmt = pop_stmt_list (stmt); + } + else + stmt = NULL_TREE; t = copy_node (t); OMP_BODY (t) = stmt; |