aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/builtin-types.def1
-rw-r--r--gcc/fortran/types.def1
-rw-r--r--gcc/omp-selectors.h1
-rw-r--r--gcc/tree-core.h7
-rw-r--r--gcc/tree-pretty-print.cc21
-rw-r--r--gcc/tree.cc4
-rw-r--r--gcc/tree.def5
-rw-r--r--gcc/tree.h7
8 files changed, 47 insertions, 0 deletions
diff --git a/gcc/builtin-types.def b/gcc/builtin-types.def
index 66ce164..12f49e0 100644
--- a/gcc/builtin-types.def
+++ b/gcc/builtin-types.def
@@ -684,6 +684,7 @@ DEF_FUNCTION_TYPE_2 (BT_FN_INT_FEXCEPT_T_PTR_INT, BT_INT, BT_FEXCEPT_T_PTR,
DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_FEXCEPT_T_PTR_INT, BT_INT,
BT_CONST_FEXCEPT_T_PTR, BT_INT)
DEF_FUNCTION_TYPE_2 (BT_FN_PTR_CONST_PTR_UINT8, BT_PTR, BT_CONST_PTR, BT_UINT8)
+DEF_FUNCTION_TYPE_2 (BT_FN_PTR_CONST_PTR_INT, BT_PTR, BT_CONST_PTR, BT_INT)
DEF_POINTER_TYPE (BT_PTR_FN_VOID_PTR_PTR, BT_FN_VOID_PTR_PTR)
diff --git a/gcc/fortran/types.def b/gcc/fortran/types.def
index a69e252..467393c 100644
--- a/gcc/fortran/types.def
+++ b/gcc/fortran/types.def
@@ -119,6 +119,7 @@ DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_INT_BOOL, BT_BOOL, BT_INT, BT_BOOL)
DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_PTRMODE,
BT_VOID, BT_PTR, BT_PTRMODE)
DEF_FUNCTION_TYPE_2 (BT_FN_VOID_CONST_PTR_SIZE, BT_VOID, BT_CONST_PTR, BT_SIZE)
+DEF_FUNCTION_TYPE_2 (BT_FN_PTR_CONST_PTR_INT, BT_PTR, BT_CONST_PTR, BT_INT)
DEF_POINTER_TYPE (BT_PTR_FN_VOID_PTR_PTR, BT_FN_VOID_PTR_PTR)
diff --git a/gcc/omp-selectors.h b/gcc/omp-selectors.h
index 730021e..447c3b8 100644
--- a/gcc/omp-selectors.h
+++ b/gcc/omp-selectors.h
@@ -56,6 +56,7 @@ enum omp_ts_code {
OMP_TRAIT_CONSTRUCT_PARALLEL,
OMP_TRAIT_CONSTRUCT_FOR,
OMP_TRAIT_CONSTRUCT_SIMD,
+ OMP_TRAIT_CONSTRUCT_DISPATCH,
OMP_TRAIT_LAST,
OMP_TRAIT_INVALID = -1
};
diff --git a/gcc/tree-core.h b/gcc/tree-core.h
index dd61ba3..c7229bd 100644
--- a/gcc/tree-core.h
+++ b/gcc/tree-core.h
@@ -564,6 +564,13 @@ enum omp_clause_code {
/* OpenACC clause: nohost. */
OMP_CLAUSE_NOHOST,
+
+ /* OpenMP clause: novariants (scalar-expression). */
+ OMP_CLAUSE_NOVARIANTS,
+
+ /* OpenMP clause: nocontext (scalar-expression). */
+ OMP_CLAUSE_NOCONTEXT,
+
};
#undef DEFTREESTRUCT
diff --git a/gcc/tree-pretty-print.cc b/gcc/tree-pretty-print.cc
index eab5c60..5e35530 100644
--- a/gcc/tree-pretty-print.cc
+++ b/gcc/tree-pretty-print.cc
@@ -507,6 +507,22 @@ dump_omp_clause (pretty_printer *pp, tree clause, int spc, dump_flags_t flags)
case OMP_CLAUSE_EXCLUSIVE:
name = "exclusive";
goto print_remap;
+ case OMP_CLAUSE_NOVARIANTS:
+ pp_string (pp, "novariants");
+ pp_left_paren (pp);
+ gcc_assert (OMP_CLAUSE_NOVARIANTS_EXPR (clause));
+ dump_generic_node (pp, OMP_CLAUSE_NOVARIANTS_EXPR (clause), spc, flags,
+ false);
+ pp_right_paren (pp);
+ break;
+ case OMP_CLAUSE_NOCONTEXT:
+ pp_string (pp, "nocontext");
+ pp_left_paren (pp);
+ gcc_assert (OMP_CLAUSE_NOCONTEXT_EXPR (clause));
+ dump_generic_node (pp, OMP_CLAUSE_NOCONTEXT_EXPR (clause), spc, flags,
+ false);
+ pp_right_paren (pp);
+ break;
case OMP_CLAUSE__LOOPTEMP_:
name = "_looptemp_";
goto print_remap;
@@ -3970,6 +3986,11 @@ dump_generic_node (pretty_printer *pp, tree node, int spc, dump_flags_t flags,
dump_omp_clauses (pp, OMP_SECTIONS_CLAUSES (node), spc, flags);
goto dump_omp_body;
+ case OMP_DISPATCH:
+ pp_string (pp, "#pragma omp dispatch");
+ dump_omp_clauses (pp, OMP_DISPATCH_CLAUSES (node), spc, flags);
+ goto dump_omp_body;
+
case OMP_SECTION:
pp_string (pp, "#pragma omp section");
goto dump_omp_body;
diff --git a/gcc/tree.cc b/gcc/tree.cc
index 7fd8abb..1da06c7 100644
--- a/gcc/tree.cc
+++ b/gcc/tree.cc
@@ -332,6 +332,8 @@ unsigned const char omp_clause_num_ops[] =
0, /* OMP_CLAUSE_IF_PRESENT */
0, /* OMP_CLAUSE_FINALIZE */
0, /* OMP_CLAUSE_NOHOST */
+ 1, /* OMP_CLAUSE_NOVARIANTS */
+ 1, /* OMP_CLAUSE_NOCONTEXT */
};
const char * const omp_clause_code_name[] =
@@ -428,6 +430,8 @@ const char * const omp_clause_code_name[] =
"if_present",
"finalize",
"nohost",
+ "novariants",
+ "nocontext",
};
/* Unless specific to OpenACC, we tend to internally maintain OpenMP-centric
diff --git a/gcc/tree.def b/gcc/tree.def
index dd60d1e..eba6a08 100644
--- a/gcc/tree.def
+++ b/gcc/tree.def
@@ -1306,6 +1306,11 @@ DEFTREECODE (OMP_MASKED, "omp_masked", tcc_statement, 2)
Operand 1: OMP_SCAN_CLAUSES: List of clauses. */
DEFTREECODE (OMP_SCAN, "omp_scan", tcc_statement, 2)
+/* OpenMP - #pragma omp dispatch [clause1 ... clauseN]
+ Operand 0: OMP_DISPATCH_BODY: Expression statement including a target call.
+ Operand 1: OMP_DISPATCH_CLAUSES: List of clauses. */
+DEFTREECODE (OMP_DISPATCH, "omp_dispatch", tcc_statement, 2)
+
/* OpenMP - #pragma omp section
Operand 0: OMP_SECTION_BODY: Section body. */
DEFTREECODE (OMP_SECTION, "omp_section", tcc_statement, 1)
diff --git a/gcc/tree.h b/gcc/tree.h
index 56c0454..6f58618 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -1612,6 +1612,9 @@ class auto_suppress_location_wrappers
#define OMP_SCAN_BODY(NODE) TREE_OPERAND (OMP_SCAN_CHECK (NODE), 0)
#define OMP_SCAN_CLAUSES(NODE) TREE_OPERAND (OMP_SCAN_CHECK (NODE), 1)
+#define OMP_DISPATCH_BODY(NODE) TREE_OPERAND (OMP_DISPATCH_CHECK (NODE), 0)
+#define OMP_DISPATCH_CLAUSES(NODE) TREE_OPERAND (OMP_DISPATCH_CHECK (NODE), 1)
+
#define OMP_CLAUSE_SIZE(NODE) \
OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (OMP_CLAUSE_CHECK (NODE), \
OMP_CLAUSE_FROM, \
@@ -1759,6 +1762,10 @@ class auto_suppress_location_wrappers
OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PARTIAL), 0)
#define OMP_CLAUSE_SIZES_LIST(NODE) \
OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SIZES), 0)
+#define OMP_CLAUSE_NOVARIANTS_EXPR(NODE) \
+ OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NOVARIANTS), 0)
+#define OMP_CLAUSE_NOCONTEXT_EXPR(NODE) \
+ OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NOCONTEXT), 0)
#define OMP_CLAUSE_GRAINSIZE_EXPR(NODE) \
OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_GRAINSIZE),0)