aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2013-10-17 17:41:07 +0000
committerAndrew Macleod <amacleod@gcc.gnu.org>2013-10-17 17:41:07 +0000
commit0645c1a22d29fcbe12ee8f774709b20b1bc3f594 (patch)
tree7581ded8e73540ef06a21726e484e189f067777a
parent6f1abb55073c46b93155e13eb5308aee7f13dd5e (diff)
downloadgcc-0645c1a22d29fcbe12ee8f774709b20b1bc3f594.zip
gcc-0645c1a22d29fcbe12ee8f774709b20b1bc3f594.tar.gz
gcc-0645c1a22d29fcbe12ee8f774709b20b1bc3f594.tar.bz2
tree-flow.h (struct omp_region): Move to omp-low.c.
* tree-flow.h (struct omp_region): Move to omp-low.c. Remove omp_ prototypes and variables. * gimple.h (omp_reduction_init): Move prototype to omp-low.h. (copy_var_decl): Relocate prototype from tree-flow.h. * gimple.c (copy_var_decl): Relocate from omp-low.c. * tree.h: Move prototype to omp-low.h. * omp-low.h: New File. Relocate prototypes here. * omp-low.c (struct omp_region): Make local here. (root_omp_region): Make static. (copy_var_decl) Move to gimple.c. (new_omp_region): Make static. (make_gimple_omp_edges): New. Refactored from tree-cfg.c make_edges. * tree-cfg.c: Include omp-low.h. (make_edges): Factor out OMP specific bits to make_gimple_omp_edges. * gimplify.c: Include omp-low.h. * tree-parloops.c: Likewise. c * c-parser.c: Include omp-low.h. * c-typeck.c: Likewise. cp * parser.c: Include omp-low.h. * semantics.c: Likewise. fortran * trans-openmp.c: Include omp-low.h. From-SVN: r203786
-rw-r--r--gcc/ChangeLog19
-rw-r--r--gcc/c/ChangeLog5
-rw-r--r--gcc/c/c-parser.c1
-rw-r--r--gcc/c/c-typeck.c1
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/parser.c1
-rw-r--r--gcc/cp/semantics.c1
-rw-r--r--gcc/fortran/ChangeLog4
-rw-r--r--gcc/fortran/trans-openmp.c1
-rw-r--r--gcc/gimple.c21
-rw-r--r--gcc/gimple.h4
-rw-r--r--gcc/gimplify.c1
-rw-r--r--gcc/omp-low.c180
-rw-r--r--gcc/omp-low.h31
-rw-r--r--gcc/tree-cfg.c97
-rw-r--r--gcc/tree-flow.h50
-rw-r--r--gcc/tree-parloops.c1
-rw-r--r--gcc/tree.h1
18 files changed, 254 insertions, 170 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fdf943d..2e1db73 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,22 @@
+2013-10-17 Andrew MacLeod <amacleod@redhat.com>
+
+ * tree-flow.h (struct omp_region): Move to omp-low.c.
+ Remove omp_ prototypes and variables.
+ * gimple.h (omp_reduction_init): Move prototype to omp-low.h.
+ (copy_var_decl): Relocate prototype from tree-flow.h.
+ * gimple.c (copy_var_decl): Relocate from omp-low.c.
+ * tree.h: Move prototype to omp-low.h.
+ * omp-low.h: New File. Relocate prototypes here.
+ * omp-low.c (struct omp_region): Make local here.
+ (root_omp_region): Make static.
+ (copy_var_decl) Move to gimple.c.
+ (new_omp_region): Make static.
+ (make_gimple_omp_edges): New. Refactored from tree-cfg.c make_edges.
+ * tree-cfg.c: Include omp-low.h.
+ (make_edges): Factor out OMP specific bits to make_gimple_omp_edges.
+ * gimplify.c: Include omp-low.h.
+ * tree-parloops.c: Likewise.
+
2013-10-17 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.c (ix86_fixup_binary_operands): When both source
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 62f3f9f..0e2409a 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,8 @@
+2013-10-17 Andrew MacLeod <amacleod@redhat.com>
+
+ * c-parser.c: Include omp-low.h.
+ * c-typeck.c: Likewise.
+
2013-10-17 Marek Polacek <polacek@redhat.com>
PR c/58267
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c
index 7545067..9b6abe0e 100644
--- a/gcc/c/c-parser.c
+++ b/gcc/c/c-parser.c
@@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. If not see
#include "target.h"
#include "cgraph.h"
#include "plugin.h"
+#include "omp-low.h"
/* Initialization routine for this file. */
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index 16e39b2..1d83137 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -38,6 +38,7 @@ along with GCC; see the file COPYING3. If not see
#include "bitmap.h"
#include "gimple.h"
#include "tree-inline.h"
+#include "omp-low.h"
#include "c-family/c-objc.h"
#include "c-family/c-common.h"
#include "c-family/c-ubsan.h"
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3ce68e8..4a5043a 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2013-10-17 Andrew MacLeod <amacleod@redhat.com>
+
+ * parser.c: Include omp-low.h.
+ * semantics.c: Likewise.
+
2013-10-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/58596
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index e33f5a2..54520b4 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -39,6 +39,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-pretty-print.h"
#include "parser.h"
#include "type-utils.h"
+#include "omp-low.h"
/* The lexer. */
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 41965b64..e56052d 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -44,6 +44,7 @@ along with GCC; see the file COPYING3. If not see
#include "gimple.h"
#include "bitmap.h"
#include "hash-table.h"
+#include "omp-low.h"
static bool verify_constant (tree, bool, bool *, bool *);
#define VERIFY_CONSTANT(X) \
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 068a11d..067d1fd 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,7 @@
+2013-10-17 Andrew MacLeod <amacleod@redhat.com>
+
+ * trans-openmp.c: Include omp-low.h.
+
2013-10-16 Tobias Burnus <burnus@net-b.de>
PR fortran/58652
diff --git a/gcc/fortran/trans-openmp.c b/gcc/fortran/trans-openmp.c
index 1c4ae62..bf28249 100644
--- a/gcc/fortran/trans-openmp.c
+++ b/gcc/fortran/trans-openmp.c
@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see
#include "trans-array.h"
#include "trans-const.h"
#include "arith.h"
+#include "omp-low.h"
int ompws_flags;
diff --git a/gcc/gimple.c b/gcc/gimple.c
index 9bc62c0..573dbb1 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -4063,3 +4063,24 @@ nonfreeing_call_p (gimple call)
return false;
}
+
+/* Create a new VAR_DECL and copy information from VAR to it. */
+
+tree
+copy_var_decl (tree var, tree name, tree type)
+{
+ tree copy = build_decl (DECL_SOURCE_LOCATION (var), VAR_DECL, name, type);
+
+ TREE_ADDRESSABLE (copy) = TREE_ADDRESSABLE (var);
+ TREE_THIS_VOLATILE (copy) = TREE_THIS_VOLATILE (var);
+ DECL_GIMPLE_REG_P (copy) = DECL_GIMPLE_REG_P (var);
+ DECL_ARTIFICIAL (copy) = DECL_ARTIFICIAL (var);
+ DECL_IGNORED_P (copy) = DECL_IGNORED_P (var);
+ DECL_CONTEXT (copy) = DECL_CONTEXT (var);
+ TREE_NO_WARNING (copy) = TREE_NO_WARNING (var);
+ TREE_USED (copy) = 1;
+ DECL_SEEN_IN_BIND_EXPR_P (copy) = 1;
+ DECL_ATTRIBUTES (copy) = DECL_ATTRIBUTES (var);
+
+ return copy;
+}
diff --git a/gcc/gimple.h b/gcc/gimple.h
index c0c19ce..ea7858e 100644
--- a/gcc/gimple.h
+++ b/gcc/gimple.h
@@ -1086,9 +1086,7 @@ extern tree canonicalize_cond_expr_cond (tree);
extern void dump_decl_set (FILE *, bitmap);
extern bool gimple_can_coalesce_p (tree, tree);
extern bool nonfreeing_call_p (gimple);
-
-/* In omp-low.c. */
-extern tree omp_reduction_init (tree, tree);
+extern tree copy_var_decl (tree, tree, tree);
/* In trans-mem.c. */
extern void diagnose_tm_safe_errors (tree);
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 9bc42e4..a67f1a3 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -42,6 +42,7 @@ along with GCC; see the file COPYING3. If not see
#include "pointer-set.h"
#include "splay-tree.h"
#include "vec.h"
+#include "omp-low.h"
#include "langhooks-def.h" /* FIXME: for lhd_set_decl_assembler_name */
#include "tree-pass.h" /* FIXME: only for PROP_gimple_any */
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index 26f0c35..208f20c 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -43,6 +43,7 @@ along with GCC; see the file COPYING3. If not see
#include "optabs.h"
#include "cfgloop.h"
#include "target.h"
+#include "omp-low.h"
/* Lowering of OpenMP parallel and workshare constructs proceeds in two
@@ -56,6 +57,45 @@ along with GCC; see the file COPYING3. If not see
scanned for parallel regions which are then moved to a new
function, to be invoked by the thread library. */
+/* Parallel region information. Every parallel and workshare
+ directive is enclosed between two markers, the OMP_* directive
+ and a corresponding OMP_RETURN statement. */
+
+struct omp_region
+{
+ /* The enclosing region. */
+ struct omp_region *outer;
+
+ /* First child region. */
+ struct omp_region *inner;
+
+ /* Next peer region. */
+ struct omp_region *next;
+
+ /* Block containing the omp directive as its last stmt. */
+ basic_block entry;
+
+ /* Block containing the OMP_RETURN as its last stmt. */
+ basic_block exit;
+
+ /* Block containing the OMP_CONTINUE as its last stmt. */
+ basic_block cont;
+
+ /* If this is a combined parallel+workshare region, this is a list
+ of additional arguments needed by the combined parallel+workshare
+ library call. */
+ vec<tree, va_gc> *ws_args;
+
+ /* The code for the omp directive of this region. */
+ enum gimple_code type;
+
+ /* Schedule kind, only used for OMP_FOR type regions. */
+ enum omp_clause_schedule_kind sched_kind;
+
+ /* True if this is a combined parallel+workshare region. */
+ bool is_combined_parallel;
+};
+
/* Context structure. Used to store information about each parallel
directive in the code. */
@@ -135,7 +175,7 @@ struct omp_for_data
static splay_tree all_contexts;
static int taskreg_nesting_level;
static int target_nesting_level;
-struct omp_region *root_omp_region;
+static struct omp_region *root_omp_region;
static bitmap task_shared_vars;
static void scan_omp (gimple_seq *, omp_context *);
@@ -872,27 +912,6 @@ use_pointer_for_field (tree decl, omp_context *shared_ctx)
return false;
}
-/* Create a new VAR_DECL and copy information from VAR to it. */
-
-tree
-copy_var_decl (tree var, tree name, tree type)
-{
- tree copy = build_decl (DECL_SOURCE_LOCATION (var), VAR_DECL, name, type);
-
- TREE_ADDRESSABLE (copy) = TREE_ADDRESSABLE (var);
- TREE_THIS_VOLATILE (copy) = TREE_THIS_VOLATILE (var);
- DECL_GIMPLE_REG_P (copy) = DECL_GIMPLE_REG_P (var);
- DECL_ARTIFICIAL (copy) = DECL_ARTIFICIAL (var);
- DECL_IGNORED_P (copy) = DECL_IGNORED_P (var);
- DECL_CONTEXT (copy) = DECL_CONTEXT (var);
- TREE_NO_WARNING (copy) = TREE_NO_WARNING (var);
- TREE_USED (copy) = 1;
- DECL_SEEN_IN_BIND_EXPR_P (copy) = 1;
- DECL_ATTRIBUTES (copy) = DECL_ATTRIBUTES (var);
-
- return copy;
-}
-
/* Construct a new automatic decl similar to VAR. */
static tree
@@ -1219,7 +1238,7 @@ debug_all_omp_regions (void)
/* Create a new parallel region starting at STMT inside region PARENT. */
-struct omp_region *
+static struct omp_region *
new_omp_region (basic_block bb, enum gimple_code type,
struct omp_region *parent)
{
@@ -10312,6 +10331,121 @@ diagnose_sb_2 (gimple_stmt_iterator *gsi_p, bool *handled_ops_p,
return NULL_TREE;
}
+/* Called from tree-cfg.c::make_edges to create cfg edges for all GIMPLE_OMP
+ codes. */
+bool
+make_gimple_omp_edges (basic_block bb, struct omp_region **region)
+{
+ gimple last = last_stmt (bb);
+ enum gimple_code code = gimple_code (last);
+ struct omp_region *cur_region = *region;
+ bool fallthru = false;
+
+ switch (code)
+ {
+ case GIMPLE_OMP_PARALLEL:
+ case GIMPLE_OMP_TASK:
+ case GIMPLE_OMP_FOR:
+ case GIMPLE_OMP_SINGLE:
+ case GIMPLE_OMP_TEAMS:
+ case GIMPLE_OMP_MASTER:
+ case GIMPLE_OMP_TASKGROUP:
+ case GIMPLE_OMP_ORDERED:
+ case GIMPLE_OMP_CRITICAL:
+ case GIMPLE_OMP_SECTION:
+ cur_region = new_omp_region (bb, code, cur_region);
+ fallthru = true;
+ break;
+
+ case GIMPLE_OMP_TARGET:
+ cur_region = new_omp_region (bb, code, cur_region);
+ fallthru = true;
+ if (gimple_omp_target_kind (last) == GF_OMP_TARGET_KIND_UPDATE)
+ cur_region = cur_region->outer;
+ break;
+
+ case GIMPLE_OMP_SECTIONS:
+ cur_region = new_omp_region (bb, code, cur_region);
+ fallthru = true;
+ break;
+
+ case GIMPLE_OMP_SECTIONS_SWITCH:
+ fallthru = false;
+ break;
+
+ case GIMPLE_OMP_ATOMIC_LOAD:
+ case GIMPLE_OMP_ATOMIC_STORE:
+ fallthru = true;
+ break;
+
+ case GIMPLE_OMP_RETURN:
+ /* In the case of a GIMPLE_OMP_SECTION, the edge will go
+ somewhere other than the next block. This will be
+ created later. */
+ cur_region->exit = bb;
+ fallthru = cur_region->type != GIMPLE_OMP_SECTION;
+ cur_region = cur_region->outer;
+ break;
+
+ case GIMPLE_OMP_CONTINUE:
+ cur_region->cont = bb;
+ switch (cur_region->type)
+ {
+ case GIMPLE_OMP_FOR:
+ /* Mark all GIMPLE_OMP_FOR and GIMPLE_OMP_CONTINUE
+ succs edges as abnormal to prevent splitting
+ them. */
+ single_succ_edge (cur_region->entry)->flags |= EDGE_ABNORMAL;
+ /* Make the loopback edge. */
+ make_edge (bb, single_succ (cur_region->entry),
+ EDGE_ABNORMAL);
+
+ /* Create an edge from GIMPLE_OMP_FOR to exit, which
+ corresponds to the case that the body of the loop
+ is not executed at all. */
+ make_edge (cur_region->entry, bb->next_bb, EDGE_ABNORMAL);
+ make_edge (bb, bb->next_bb, EDGE_FALLTHRU | EDGE_ABNORMAL);
+ fallthru = false;
+ break;
+
+ case GIMPLE_OMP_SECTIONS:
+ /* Wire up the edges into and out of the nested sections. */
+ {
+ basic_block switch_bb = single_succ (cur_region->entry);
+
+ struct omp_region *i;
+ for (i = cur_region->inner; i ; i = i->next)
+ {
+ gcc_assert (i->type == GIMPLE_OMP_SECTION);
+ make_edge (switch_bb, i->entry, 0);
+ make_edge (i->exit, bb, EDGE_FALLTHRU);
+ }
+
+ /* Make the loopback edge to the block with
+ GIMPLE_OMP_SECTIONS_SWITCH. */
+ make_edge (bb, switch_bb, 0);
+
+ /* Make the edge from the switch to exit. */
+ make_edge (switch_bb, bb->next_bb, 0);
+ fallthru = false;
+ }
+ break;
+
+ default:
+ gcc_unreachable ();
+ }
+ break;
+
+ default:
+ gcc_unreachable ();
+ }
+
+ if (*region != cur_region)
+ *region = cur_region;
+
+ return fallthru;
+}
+
static unsigned int
diagnose_omp_structured_block_errors (void)
{
diff --git a/gcc/omp-low.h b/gcc/omp-low.h
new file mode 100644
index 0000000..6b5a2ff
--- /dev/null
+++ b/gcc/omp-low.h
@@ -0,0 +1,31 @@
+/* Header file for openMP lowering directives.
+ Copyright (C) 2013 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef GCC_OMP_LOW_H
+#define GCC_OMP_LOW_H
+
+struct omp_region;
+
+extern tree find_omp_clause (tree, enum omp_clause_code);
+extern void omp_expand_local (basic_block);
+extern void free_omp_regions (void);
+extern tree omp_reduction_init (tree, tree);
+extern bool make_gimple_omp_edges (basic_block, struct omp_region **);
+
+#endif /* GCC_OMP_LOW_H */
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 8b66791..9268615 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -42,6 +42,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-inline.h"
#include "target.h"
#include "tree-ssa-live.h"
+#include "omp-low.h"
/* This file contains functions for building the Control Flow Graph (CFG)
for a function tree. */
@@ -607,97 +608,8 @@ make_edges (void)
fallthru = true;
break;
- case GIMPLE_OMP_PARALLEL:
- case GIMPLE_OMP_TASK:
- case GIMPLE_OMP_FOR:
- case GIMPLE_OMP_SINGLE:
- case GIMPLE_OMP_TEAMS:
- case GIMPLE_OMP_MASTER:
- case GIMPLE_OMP_TASKGROUP:
- case GIMPLE_OMP_ORDERED:
- case GIMPLE_OMP_CRITICAL:
- case GIMPLE_OMP_SECTION:
- cur_region = new_omp_region (bb, code, cur_region);
- fallthru = true;
- break;
-
- case GIMPLE_OMP_TARGET:
- cur_region = new_omp_region (bb, code, cur_region);
- fallthru = true;
- if (gimple_omp_target_kind (last) == GF_OMP_TARGET_KIND_UPDATE)
- cur_region = cur_region->outer;
- break;
-
- case GIMPLE_OMP_SECTIONS:
- cur_region = new_omp_region (bb, code, cur_region);
- fallthru = true;
- break;
-
- case GIMPLE_OMP_SECTIONS_SWITCH:
- fallthru = false;
- break;
-
- case GIMPLE_OMP_ATOMIC_LOAD:
- case GIMPLE_OMP_ATOMIC_STORE:
- fallthru = true;
- break;
-
- case GIMPLE_OMP_RETURN:
- /* In the case of a GIMPLE_OMP_SECTION, the edge will go
- somewhere other than the next block. This will be
- created later. */
- cur_region->exit = bb;
- fallthru = cur_region->type != GIMPLE_OMP_SECTION;
- cur_region = cur_region->outer;
- break;
-
- case GIMPLE_OMP_CONTINUE:
- cur_region->cont = bb;
- switch (cur_region->type)
- {
- case GIMPLE_OMP_FOR:
- /* Mark all GIMPLE_OMP_FOR and GIMPLE_OMP_CONTINUE
- succs edges as abnormal to prevent splitting
- them. */
- single_succ_edge (cur_region->entry)->flags |= EDGE_ABNORMAL;
- /* Make the loopback edge. */
- make_edge (bb, single_succ (cur_region->entry),
- EDGE_ABNORMAL);
-
- /* Create an edge from GIMPLE_OMP_FOR to exit, which
- corresponds to the case that the body of the loop
- is not executed at all. */
- make_edge (cur_region->entry, bb->next_bb, EDGE_ABNORMAL);
- make_edge (bb, bb->next_bb, EDGE_FALLTHRU | EDGE_ABNORMAL);
- fallthru = false;
- break;
-
- case GIMPLE_OMP_SECTIONS:
- /* Wire up the edges into and out of the nested sections. */
- {
- basic_block switch_bb = single_succ (cur_region->entry);
-
- struct omp_region *i;
- for (i = cur_region->inner; i ; i = i->next)
- {
- gcc_assert (i->type == GIMPLE_OMP_SECTION);
- make_edge (switch_bb, i->entry, 0);
- make_edge (i->exit, bb, EDGE_FALLTHRU);
- }
-
- /* Make the loopback edge to the block with
- GIMPLE_OMP_SECTIONS_SWITCH. */
- make_edge (bb, switch_bb, 0);
-
- /* Make the edge from the switch to exit. */
- make_edge (switch_bb, bb->next_bb, 0);
- fallthru = false;
- }
- break;
-
- default:
- gcc_unreachable ();
- }
+ CASE_GIMPLE_OMP:
+ fallthru = make_gimple_omp_edges (bb, &cur_region);
break;
case GIMPLE_TRANSACTION:
@@ -721,8 +633,7 @@ make_edges (void)
make_edge (bb, bb->next_bb, EDGE_FALLTHRU);
}
- if (root_omp_region)
- free_omp_regions ();
+ free_omp_regions ();
/* Fold COND_EXPR_COND of each COND_EXPR. */
fold_cond_expr_cond ();
diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h
index 5ea5d06..d849c29 100644
--- a/gcc/tree-flow.h
+++ b/gcc/tree-flow.h
@@ -37,56 +37,6 @@ along with GCC; see the file COPYING3. If not see
#include "tree-into-ssa.h"
#include "tree-ssa-loop.h"
-/*---------------------------------------------------------------------------
- OpenMP Region Tree
----------------------------------------------------------------------------*/
-
-/* Parallel region information. Every parallel and workshare
- directive is enclosed between two markers, the OMP_* directive
- and a corresponding OMP_RETURN statement. */
-
-struct omp_region
-{
- /* The enclosing region. */
- struct omp_region *outer;
-
- /* First child region. */
- struct omp_region *inner;
-
- /* Next peer region. */
- struct omp_region *next;
-
- /* Block containing the omp directive as its last stmt. */
- basic_block entry;
-
- /* Block containing the OMP_RETURN as its last stmt. */
- basic_block exit;
-
- /* Block containing the OMP_CONTINUE as its last stmt. */
- basic_block cont;
-
- /* If this is a combined parallel+workshare region, this is a list
- of additional arguments needed by the combined parallel+workshare
- library call. */
- vec<tree, va_gc> *ws_args;
-
- /* The code for the omp directive of this region. */
- enum gimple_code type;
-
- /* Schedule kind, only used for OMP_FOR type regions. */
- enum omp_clause_schedule_kind sched_kind;
-
- /* True if this is a combined parallel+workshare region. */
- bool is_combined_parallel;
-};
-
-extern struct omp_region *root_omp_region;
-extern struct omp_region *new_omp_region (basic_block, enum gimple_code,
- struct omp_region *);
-extern void free_omp_regions (void);
-void omp_expand_local (basic_block);
-tree copy_var_decl (tree, tree, tree);
-
/* Location to track pending stmt for edge insertion. */
#define PENDING_STMT(e) ((e)->insns.g)
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index 056950d..cdef5c6 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-vectorizer.h"
#include "tree-hasher.h"
#include "tree-parloops.h"
+#include "omp-low.h"
/* This pass tries to distribute iterations of loops into several threads.
The implementation is straightforward -- for each loop we test whether its
diff --git a/gcc/tree.h b/gcc/tree.h
index 2b6e762..2f4514d 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -3553,7 +3553,6 @@ extern tree build_translation_unit_decl (tree);
extern tree build_block (tree, tree, tree, tree);
extern tree build_empty_stmt (location_t);
extern tree build_omp_clause (location_t, enum omp_clause_code);
-extern tree find_omp_clause (tree, enum omp_clause_code);
extern tree build_vl_exp_stat (enum tree_code, int MEM_STAT_DECL);
#define build_vl_exp(c, n) build_vl_exp_stat (c, n MEM_STAT_INFO)