summaryrefslogtreecommitdiff
path: root/gcc/gimplify.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2014-06-12 21:10:11 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2014-06-12 21:10:11 +0000
commit5fddcf345b6badb03bd9a4ece4db58454738cb83 (patch)
treec4172ecef31a5a6826c56350eb72c44c9d78516b /gcc/gimplify.c
parent74b777e5d18c4e568728c4aeb9966928bcb182bb (diff)
downloadgcc-5fddcf345b6badb03bd9a4ece4db58454738cb83.tar.gz
PR middle-end/61486
* gimplify.c (struct gimplify_omp_ctx): Add distribute field. (gimplify_adjust_omp_clauses): Don't or in GOVD_LASTPRIVATE if outer combined construct is distribute. (gimplify_omp_for): For OMP_DISTRIBUTE set gimplify_omp_ctxp->distribute. * omp-low.c (scan_sharing_clauses) <case OMP_CLAUSE_SHARED>: For GIMPLE_OMP_TEAMS, if decl isn't global in outer context, record mapping into decl map. c-family/ * c-omp.c (c_omp_split_clauses): Don't crash on firstprivate in #pragma omp target teams or #pragma omp {,target }teams distribute simd. testsuite/ * c-c++-common/gomp/pr61486-1.c: New test. * c-c++-common/gomp/pr61486-2.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@211596 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gimplify.c')
-rw-r--r--gcc/gimplify.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 1635b96cd69..10f8ac6d0e0 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -139,6 +139,7 @@ struct gimplify_omp_ctx
enum omp_clause_default_kind default_kind;
enum omp_region_type region_type;
bool combined_loop;
+ bool distribute;
};
static struct gimplify_ctx *gimplify_ctxp;
@@ -6359,7 +6360,11 @@ gimplify_adjust_omp_clauses (tree *list_p)
if (n == NULL
|| (n->value & GOVD_DATA_SHARE_CLASS) == 0)
{
- int flags = GOVD_FIRSTPRIVATE | GOVD_LASTPRIVATE;
+ int flags = GOVD_FIRSTPRIVATE;
+ /* #pragma omp distribute does not allow
+ lastprivate clause. */
+ if (!ctx->outer_context->distribute)
+ flags |= GOVD_LASTPRIVATE;
if (n == NULL)
omp_add_variable (ctx->outer_context, decl,
flags | GOVD_SEEN);
@@ -6640,6 +6645,8 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
|| TREE_CODE (for_stmt) == CILK_SIMD);
gimplify_scan_omp_clauses (&OMP_FOR_CLAUSES (for_stmt), pre_p,
simd ? ORT_SIMD : ORT_WORKSHARE);
+ if (TREE_CODE (for_stmt) == OMP_DISTRIBUTE)
+ gimplify_omp_ctxp->distribute = true;
/* Handle OMP_FOR_INIT. */
for_pre_body = NULL;