2014-05-19 Tom de Vries <tom@codesourcery.com>
* cgraphunit.c (cgraph_add_new_function): Dump message on new function.
(analyze_function): Don't dump function to gimple dump file.
* gimplify.c: Add tree-dump.h include.
(gimplify_function_tree): Dump function to gimple dump file.
* omp-low.c: Add tree-dump.h include.
(finalize_task_copyfn): Dump new function to gimple dump file.
(expand_omp_taskreg, expand_omp_target): Dump new function to dump file.
* stor-layout.c (finalize_size_functions): Don't dump function to gimple
dump file.
* gcc.dg/gomp/dump-task.c: New test.
---
gcc/cgraphunit.c | 15 ++++++++++++++-
gcc/gimplify.c | 3 +++
gcc/omp-low.c | 6 ++++++
gcc/stor-layout.c | 1 -
gcc/testsuite/gcc.dg/gomp/dump-task.c | 33 +++++++++++++++++++++++++++++++++
5 files changed, 56 insertions(+), 2 deletions(-)
create mode 100644 gcc/testsuite/gcc.dg/gomp/dump-task.c
@@ -491,6 +491,20 @@ cgraph_add_new_function (tree fndecl, bool lowered)
{
gcc::pass_manager *passes = g->get_passes ();
struct cgraph_node *node;
+
+ if (dump_file)
+ {
+ const char *function_type = ((gimple_has_body_p (fndecl))
+ ? (lowered
+ ? "low gimple"
+ : "high gimple")
+ : "to-be-gimplified");
+ fprintf (dump_file,
+ "Added new %s function %s to callgraph\n",
+ function_type,
+ fndecl_name (fndecl));
+ }
+
switch (cgraph_state)
{
case CGRAPH_STATE_PARSING:
@@ -647,7 +661,6 @@ analyze_function (struct cgraph_node *node)
body. */
if (!gimple_has_body_p (decl))
gimplify_function_tree (decl);
- dump_function (TDI_generic, decl);
/* Lower the function. */
if (!node->lowered)
@@ -59,6 +59,7 @@ along with GCC; see the file COPYING3. If not see
#include "omp-low.h"
#include "gimple-low.h"
#include "cilk.h"
+#include "tree-dump.h"
#include "langhooks-def.h" /* FIXME: for lhd_set_decl_assembler_name */
#include "tree-pass.h" /* FIXME: only for PROP_gimple_any */
@@ -8864,6 +8865,8 @@ gimplify_function_tree (tree fndecl)
cfun->curr_properties = PROP_gimple_any;
pop_cfun ();
+
+ dump_function (TDI_generic, fndecl);
}
/* Return a dummy expression of type TYPE in order to keep going after an
@@ -71,6 +71,7 @@ along with GCC; see the file COPYING3. If not see
#include "ipa-prop.h"
#include "tree-nested.h"
#include "tree-eh.h"
+#include "tree-dump.h"
/* Lowering of OpenMP parallel and workshare constructs proceeds in two
@@ -1396,6 +1397,7 @@ finalize_task_copyfn (gimple task_stmt)
pop_cfun ();
/* Inform the callgraph about the new function. */
+ dump_function (TDI_generic, child_fn);
cgraph_add_new_function (child_fn, false);
}
@@ -4843,6 +4845,8 @@ 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_add_new_function (child_fn, true);
+ if (dump_file)
+ dump_function_to_file (child_fn, dump_file, dump_flags);
/* Fix the callgraph edges for child_cfun. Those for cfun will be
fixed in a following pass. */
@@ -7963,6 +7967,8 @@ expand_omp_target (struct omp_region *region)
/* Inform the callgraph about the new function. */
DECL_STRUCT_FUNCTION (child_fn)->curr_properties = cfun->curr_properties;
cgraph_add_new_function (child_fn, true);
+ if (dump_file)
+ dump_function_to_file (child_fn, dump_file, dump_flags);
/* Fix the callgraph edges for child_cfun. Those for cfun will be
fixed in a following pass. */
@@ -297,7 +297,6 @@ finalize_size_functions (void)
set_cfun (NULL);
dump_function (TDI_original, fndecl);
gimplify_function_tree (fndecl);
- dump_function (TDI_generic, fndecl);
cgraph_finalize_function (fndecl, false);
}
new file mode 100644
@@ -0,0 +1,33 @@
+/* https://gcc.gnu.org/ml/gcc/2014-03/msg00312.html
+ https://gcc.gnu.org/ml/gcc/2014-05/msg00117.html */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fopenmp -fdump-tree-gimple -fdump-tree-ompexp" } */
+
+int
+main(void)
+{
+#pragma omp parallel
+ {
+ extern void foo(void);
+ foo ();
+ }
+ return 0;
+}
+
+
+/* Check that low gimple representation does not end up in high gimple
+ dump. */
+/* { dg-final { scan-tree-dump-not "main._omp_fn.0" "gimple" } } */
+
+/* Check for 3 references in ompexp dump: new function notification, function
+ dump and reference in main. */
+/* { dg-final { scan-tree-dump-times "main._omp_fn.0" 3 "ompexp" } } */
+
+/* Check for function dump of main._omp_fn.0. */
+/* { dg-final { scan-tree-dump-times "main._omp_fn.0 \\(void" 1 "ompexp" } } */
+
+/* Check for presence of function body of main._omp_fn.0. */
+/* { dg-final { scan-tree-dump-times "foo \\(\\)" 1 "ompexp" } } */
+
+/* { dg-final { cleanup-tree-dump "gimple" } } */
+/* { dg-final { cleanup-tree-dump "ompexp" } } */
--
1.9.1