mirror of git://gcc.gnu.org/git/gcc.git
omp-low.c (lookup_decl_in_outer_ctx): Allow calling this with !ctx->is_nested.
* omp-low.c (lookup_decl_in_outer_ctx): Allow calling this with !ctx->is_nested. (maybe_lookup_decl_in_outer_ctx): Look up in outer contexts even if !ctx->is_nested. (lower_copyprivate_clauses, lower_send_clauses, lower_send_shared_vars): Call lookup_decl_in_outer_ctx unconditionally. * testsuite/libgomp.c/private-1.c: New test. From-SVN: r130590
This commit is contained in:
parent
22164c3db7
commit
d2dda7fed0
|
@ -1,5 +1,13 @@
|
||||||
2007-12-03 Jakub Jelinek <jakub@redhat.com>
|
2007-12-03 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* omp-low.c (lookup_decl_in_outer_ctx): Allow calling this
|
||||||
|
with !ctx->is_nested.
|
||||||
|
(maybe_lookup_decl_in_outer_ctx): Look up in outer contexts
|
||||||
|
even if !ctx->is_nested.
|
||||||
|
(lower_copyprivate_clauses, lower_send_clauses,
|
||||||
|
lower_send_shared_vars): Call lookup_decl_in_outer_ctx
|
||||||
|
unconditionally.
|
||||||
|
|
||||||
PR middle-end/29749
|
PR middle-end/29749
|
||||||
* fold-const.c (fold_binary) <case BIT_AND_EXPR>: Optimize
|
* fold-const.c (fold_binary) <case BIT_AND_EXPR>: Optimize
|
||||||
(X << C1) & C2 into (X << C1) & (C2 | ((1 << C1) - 1))
|
(X << C1) & C2 into (X << C1) & (C2 | ((1 << C1) - 1))
|
||||||
|
|
|
@ -1518,12 +1518,10 @@ lookup_decl_in_outer_ctx (tree decl, omp_context *ctx)
|
||||||
tree t;
|
tree t;
|
||||||
omp_context *up;
|
omp_context *up;
|
||||||
|
|
||||||
gcc_assert (ctx->is_nested);
|
|
||||||
|
|
||||||
for (up = ctx->outer, t = NULL; up && t == NULL; up = up->outer)
|
for (up = ctx->outer, t = NULL; up && t == NULL; up = up->outer)
|
||||||
t = maybe_lookup_decl (decl, up);
|
t = maybe_lookup_decl (decl, up);
|
||||||
|
|
||||||
gcc_assert (t || is_global_var (decl));
|
gcc_assert (!ctx->is_nested || t || is_global_var (decl));
|
||||||
|
|
||||||
return t ? t : decl;
|
return t ? t : decl;
|
||||||
}
|
}
|
||||||
|
@ -1538,7 +1536,6 @@ maybe_lookup_decl_in_outer_ctx (tree decl, omp_context *ctx)
|
||||||
tree t = NULL;
|
tree t = NULL;
|
||||||
omp_context *up;
|
omp_context *up;
|
||||||
|
|
||||||
if (ctx->is_nested)
|
|
||||||
for (up = ctx->outer, t = NULL; up && t == NULL; up = up->outer)
|
for (up = ctx->outer, t = NULL; up && t == NULL; up = up->outer)
|
||||||
t = maybe_lookup_decl (decl, up);
|
t = maybe_lookup_decl (decl, up);
|
||||||
|
|
||||||
|
@ -2012,7 +2009,7 @@ lower_copyprivate_clauses (tree clauses, tree *slist, tree *rlist,
|
||||||
by_ref = use_pointer_for_field (var, false);
|
by_ref = use_pointer_for_field (var, false);
|
||||||
|
|
||||||
ref = build_sender_ref (var, ctx);
|
ref = build_sender_ref (var, ctx);
|
||||||
x = (ctx->is_nested) ? lookup_decl_in_outer_ctx (var, ctx) : var;
|
x = lookup_decl_in_outer_ctx (var, ctx);
|
||||||
x = by_ref ? build_fold_addr_expr (x) : x;
|
x = by_ref ? build_fold_addr_expr (x) : x;
|
||||||
x = build_gimple_modify_stmt (ref, x);
|
x = build_gimple_modify_stmt (ref, x);
|
||||||
gimplify_and_add (x, slist);
|
gimplify_and_add (x, slist);
|
||||||
|
@ -2053,8 +2050,7 @@ lower_send_clauses (tree clauses, tree *ilist, tree *olist, omp_context *ctx)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var = val = OMP_CLAUSE_DECL (c);
|
val = OMP_CLAUSE_DECL (c);
|
||||||
if (ctx->is_nested)
|
|
||||||
var = lookup_decl_in_outer_ctx (val, ctx);
|
var = lookup_decl_in_outer_ctx (val, ctx);
|
||||||
|
|
||||||
if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_COPYIN
|
if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_COPYIN
|
||||||
|
@ -2127,12 +2123,9 @@ lower_send_shared_vars (tree *ilist, tree *olist, omp_context *ctx)
|
||||||
if (!nvar || !DECL_HAS_VALUE_EXPR_P (nvar))
|
if (!nvar || !DECL_HAS_VALUE_EXPR_P (nvar))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
var = ovar;
|
|
||||||
|
|
||||||
/* If CTX is a nested parallel directive. Find the immediately
|
/* If CTX is a nested parallel directive. Find the immediately
|
||||||
enclosing parallel or workshare construct that contains a
|
enclosing parallel or workshare construct that contains a
|
||||||
mapping for OVAR. */
|
mapping for OVAR. */
|
||||||
if (ctx->is_nested)
|
|
||||||
var = lookup_decl_in_outer_ctx (ovar, ctx);
|
var = lookup_decl_in_outer_ctx (ovar, ctx);
|
||||||
|
|
||||||
if (use_pointer_for_field (ovar, true))
|
if (use_pointer_for_field (ovar, true))
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2007-12-03 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* testsuite/libgomp.c/private-1.c: New test.
|
||||||
|
|
||||||
2007-11-29 Andris Pavenis <andris.pavenis@iki.fi>
|
2007-11-29 Andris Pavenis <andris.pavenis@iki.fi>
|
||||||
Paolo Bonzini <bonzini@gnu.org>
|
Paolo Bonzini <bonzini@gnu.org>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
extern void abort (void);
|
||||||
|
|
||||||
|
int a = 18;
|
||||||
|
|
||||||
|
void
|
||||||
|
f1 (int i, int j, int k)
|
||||||
|
{
|
||||||
|
int l = 6, m = 7, n = 8;
|
||||||
|
#pragma omp parallel private(j, m) shared(k, n) firstprivate(i, l) \
|
||||||
|
num_threads(1)
|
||||||
|
{
|
||||||
|
j = 6;
|
||||||
|
m = 5;
|
||||||
|
if (++a != 19 || ++i != 9 || j != 6 || ++l != 7 || m != 5 || ++n != 9)
|
||||||
|
#pragma omp atomic
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
if (a != 19 || i != 8 || j != 26 || k != 0 || l != 6 || m != 7 || n != 9)
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
|
||||||
|
int v1 = 1, v2 = 2, v5 = 5;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
void
|
||||||
|
f2 (void)
|
||||||
|
{
|
||||||
|
int v3 = 3;
|
||||||
|
#pragma omp sections private (v1) firstprivate (v2)
|
||||||
|
{
|
||||||
|
#pragma omp section
|
||||||
|
{
|
||||||
|
int v4 = 4;
|
||||||
|
v1 = 7;
|
||||||
|
#pragma omp parallel num_threads(1) firstprivate(v1, v2, v3, v4)
|
||||||
|
{
|
||||||
|
if (++v1 != 8 || ++v2 != 3 || ++v3 != 4 || ++v4 != 5 || ++v5 != 6)
|
||||||
|
err = 1;
|
||||||
|
}
|
||||||
|
if (v1 != 7 || v2 != 2 || v3 != 3 || v4 != 4 || v5 != 6)
|
||||||
|
abort ();
|
||||||
|
if (err)
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (void)
|
||||||
|
{
|
||||||
|
f1 (8, 26, 0);
|
||||||
|
f2 ();
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue