aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimplify.cc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2022-09-06 09:19:24 +0200
committerJakub Jelinek <jakub@redhat.com>2022-09-06 09:19:24 +0200
commit3f585bdaa7f6fb02753ba7b4918f065357a6b7fd (patch)
tree53ea65f5ebeb1bdd0118b0fc92532776c4ccfb69 /gcc/gimplify.cc
parentfc52efeb9c6fe214ea78f9d506aa9e8ee9ebdd61 (diff)
downloadgcc-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/gimplify.cc')
-rw-r--r--gcc/gimplify.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc
index 988fc93..dcdc852 100644
--- a/gcc/gimplify.cc
+++ b/gcc/gimplify.cc
@@ -12427,7 +12427,7 @@ gimplify_omp_taskloop_expr (tree type, tree *tp, gimple_seq *pre_p,
}
/* Helper function of gimplify_omp_for, find OMP_ORDERED with
- OMP_CLAUSE_DOACROSS clause inside of OMP_FOR's body. */
+ null OMP_ORDERED_BODY inside of OMP_FOR's body. */
static tree
find_standalone_omp_ordered (tree *tp, int *walk_subtrees, void *)
@@ -12435,7 +12435,7 @@ find_standalone_omp_ordered (tree *tp, int *walk_subtrees, void *)
switch (TREE_CODE (*tp))
{
case OMP_ORDERED:
- if (omp_find_clause (OMP_ORDERED_CLAUSES (*tp), OMP_CLAUSE_DOACROSS))
+ if (OMP_ORDERED_BODY (*tp) == NULL_TREE)
return *tp;
break;
case OMP_SIMD:
@@ -15839,6 +15839,9 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
break;
case OMP_ORDERED:
g = gimplify_omp_ordered (*expr_p, body);
+ if (OMP_BODY (*expr_p) == NULL_TREE
+ && gimple_code (g) == GIMPLE_OMP_ORDERED)
+ gimple_omp_ordered_standalone (g);
break;
case OMP_MASKED:
gimplify_scan_omp_clauses (&OMP_MASKED_CLAUSES (*expr_p),