aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimplify.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2021-02-10 10:34:58 +0100
committerJakub Jelinek <jakub@redhat.com>2021-02-10 10:42:35 +0100
commitbd0e37f68a3aed944df4eb739a0734bb87153749 (patch)
tree48e335eed9475af51da6a5e81b8c2c989d9ab346 /gcc/gimplify.c
parent9eb7669cc040882992dee3621ebacf4f0311e8a0 (diff)
downloadgcc-bd0e37f68a3aed944df4eb739a0734bb87153749.zip
gcc-bd0e37f68a3aed944df4eb739a0734bb87153749.tar.gz
gcc-bd0e37f68a3aed944df4eb739a0734bb87153749.tar.bz2
openmp: Temporarily disable into_ssa when gimplifying OpenMP reduction clauses [PR99007]
gimplify_scan_omp_clauses was already calling gimplify_expr with false as last argument to make sure it is not an SSA_NAME, but as the testcases show, that is not enough, SSA_NAME temporaries created during that gimplification can be reused too and we can't allow SSA_NAMEs to be used across OpenMP region boundaries, as we can only firstprivatize decls. Fixed by temporarily disabling into_ssa. 2021-02-10 Jakub Jelinek <jakub@redhat.com> PR middle-end/99007 * gimplify.c (gimplify_scan_omp_clauses): For MEM_REF on reductions, temporarily disable gimplify_ctxp->into_ssa around gimplify_expr calls. * g++.dg/gomp/pr99007.C: New test. * gcc.dg/gomp/pr99007-1.c: New test. * gcc.dg/gomp/pr99007-2.c: New test. * gcc.dg/gomp/pr99007-3.c: New test.
Diffstat (limited to 'gcc/gimplify.c')
-rw-r--r--gcc/gimplify.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 95d55bb..d28fa19 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -8781,13 +8781,17 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
if (TREE_CODE (decl) == MEM_REF)
{
tree type = TREE_TYPE (decl);
+ bool saved_into_ssa = gimplify_ctxp->into_ssa;
+ gimplify_ctxp->into_ssa = false;
if (gimplify_expr (&TYPE_MAX_VALUE (TYPE_DOMAIN (type)), pre_p,
NULL, is_gimple_val, fb_rvalue, false)
== GS_ERROR)
{
+ gimplify_ctxp->into_ssa = saved_into_ssa;
remove = true;
break;
}
+ gimplify_ctxp->into_ssa = saved_into_ssa;
tree v = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
if (DECL_P (v))
{
@@ -8797,13 +8801,16 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
decl = TREE_OPERAND (decl, 0);
if (TREE_CODE (decl) == POINTER_PLUS_EXPR)
{
+ gimplify_ctxp->into_ssa = false;
if (gimplify_expr (&TREE_OPERAND (decl, 1), pre_p,
NULL, is_gimple_val, fb_rvalue, false)
== GS_ERROR)
{
+ gimplify_ctxp->into_ssa = saved_into_ssa;
remove = true;
break;
}
+ gimplify_ctxp->into_ssa = saved_into_ssa;
v = TREE_OPERAND (decl, 1);
if (DECL_P (v))
{