summaryrefslogtreecommitdiff
path: root/gcc/omp-simd-clone.c
diff options
context:
space:
mode:
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2016-09-20 21:49:12 +0000
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>2016-09-20 21:49:12 +0000
commitc9c81ef3c667aaa14c498a5449ec6d134b4b66ff (patch)
tree0ac440db6513ee01deb5e5dc6142769d1e5b7b2d /gcc/omp-simd-clone.c
parent12cdcb9d74f55c165366ca1b1eeec013a0ce72ef (diff)
parent891196d7325e4c55d92d5ac5cfe7161c4f36c0ce (diff)
downloadgcc-fortran-dev.tar.gz
Merge from trunk (r239915 to r240230)fortran-dev
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/fortran-dev@240290 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/omp-simd-clone.c')
-rw-r--r--gcc/omp-simd-clone.c38
1 files changed, 29 insertions, 9 deletions
diff --git a/gcc/omp-simd-clone.c b/gcc/omp-simd-clone.c
index 467d8725225..df140d40446 100644
--- a/gcc/omp-simd-clone.c
+++ b/gcc/omp-simd-clone.c
@@ -126,13 +126,11 @@ simd_clone_clauses_extract (struct cgraph_node *node, tree clauses,
clone_info->cilk_elemental = cilk_clone;
if (!clauses)
- {
- args.release ();
- return clone_info;
- }
+ goto out;
+
clauses = TREE_VALUE (clauses);
if (!clauses || TREE_CODE (clauses) != OMP_CLAUSE)
- return clone_info;
+ goto out;
for (t = clauses; t; t = OMP_CLAUSE_CHAIN (t))
{
@@ -252,6 +250,28 @@ simd_clone_clauses_extract (struct cgraph_node *node, tree clauses,
break;
}
}
+
+ out:
+ if (TYPE_ATOMIC (TREE_TYPE (TREE_TYPE (node->decl))))
+ {
+ warning_at (DECL_SOURCE_LOCATION (node->decl), 0,
+ "ignoring %<#pragma omp declare simd%> on function "
+ "with %<_Atomic%> qualified return type");
+ args.release ();
+ return NULL;
+ }
+
+ for (unsigned int argno = 0; argno < clone_info->nargs; argno++)
+ if (TYPE_ATOMIC (args[argno])
+ && clone_info->args[argno].arg_type != SIMD_CLONE_ARG_TYPE_UNIFORM)
+ {
+ warning_at (DECL_SOURCE_LOCATION (node->decl), 0,
+ "ignoring %<#pragma omp declare simd%> on function "
+ "with %<_Atomic%> qualified non-%<uniform%> argument");
+ args.release ();
+ return NULL;
+ }
+
args.release ();
return clone_info;
}
@@ -911,11 +931,11 @@ ipa_simd_modify_function_body (struct cgraph_node *node,
}
l = adjustments.length ();
- for (i = 1; i < num_ssa_names; i++)
+ tree name;
+
+ FOR_EACH_SSA_NAME (i, name, cfun)
{
- tree name = ssa_name (i);
- if (name
- && SSA_NAME_VAR (name)
+ if (SSA_NAME_VAR (name)
&& TREE_CODE (SSA_NAME_VAR (name)) == PARM_DECL)
{
for (j = 0; j < l; j++)