From 76680678a8e6e41ed64b816c65298d3366ad7345 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Wed, 9 Dec 2015 10:13:35 +0000 Subject: [PATCH] Fix GOMP/GOACC_parallel handling in find_func_clobbers 2015-12-09 Tom de Vries PR tree-optimization/68716 * tree-ssa-structalias.c (find_func_clobbers): Fix handling of BUILT_IN_GOMP_PARALLEL and BUILT_IN_GOACC_PARALLEL. * testsuite/libgomp.c/omp-nested-2.c: New test. From-SVN: r231449 --- gcc/ChangeLog | 6 +++ gcc/tree-ssa-structalias.c | 47 +++++++++++++++++++++- libgomp/ChangeLog | 5 +++ libgomp/testsuite/libgomp.c/omp-nested-2.c | 4 ++ 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 libgomp/testsuite/libgomp.c/omp-nested-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index aff215e889d..82607d19ad4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-12-09 Tom de Vries + + PR tree-optimization/68716 + * tree-ssa-structalias.c (find_func_clobbers): Fix handling of + BUILT_IN_GOMP_PARALLEL and BUILT_IN_GOACC_PARALLEL. + 2015-12-09 Martin Liska * hash-traits.h (struct typed_delete_remove): New function. diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 060ff3efc1d..15e351ebe59 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -5082,7 +5082,52 @@ find_func_clobbers (struct function *fn, gimple *origt) return; case BUILT_IN_GOMP_PARALLEL: case BUILT_IN_GOACC_PARALLEL: - return; + { + unsigned int fnpos, argpos; + switch (DECL_FUNCTION_CODE (decl)) + { + case BUILT_IN_GOMP_PARALLEL: + /* __builtin_GOMP_parallel (fn, data, num_threads, flags). */ + fnpos = 0; + argpos = 1; + break; + case BUILT_IN_GOACC_PARALLEL: + /* __builtin_GOACC_parallel (device, fn, mapnum, hostaddrs, + sizes, kinds, ...). */ + fnpos = 1; + argpos = 3; + break; + default: + gcc_unreachable (); + } + + tree fnarg = gimple_call_arg (t, fnpos); + gcc_assert (TREE_CODE (fnarg) == ADDR_EXPR); + tree fndecl = TREE_OPERAND (fnarg, 0); + varinfo_t cfi = get_vi_for_tree (fndecl); + + tree arg = gimple_call_arg (t, argpos); + + /* Parameter passed by value is used. */ + lhs = get_function_part_constraint (fi, fi_uses); + struct constraint_expr *rhsp; + get_constraint_for (arg, &rhsc); + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + + /* The caller clobbers what the callee does. */ + lhs = get_function_part_constraint (fi, fi_clobbers); + rhs = get_function_part_constraint (cfi, fi_clobbers); + process_constraint (new_constraint (lhs, rhs)); + + /* The caller uses what the callee does. */ + lhs = get_function_part_constraint (fi, fi_uses); + rhs = get_function_part_constraint (cfi, fi_uses); + process_constraint (new_constraint (lhs, rhs)); + + return; + } /* printf-style functions may have hooks to set pointers to point to somewhere into the generated string. Leave them for a later exercise... */ diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index cde0b5c55a3..1b12354a075 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2015-12-09 Tom de Vries + + PR tree-optimization/68716 + * testsuite/libgomp.c/omp-nested-2.c: New test. + 2015-12-02 Thomas Schwinge * testsuite/libgomp.oacc-c-c++-common/host_data-2.c: Restrict to diff --git a/libgomp/testsuite/libgomp.c/omp-nested-2.c b/libgomp/testsuite/libgomp.c/omp-nested-2.c new file mode 100644 index 00000000000..7495afb8a21 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/omp-nested-2.c @@ -0,0 +1,4 @@ +// { dg-do run } +// { dg-additional-options "-fipa-pta" } + +#include "omp-nested-1.c" -- 2.30.2