Mark omp thread functions as parallelized
authorTom de Vries <tom@codesourcery.com>
Sat, 21 Mar 2015 10:14:10 +0000 (10:14 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Sat, 21 Mar 2015 10:14:10 +0000 (10:14 +0000)
2015-03-21  Tom de Vries  <tom@codesourcery.com>

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, finalize_task_copyfn): 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.
* Makefile.in (GTFILES): Remove tree-parloops.c

From-SVN: r221551

gcc/ChangeLog
gcc/Makefile.in
gcc/cgraph.c
gcc/cgraph.h
gcc/lto-cgraph.c
gcc/omp-low.c
gcc/tree-parloops.c

index e15dfc83b8e412ac01cb944e145b72ecb2cdaa56..c9737faebc7b9663d55787433966e6e1e6567e23 100644 (file)
@@ -1,3 +1,20 @@
+2015-03-21  Tom de Vries  <tom@codesourcery.com>
+
+       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, finalize_task_copyfn): 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.
+       * Makefile.in (GTFILES): Remove tree-parloops.c
+
 2015-03-20  Vladimir Makarov  <vmakarov@redhat.com>
 
        PR rtl-optimization/64366
index de1f3b6c67441e32e2d25293eb6e6e7dae5cfa40..8af45a67025f30f86ed0fac45e20d59895e5f3cd 100644 (file)
@@ -2321,7 +2321,6 @@ GTFILES = $(CPP_ID_DATA_H) $(srcdir)/input.h $(srcdir)/coretypes.h \
   $(srcdir)/tree-scalar-evolution.c \
   $(srcdir)/tree-ssa-operands.h \
   $(srcdir)/tree-profile.c $(srcdir)/tree-nested.c \
-  $(srcdir)/tree-parloops.c \
   $(srcdir)/omp-low.c \
   $(srcdir)/omp-low.h \
   $(srcdir)/targhooks.c $(out_file) $(srcdir)/passes.c $(srcdir)/cgraphunit.c \
index e2958c4a508526fb8b5dccc5c7ff4c0f2fb6da43..35164f9f406da3546489f51a05d2771e4011e5f9 100644 (file)
@@ -2008,6 +2008,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");
 
index 52b15c5741733f35593b9bf468935b61df844b90..650e68921f39b2a37bf4c65a6646e12f4ac244a0 100644 (file)
@@ -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.  */
index c875fed1dbe36f8d5ec4cbbbad3a6f737e682f26..088de8606464c35d4f50d0452fecdc5d77a94ee1 100644 (file)
@@ -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);
index 48d73cbc02110b015203f4bde3c625197107e2bb..80bddf059b1987df95f15e445a5286ff09af7180 100644 (file)
@@ -1564,6 +1564,7 @@ finalize_task_copyfn (gomp_task *task_stmt)
 
   /* Inform the callgraph about the new function.  */
   cgraph_node::add_new_function (child_fn, false);
+  cgraph_node::get (child_fn)->parallelized_function = 1;
 }
 
 /* Destroy a omp_context data structures.  Called through the splay tree
@@ -5569,6 +5570,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;
 
       /* Fix the callgraph edges for child_cfun.  Those for cfun will be
         fixed in a following pass.  */
index a5844602659bef6ed2d69745b67c17f62f0fe64d..62a6444e66bd948e4297ce97e086e0de4cf8a89f 100644 (file)
@@ -75,6 +75,9 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-parloops.h"
 #include "omp-low.h"
 #include "tree-nested.h"
+#include "plugin-api.h"
+#include "ipa-ref.h"
+#include "cgraph.h"
 
 /* This pass tries to distribute iterations of loops into several threads.
    The implementation is straightforward -- for each loop we test whether its
@@ -1422,21 +1425,14 @@ separate_decls_in_region (edge entry, edge exit,
     }
 }
 
-/* Bitmap containing uids of functions created by parallelization.  We cannot
-   allocate it from the default obstack, as it must live across compilation
-   of several functions; we make it gc allocated instead.  */
-
-static GTY(()) bitmap parallelized_functions;
-
-/* Returns true if FN was created by create_loop_fn.  */
+/* Returns true if FN was created to run in parallel.  */
 
 bool
-parallelized_function_p (tree fn)
+parallelized_function_p (tree fndecl)
 {
-  if (!parallelized_functions || !DECL_ARTIFICIAL (fn))
-    return false;
-
-  return bitmap_bit_p (parallelized_functions, DECL_UID (fn));
+  cgraph_node *node = cgraph_node::get (fndecl);
+  gcc_assert (node != NULL);
+  return node->parallelized_function;
 }
 
 /* Creates and returns an empty function that will receive the body of
@@ -1459,10 +1455,6 @@ create_loop_fn (location_t loc)
   type = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
 
   decl = build_decl (loc, FUNCTION_DECL, name, type);
-  if (!parallelized_functions)
-    parallelized_functions = BITMAP_GGC_ALLOC ();
-  bitmap_set_bit (parallelized_functions, DECL_UID (decl));
-
   TREE_STATIC (decl) = 1;
   TREE_USED (decl) = 1;
   DECL_ARTIFICIAL (decl) = 1;
@@ -2314,6 +2306,3 @@ make_pass_parallelize_loops (gcc::context *ctxt)
 {
   return new pass_parallelize_loops (ctxt);
 }
-
-
-#include "gt-tree-parloops.h"