On Fri, Mar 20, 2015 at 12:37:11PM +0100, Tom de Vries wrote:
> Mark omp thread functions as parallelized
>
> 2015-03-20 Tom de Vries <[email protected]>
>
> PR tree-optimization/65458
> * cgraph.c (cgraph_node::dump): Handle parallelized_function field.
> * cgraph.h (cgraph_node): Add parallelized_function field.
> * lto-cgraph.c (lto_output_node): Write parallelized_function field.
> (input_overwrite_node): Read parallelized_function field.
> * omp-low.c (expand_omp_taskreg): Set parallelized_function on
> cgraph_node for child_fn.
> * tree-parloops.c: Add include of plugin-api.h, ipa-ref.h and cgraph.h.
> Remove include of gt-tree-parloops.h.
> (parallelized_functions): Remove static variable.
> (parallelized_function_p): Rewrite using parallelized_function field of
> cgraph_node.
> (create_loop_fn): Remove adding to parallelized_functions.
You should also remove tree-parloops.c from GTFILES in gcc/Makefile.in.
> ---
> gcc/cgraph.c | 2 ++
> gcc/cgraph.h | 2 ++
> gcc/lto-cgraph.c | 2 ++
> gcc/omp-low.c | 1 +
> gcc/tree-parloops.c | 27 ++++++++-------------------
> 5 files changed, 15 insertions(+), 19 deletions(-)
>
> diff --git a/gcc/cgraph.c b/gcc/cgraph.c
> index ede58bf..4573057 100644
> --- a/gcc/cgraph.c
> +++ b/gcc/cgraph.c
> @@ -2009,6 +2009,8 @@ cgraph_node::dump (FILE *f)
> fprintf (f, " only_called_at_exit");
> if (opt_for_fn (decl, optimize_size))
> fprintf (f, " optimize_size");
> + if (parallelized_function)
> + fprintf (f, " parallelized_function");
>
> fprintf (f, "\n");
>
> diff --git a/gcc/cgraph.h b/gcc/cgraph.h
> index 52b15c5..650e689 100644
> --- a/gcc/cgraph.h
> +++ b/gcc/cgraph.h
> @@ -1317,6 +1317,8 @@ public:
> unsigned nonfreeing_fn : 1;
> /* True if there was multiple COMDAT bodies merged by lto-symtab. */
> unsigned merged : 1;
> + /* True if function was created to be executed in parallel. */
> + unsigned parallelized_function : 1;
>
> private:
> /* Worker for call_for_symbol_and_aliases. */
> diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c
> index c875fed..088de86 100644
> --- a/gcc/lto-cgraph.c
> +++ b/gcc/lto-cgraph.c
> @@ -574,6 +574,7 @@ lto_output_node (struct lto_simple_output_block *ob,
> struct cgraph_node *node,
> bp_pack_value (&bp, node->icf_merged, 1);
> bp_pack_value (&bp, node->nonfreeing_fn, 1);
> bp_pack_value (&bp, node->thunk.thunk_p, 1);
> + bp_pack_value (&bp, node->parallelized_function, 1);
> bp_pack_enum (&bp, ld_plugin_symbol_resolution,
> LDPR_NUM_KNOWN, node->resolution);
> bp_pack_value (&bp, node->instrumentation_clone, 1);
> @@ -1209,6 +1210,7 @@ input_overwrite_node (struct lto_file_decl_data
> *file_data,
> node->icf_merged = bp_unpack_value (bp, 1);
> node->nonfreeing_fn = bp_unpack_value (bp, 1);
> node->thunk.thunk_p = bp_unpack_value (bp, 1);
> + node->parallelized_function = bp_unpack_value (bp, 1);
> node->resolution = bp_unpack_enum (bp, ld_plugin_symbol_resolution,
> LDPR_NUM_KNOWN);
> node->instrumentation_clone = bp_unpack_value (bp, 1);
> diff --git a/gcc/omp-low.c b/gcc/omp-low.c
> index 48d73cb..5ca9e84 100644
> --- a/gcc/omp-low.c
> +++ b/gcc/omp-low.c
> @@ -5569,6 +5569,7 @@ expand_omp_taskreg (struct omp_region *region)
> /* Inform the callgraph about the new function. */
> DECL_STRUCT_FUNCTION (child_fn)->curr_properties =
> cfun->curr_properties;
> cgraph_node::add_new_function (child_fn, true);
> + cgraph_node::get (child_fn)->parallelized_function = 1;
IMHO you want to do this in create_omp_child_function instead, that way you
handle it not just for the parallel region, but also e.g. for the task copy
functions etc.
Ok with those changes.
Jakub