public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-990] openmp: Fix up handling of implicit lastprivate on outer constructs for implicit linear and lastpriv
@ 2021-05-21 19:15 Jakub Jelinek
0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2021-05-21 19:15 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:0c6e792dd5c96a48c873b73c2d5b1ee4fc4b6b8e
commit r12-990-g0c6e792dd5c96a48c873b73c2d5b1ee4fc4b6b8e
Author: Jakub Jelinek <jakub@redhat.com>
Date: Fri May 21 21:13:06 2021 +0200
openmp: Fix up handling of implicit lastprivate on outer constructs for implicit linear and lastprivate IVs [PR99928]
This patch fixes the handling of lastprivate propagation to outer combined/composite
leaf constructs from implicit linear or lastprivate clauses on simd IVs and adds missing
testsuite coverage for explicit and implicit lastprivate on simd IVs.
2021-05-21 Jakub Jelinek <jakub@redhat.com>
PR middle-end/99928
* gimplify.c (omp_lastprivate_for_combined_outer_constructs): New
function.
(gimplify_scan_omp_clauses) <case OMP_CLAUSE_LASTPRIVATE>: Use it.
(gimplify_omp_for): Likewise.
* c-c++-common/gomp/pr99928-6.c: Remove all xfails.
* c-c++-common/gomp/pr99928-13.c: New test.
* c-c++-common/gomp/pr99928-14.c: New test.
Diff:
---
gcc/gimplify.c | 270 ++++++++-------------------
gcc/testsuite/c-c++-common/gomp/pr99928-13.c | 171 +++++++++++++++++
gcc/testsuite/c-c++-common/gomp/pr99928-14.c | 171 +++++++++++++++++
gcc/testsuite/c-c++-common/gomp/pr99928-6.c | 16 +-
4 files changed, 423 insertions(+), 205 deletions(-)
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 719a4e16391..28bf1b0ba25 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -8533,6 +8533,73 @@ omp_target_reorder_clauses (tree *list_p)
}
}
+/* DECL is supposed to have lastprivate semantics in the outer contexts
+ of combined/composite constructs, starting with OCTX.
+ Add needed lastprivate, shared or map clause if no data sharing or
+ mapping clause are present. IMPLICIT_P is true if it is an implicit
+ clause (IV on simd), in which case the lastprivate will not be
+ copied to some constructs. */
+
+static void
+omp_lastprivate_for_combined_outer_constructs (struct gimplify_omp_ctx *octx,
+ tree decl, bool implicit_p)
+{
+ struct gimplify_omp_ctx *orig_octx = octx;
+ for (; octx; octx = octx->outer_context)
+ {
+ if ((octx->region_type == ORT_COMBINED_PARALLEL
+ || (octx->region_type & ORT_COMBINED_TEAMS) == ORT_COMBINED_TEAMS)
+ && splay_tree_lookup (octx->variables,
+ (splay_tree_key) decl) == NULL)
+ {
+ omp_add_variable (octx, decl, GOVD_SHARED | GOVD_SEEN);
+ continue;
+ }
+ if ((octx->region_type & ORT_TASK) != 0
+ && octx->combined_loop
+ && splay_tree_lookup (octx->variables,
+ (splay_tree_key) decl) == NULL)
+ {
+ omp_add_variable (octx, decl, GOVD_LASTPRIVATE | GOVD_SEEN);
+ continue;
+ }
+ if (implicit_p
+ && octx->region_type == ORT_WORKSHARE
+ && octx->combined_loop
+ && splay_tree_lookup (octx->variables,
+ (splay_tree_key) decl) == NULL
+ && octx->outer_context
+ && octx->outer_context->region_type == ORT_COMBINED_PARALLEL
+ && splay_tree_lookup (octx->outer_context->variables,
+ (splay_tree_key) decl) == NULL)
+ {
+ octx = octx->outer_context;
+ omp_add_variable (octx, decl, GOVD_LASTPRIVATE | GOVD_SEEN);
+ continue;
+ }
+ if ((octx->region_type == ORT_WORKSHARE || octx->region_type == ORT_ACC)
+ && octx->combined_loop
+ && splay_tree_lookup (octx->variables,
+ (splay_tree_key) decl) == NULL
+ && !omp_check_private (octx, decl, false))
+ {
+ omp_add_variable (octx, decl, GOVD_LASTPRIVATE | GOVD_SEEN);
+ continue;
+ }
+ if (octx->region_type == ORT_COMBINED_TARGET
+ && splay_tree_lookup (octx->variables,
+ (splay_tree_key) decl) == NULL)
+ {
+ omp_add_variable (octx, decl, GOVD_MAP | GOVD_SEEN);
+ octx = octx->outer_context;
+ break;
+ }
+ break;
+ }
+ if (octx && (implicit_p || octx != orig_octx))
+ omp_notice_variable (octx, decl, true);
+}
+
/* Scan the OMP clauses in *LIST_P, installing mappings into a new
and previous omp contexts. */
@@ -8642,48 +8709,8 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
}
if (OMP_CLAUSE_LASTPRIVATE_CONDITIONAL (c))
flags |= GOVD_LASTPRIVATE_CONDITIONAL;
- struct gimplify_omp_ctx *octx;
- for (octx = outer_ctx; octx; octx = octx->outer_context)
- {
- if ((octx->region_type == ORT_COMBINED_PARALLEL
- || ((octx->region_type & ORT_COMBINED_TEAMS)
- == ORT_COMBINED_TEAMS))
- && splay_tree_lookup (octx->variables,
- (splay_tree_key) decl) == NULL)
- {
- omp_add_variable (octx, decl, GOVD_SHARED | GOVD_SEEN);
- continue;
- }
- if ((octx->region_type & ORT_TASK) != 0
- && octx->combined_loop
- && splay_tree_lookup (octx->variables,
- (splay_tree_key) decl) == NULL)
- {
- omp_add_variable (octx, decl, GOVD_LASTPRIVATE | GOVD_SEEN);
- continue;
- }
- if ((octx->region_type == ORT_WORKSHARE
- || octx->region_type == ORT_ACC)
- && octx->combined_loop
- && splay_tree_lookup (octx->variables,
- (splay_tree_key) decl) == NULL
- && !omp_check_private (octx, decl, false))
- {
- omp_add_variable (octx, decl, GOVD_LASTPRIVATE | GOVD_SEEN);
- continue;
- }
- if (octx->region_type == ORT_COMBINED_TARGET
- && splay_tree_lookup (octx->variables,
- (splay_tree_key) decl) == NULL)
- {
- omp_add_variable (octx, decl, GOVD_MAP | GOVD_SEEN);
- octx = octx->outer_context;
- break;
- }
- break;
- }
- if (octx && octx != outer_ctx)
- omp_notice_variable (octx, decl, true);
+ omp_lastprivate_for_combined_outer_constructs (outer_ctx, decl,
+ false);
goto do_add;
case OMP_CLAUSE_REDUCTION:
if (OMP_CLAUSE_REDUCTION_TASK (c))
@@ -11853,80 +11880,8 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
OMP_FOR_CLAUSES (for_stmt) = c;
omp_add_variable (gimplify_omp_ctxp, decl, flags);
if (outer && !OMP_CLAUSE_LINEAR_NO_COPYOUT (c))
- {
- if (outer->region_type == ORT_WORKSHARE
- && outer->combined_loop)
- {
- if (outer->outer_context
- && (outer->outer_context->region_type
- == ORT_COMBINED_PARALLEL))
- outer = outer->outer_context;
- else if (omp_check_private (outer, decl, false))
- outer = NULL;
- }
- else if (((outer->region_type & ORT_TASKLOOP)
- == ORT_TASKLOOP)
- && outer->combined_loop
- && !omp_check_private (gimplify_omp_ctxp,
- decl, false))
- ;
- else if (outer->region_type != ORT_COMBINED_PARALLEL)
- {
- omp_notice_variable (outer, decl, true);
- outer = NULL;
- }
- if (outer)
- {
- n = splay_tree_lookup (outer->variables,
- (splay_tree_key)decl);
- if (n == NULL || (n->value & GOVD_DATA_SHARE_CLASS) == 0)
- {
- omp_add_variable (outer, decl,
- GOVD_LASTPRIVATE | GOVD_SEEN);
- if (outer->region_type == ORT_COMBINED_PARALLEL
- && outer->outer_context
- && (outer->outer_context->region_type
- == ORT_WORKSHARE)
- && outer->outer_context->combined_loop)
- {
- outer = outer->outer_context;
- n = splay_tree_lookup (outer->variables,
- (splay_tree_key)decl);
- if (omp_check_private (outer, decl, false))
- outer = NULL;
- else if (n == NULL
- || ((n->value & GOVD_DATA_SHARE_CLASS)
- == 0))
- omp_add_variable (outer, decl,
- GOVD_LASTPRIVATE
- | GOVD_SEEN);
- else
- outer = NULL;
- }
- if (outer && outer->outer_context
- && ((outer->outer_context->region_type
- & ORT_COMBINED_TEAMS) == ORT_COMBINED_TEAMS
- || (((outer->region_type & ORT_TASKLOOP)
- == ORT_TASKLOOP)
- && (outer->outer_context->region_type
- == ORT_COMBINED_PARALLEL))))
- {
- outer = outer->outer_context;
- n = splay_tree_lookup (outer->variables,
- (splay_tree_key)decl);
- if (n == NULL
- || (n->value & GOVD_DATA_SHARE_CLASS) == 0)
- omp_add_variable (outer, decl,
- GOVD_SHARED | GOVD_SEEN);
- else
- outer = NULL;
- }
- if (outer && outer->outer_context)
- omp_notice_variable (outer->outer_context, decl,
- true);
- }
- }
- }
+ omp_lastprivate_for_combined_outer_constructs (outer, decl,
+ true);
}
else
{
@@ -11945,87 +11900,8 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
struct gimplify_omp_ctx *outer
= gimplify_omp_ctxp->outer_context;
if (outer && lastprivate)
- {
- if (outer->region_type == ORT_WORKSHARE
- && outer->combined_loop)
- {
- n = splay_tree_lookup (outer->variables,
- (splay_tree_key)decl);
- if (n != NULL && (n->value & GOVD_LOCAL) != 0)
- {
- lastprivate = false;
- outer = NULL;
- }
- else if (outer->outer_context
- && (outer->outer_context->region_type
- == ORT_COMBINED_PARALLEL))
- outer = outer->outer_context;
- else if (omp_check_private (outer, decl, false))
- outer = NULL;
- }
- else if (((outer->region_type & ORT_TASKLOOP)
- == ORT_TASKLOOP)
- && outer->combined_loop
- && !omp_check_private (gimplify_omp_ctxp,
- decl, false))
- ;
- else if (outer->region_type != ORT_COMBINED_PARALLEL)
- {
- omp_notice_variable (outer, decl, true);
- outer = NULL;
- }
- if (outer)
- {
- n = splay_tree_lookup (outer->variables,
- (splay_tree_key)decl);
- if (n == NULL || (n->value & GOVD_DATA_SHARE_CLASS) == 0)
- {
- omp_add_variable (outer, decl,
- GOVD_LASTPRIVATE | GOVD_SEEN);
- if (outer->region_type == ORT_COMBINED_PARALLEL
- && outer->outer_context
- && (outer->outer_context->region_type
- == ORT_WORKSHARE)
- && outer->outer_context->combined_loop)
- {
- outer = outer->outer_context;
- n = splay_tree_lookup (outer->variables,
- (splay_tree_key)decl);
- if (omp_check_private (outer, decl, false))
- outer = NULL;
- else if (n == NULL
- || ((n->value & GOVD_DATA_SHARE_CLASS)
- == 0))
- omp_add_variable (outer, decl,
- GOVD_LASTPRIVATE
- | GOVD_SEEN);
- else
- outer = NULL;
- }
- if (outer && outer->outer_context
- && ((outer->outer_context->region_type
- & ORT_COMBINED_TEAMS) == ORT_COMBINED_TEAMS
- || (((outer->region_type & ORT_TASKLOOP)
- == ORT_TASKLOOP)
- && (outer->outer_context->region_type
- == ORT_COMBINED_PARALLEL))))
- {
- outer = outer->outer_context;
- n = splay_tree_lookup (outer->variables,
- (splay_tree_key)decl);
- if (n == NULL
- || (n->value & GOVD_DATA_SHARE_CLASS) == 0)
- omp_add_variable (outer, decl,
- GOVD_SHARED | GOVD_SEEN);
- else
- outer = NULL;
- }
- if (outer && outer->outer_context)
- omp_notice_variable (outer->outer_context, decl,
- true);
- }
- }
- }
+ omp_lastprivate_for_combined_outer_constructs (outer, decl,
+ true);
c = build_omp_clause (input_location,
lastprivate ? OMP_CLAUSE_LASTPRIVATE
diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-13.c b/gcc/testsuite/c-c++-common/gomp/pr99928-13.c
new file mode 100644
index 00000000000..d5d8d789adf
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/gomp/pr99928-13.c
@@ -0,0 +1,171 @@
+/* PR middle-end/99928 */
+/* { dg-do compile } */
+/* { dg-options "-fopenmp -fdump-tree-gimple" } */
+
+int j00a, j00b, j01a, j01b, j02a, j02b, j03a, j03b;
+int j06a, j06b, j07a, j07b, j08a, j08b, j09a, j09b, j10a, j10b;
+
+void
+foo (void)
+{
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j00a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j00a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j00a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j00a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j00b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j00b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j00b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j00b\\)" "gimple" } } */
+ #pragma omp distribute parallel for simd collapse(2) lastprivate (j00a, j00b)
+ for (j00a = 0; j00a < 64; j00a++)
+ for (j00b = 0; j00b < 4; j00b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j01a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j01a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j01b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j01b\\)" "gimple" } } */
+ #pragma omp distribute simd collapse(2) lastprivate (j01a, j01b)
+ for (j01a = 0; j01a < 64; j01a++)
+ for (j01b = 0; j01b < 4; j01b++)
+ ;
+}
+
+void
+bar (void)
+{
+ int j04a, j04b, j05a, j05b, j11a, j11b, j12a, j12b;
+ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j02a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j02a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j02b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j02b\\)" "gimple" } } */
+ #pragma omp for simd collapse(2) lastprivate (j02a, j02b)
+ for (j02a = 0; j02a < 64; j02a++)
+ for (j02b = 0; j02b < 4; j02b++)
+ ;
+ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j03a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j03a\\)" "gimple" } } *//* NOTE: This is implementation detail. */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j03a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j03a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j03b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j03b\\)" "gimple" } } *//* NOTE: This is implementation detail. */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j03b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j03b\\)" "gimple" } } */
+ #pragma omp master taskloop simd collapse(2) lastprivate (j03a, j03b)
+ for (j03a = 0; j03a < 64; j03a++)
+ for (j03b = 0; j03b < 4; j03b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j04a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j04a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j04a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j04b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j04b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j04b\\)" "gimple" } } */
+ #pragma omp parallel for simd collapse(2) lastprivate (j04a, j04b)
+ for (j04a = 0; j04a < 64; j04a++)
+ for (j04b = 0; j04b < 4; j04b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j05a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j05a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j05a\\)" "gimple" } } *//* NOTE: This is implementation detail. */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j05a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j05a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j05b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j05b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j05b\\)" "gimple" } } *//* NOTE: This is implementation detail. */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j05b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j05b\\)" "gimple" } } */
+ #pragma omp parallel master taskloop simd collapse(2) lastprivate (j05a, j05b)
+ for (j05a = 0; j05a < 64; j05a++)
+ for (j05b = 0; j05b < 4; j05b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j06a" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j06a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j06a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j06a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j06a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j06b" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j06b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j06b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j06b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j06b\\)" "gimple" } } */
+ #pragma omp target parallel for simd collapse(2) lastprivate (j06a, j06b)
+ for (j06a = 0; j06a < 64; j06a++)
+ for (j06b = 0; j06b < 4; j06b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j07a" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j07a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j07a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j07b" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j07b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j07b\\)" "gimple" } } */
+ #pragma omp target simd collapse(2) lastprivate (j07a, j07b)
+ for (j07a = 0; j07a < 64; j07a++)
+ for (j07b = 0; j07b < 4; j07b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j08a" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j08a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j08a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j08a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j08a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j08a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j08a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j08b" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j08b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j08b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j08b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j08b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j08b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j08b\\)" "gimple" } } */
+ #pragma omp target teams distribute parallel for simd collapse(2) lastprivate (j08a, j08b)
+ for (j08a = 0; j08a < 64; j08a++)
+ for (j08b = 0; j08b < 4; j08b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j09a" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j09a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j09a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j09a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j09a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j09b" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j09b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j09b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j09b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j09b\\)" "gimple" } } */
+ #pragma omp target teams distribute simd collapse(2) lastprivate (j09a, j09b)
+ for (j09a = 0; j09a < 64; j09a++)
+ for (j09b = 0; j09b < 4; j09b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j10a\\)" "gimple" } } *//* NOTE: This is implementation detail. */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j10a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j10a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j10b\\)" "gimple" } } *//* NOTE: This is implementation detail. */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j10b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j10b\\)" "gimple" } } */
+ #pragma omp taskloop simd collapse(2) lastprivate (j10a, j10b)
+ for (j10a = 0; j10a < 64; j10a++)
+ for (j10b = 0; j10b < 4; j10b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j11a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j11a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j11a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j11a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j11a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j11b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j11b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j11b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j11b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j11b\\)" "gimple" } } */
+ #pragma omp teams distribute parallel for simd collapse(2) lastprivate (j11a, j11b)
+ for (j11a = 0; j11a < 64; j11a++)
+ for (j11b = 0; j11b < 4; j11b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j12a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j12a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j12a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j12b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j12b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j12b\\)" "gimple" } } */
+ #pragma omp teams distribute simd collapse(2) lastprivate (j12a, j12b)
+ for (j12a = 0; j12a < 64; j12a++)
+ for (j12b = 0; j12b < 4; j12b++)
+ ;
+}
diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-14.c b/gcc/testsuite/c-c++-common/gomp/pr99928-14.c
new file mode 100644
index 00000000000..2d9e0be5d88
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/gomp/pr99928-14.c
@@ -0,0 +1,171 @@
+/* PR middle-end/99928 */
+/* { dg-do compile } */
+/* { dg-options "-fopenmp -fdump-tree-gimple" } */
+
+int j00a, j00b, j01a, j01b, j02a, j02b, j03a, j03b, j04a, j04b;
+int j06a, j06b, j07a, j07b, j08a, j08b, j09a, j09b, j10a, j10b;
+
+void
+foo (void)
+{
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j00a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j00a\\)" "gimple" } } *//* FIXME: This should be on for instead. */
+ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j00a\\)" "gimple" } } *//* FIXME. */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j00a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j00b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j00b\\)" "gimple" } } *//* FIXME: This should be on for instead. */
+ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j00b\\)" "gimple" } } *//* FIXME. */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j00b\\)" "gimple" } } */
+ #pragma omp distribute parallel for simd collapse(2)
+ for (j00a = 0; j00a < 64; j00a++)
+ for (j00b = 0; j00b < 4; j00b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j01a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j01a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j01b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j01b\\)" "gimple" } } */
+ #pragma omp distribute simd collapse(2)
+ for (j01a = 0; j01a < 64; j01a++)
+ for (j01b = 0; j01b < 4; j01b++)
+ ;
+}
+
+void
+bar (void)
+{
+ int j05a, j05b, j11a, j11b, j12a, j12b;
+ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j02a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j02a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j02b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j02b\\)" "gimple" } } */
+ #pragma omp for simd collapse(2)
+ for (j02a = 0; j02a < 64; j02a++)
+ for (j02b = 0; j02b < 4; j02b++)
+ ;
+ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j03a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j03a\\)" "gimple" } } *//* NOTE: This is implementation detail. */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j03a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j03a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j03b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j03b\\)" "gimple" } } *//* NOTE: This is implementation detail. */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j03b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j03b\\)" "gimple" } } */
+ #pragma omp master taskloop simd collapse(2)
+ for (j03a = 0; j03a < 64; j03a++)
+ for (j03b = 0; j03b < 4; j03b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j04a\\)" "gimple" } } *//* FIXME: This should be on for instead. */
+ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j04a\\)" "gimple" } } *//* FIXME. */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j04a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j04b\\)" "gimple" } } *//* FIXME: This should be on for instead. */
+ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j04b\\)" "gimple" } } *//* FIXME. */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j04b\\)" "gimple" } } */
+ #pragma omp parallel for simd collapse(2)
+ for (j04a = 0; j04a < 64; j04a++)
+ for (j04b = 0; j04b < 4; j04b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j05a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j05a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j05a\\)" "gimple" } } *//* NOTE: This is implementation detail. */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j05a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j05a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j05b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j05b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j05b\\)" "gimple" } } *//* NOTE: This is implementation detail. */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j05b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j05b\\)" "gimple" } } */
+ #pragma omp parallel master taskloop simd collapse(2)
+ for (j05a = 0; j05a < 64; j05a++)
+ for (j05b = 0; j05b < 4; j05b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j06a" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j06a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j06a\\)" "gimple" } } *//* FIXME: This should be on for instead. */
+ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j06a\\)" "gimple" } } *//* FIXME. */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j06a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j06b" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j06b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j06b\\)" "gimple" } } *//* FIXME: This should be on for instead. */
+ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j06b\\)" "gimple" } } *//* FIXME. */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j06b\\)" "gimple" } } */
+ #pragma omp target parallel for simd collapse(2)
+ for (j06a = 0; j06a < 64; j06a++)
+ for (j06b = 0; j06b < 4; j06b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j07a" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j07a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j07a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j07b" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j07b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j07b\\)" "gimple" } } */
+ #pragma omp target simd collapse(2)
+ for (j07a = 0; j07a < 64; j07a++)
+ for (j07b = 0; j07b < 4; j07b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j08a" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j08a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j08a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j08a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j08a\\)" "gimple" } } *//* FIXME: This should be on for instead. */
+ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j08a\\)" "gimple" } } *//* FIXME. */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j08a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j08b" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j08b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j08b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j08b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j08b\\)" "gimple" } } *//* FIXME: This should be on for instead. */
+ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j08b\\)" "gimple" } } *//* FIXME. */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j08b\\)" "gimple" } } */
+ #pragma omp target teams distribute parallel for simd collapse(2)
+ for (j08a = 0; j08a < 64; j08a++)
+ for (j08b = 0; j08b < 4; j08b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j09a" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j09a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j09a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j09a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j09a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j09b" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j09b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j09b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j09b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j09b\\)" "gimple" } } */
+ #pragma omp target teams distribute simd collapse(2)
+ for (j09a = 0; j09a < 64; j09a++)
+ for (j09b = 0; j09b < 4; j09b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j10a\\)" "gimple" } } *//* NOTE: This is implementation detail. */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j10a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j10a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j10b\\)" "gimple" } } *//* NOTE: This is implementation detail. */
+ /* { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j10b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j10b\\)" "gimple" } } */
+ #pragma omp taskloop simd collapse(2)
+ for (j10a = 0; j10a < 64; j10a++)
+ for (j10b = 0; j10b < 4; j10b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j11a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j11a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j11a\\)" "gimple" } } *//* FIXME: This should be on for instead. */
+ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j11a\\)" "gimple" } } *//* FIXME. */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j11a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j11b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j11b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j11b\\)" "gimple" } } *//* FIXME: This should be on for instead. */
+ /* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j11b\\)" "gimple" } } *//* FIXME. */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j11b\\)" "gimple" } } */
+ #pragma omp teams distribute parallel for simd collapse(2)
+ for (j11a = 0; j11a < 64; j11a++)
+ for (j11b = 0; j11b < 4; j11b++)
+ ;
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j12a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j12a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j12a\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j12b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j12b\\)" "gimple" } } */
+ /* { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j12b\\)" "gimple" } } */
+ #pragma omp teams distribute simd collapse(2)
+ for (j12a = 0; j12a < 64; j12a++)
+ for (j12b = 0; j12b < 4; j12b++)
+ ;
+}
diff --git a/gcc/testsuite/c-c++-common/gomp/pr99928-6.c b/gcc/testsuite/c-c++-common/gomp/pr99928-6.c
index 9934047f8be..918a97e8167 100644
--- a/gcc/testsuite/c-c++-common/gomp/pr99928-6.c
+++ b/gcc/testsuite/c-c++-common/gomp/pr99928-6.c
@@ -52,22 +52,22 @@ bar (void)
#pragma omp parallel master taskloop simd
for (j05 = 0; j05 < 64; j05++)
;
- /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j06" "gimple" { xfail *-*-* } } } */
- /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j06\\)" "gimple" { xfail *-*-* } } } */
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j06" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j06\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } *//* FIXME: This should be on for instead. */
/* { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } *//* FIXME. */
/* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j06:1\\)" "gimple" } } */
#pragma omp target parallel for simd
for (j06 = 0; j06 < 64; j06++)
;
- /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j07" "gimple" { xfail *-*-* } } } */
- /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j07\\)" "gimple" { xfail *-*-* } } } */
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j07" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j07\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j07:1\\)" "gimple" } } */
#pragma omp target simd
for (j07 = 0; j07 < 64; j07++)
;
- /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j08" "gimple" { xfail *-*-* } } } */
- /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j08\\)" "gimple" { xfail *-*-* } } } */
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j08" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j08\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j08\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } *//* FIXME: This should be on for instead. */
@@ -76,8 +76,8 @@ bar (void)
#pragma omp target teams distribute parallel for simd
for (j08 = 0; j08 < 64; j08++)
;
- /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j09" "gimple" { xfail *-*-* } } } */
- /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j09\\)" "gimple" { xfail *-*-* } } } */
+ /* { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j09" "gimple" } } */
+ /* { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j09\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j09\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j09\\)" "gimple" } } */
/* { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j09:1\\)" "gimple" } } */
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-05-21 19:15 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-21 19:15 [gcc r12-990] openmp: Fix up handling of implicit lastprivate on outer constructs for implicit linear and lastpriv Jakub Jelinek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).