diff mbox

[2/3,PR65458] Mark omp thread functions as parallelized

Message ID 5509B42F.1040707@mentor.com
State New
Headers show

Commit Message

Tom de Vries March 18, 2015, 5:21 p.m. UTC
Hi,

this patch fixes PR65458.

The patch marks omp thread functions as parallelized, which means the parloops 
pass no longer attempts to modify that function.

Bootstrapped and reg-tested on x86_64.

OK for stage4 trunk?

Thanks,
- Tom

Comments

Jakub Jelinek March 18, 2015, 5:25 p.m. UTC | #1
On Wed, Mar 18, 2015 at 06:21:51PM +0100, Tom de Vries wrote:
> this patch fixes PR65458.
> 
> The patch marks omp thread functions as parallelized, which means the
> parloops pass no longer attempts to modify that function.
> 
> Bootstrapped and reg-tested on x86_64.
> 
> OK for stage4 trunk?

This will certainly not work with LTO.
IMHO you instead want some cgraph_node flag, and make sure you stream it
out and in for LTO.

	Jakub
diff mbox

Patch

Mark omp thread functions as parallelized

2015-03-18  Tom de Vries  <tom@codesourcery.com>

	PR tree-optimization/65458
	* omp-low.c: Add include of tree-parloops.h.
	(expand_omp_taskreg): Call mark_parallelized_function for child_fn.
	* tree-parloops.c (mark_parallelized_function): New function.  Factor
	out of ..
	(create_loop_fn): ... here.
	* tree-parloops.h (mark_parallelized_function): Declare.
---
 gcc/omp-low.c       |  2 ++
 gcc/tree-parloops.c | 14 ++++++++++----
 gcc/tree-parloops.h |  1 +
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index 48d73cb..c5c0ccf 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -108,6 +108,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "context.h"
 #include "lto-section-names.h"
 #include "gomp-constants.h"
+#include "tree-parloops.h"
 
 
 /* Lowering of OMP parallel and workshare constructs proceeds in two
@@ -5370,6 +5371,7 @@  expand_omp_taskreg (struct omp_region *region)
   entry_stmt = last_stmt (region->entry);
   child_fn = gimple_omp_taskreg_child_fn (entry_stmt);
   child_cfun = DECL_STRUCT_FUNCTION (child_fn);
+  mark_parallelized_function (child_fn);
 
   entry_bb = region->entry;
   exit_bb = region->exit;
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index a584460..7405258 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -1439,6 +1439,16 @@  parallelized_function_p (tree fn)
   return bitmap_bit_p (parallelized_functions, DECL_UID (fn));
 }
 
+void
+mark_parallelized_function (tree fndecl)
+{
+  if (!parallelized_functions)
+    parallelized_functions = BITMAP_GGC_ALLOC ();
+
+  bitmap_set_bit (parallelized_functions, DECL_UID (fndecl));
+}
+
+
 /* Creates and returns an empty function that will receive the body of
    a parallelized loop.  */
 
@@ -1459,10 +1469,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;
diff --git a/gcc/tree-parloops.h b/gcc/tree-parloops.h
index d71f0a4..a742755 100644
--- a/gcc/tree-parloops.h
+++ b/gcc/tree-parloops.h
@@ -21,5 +21,6 @@  along with GCC; see the file COPYING3.  If not see
 #define GCC_TREE_PARLOOPS_H
 
 extern bool parallelized_function_p (tree);
+extern void mark_parallelized_function (tree);
 
 #endif /* GCC_TREE_PARLOOPS_H */
-- 
1.9.1