aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/doc/invoke.texi4
-rw-r--r--gcc/params.def12
-rw-r--r--gcc/tree-parloops.c26
4 files changed, 49 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 83e4bfa..d71bcd2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,13 @@
2015-10-13 Tom de Vries <tom@codesourcery.com>
+ PR tree-optimization/67476
+ * doc/invoke.texi (@item parloops-schedule): New item.
+ * params.def (PARAM_PARLOOPS_SCHEDULE): New DEFPARAMENUM5.
+ * tree-parloops.c: Include params-enum.h.
+ (create_parallel_loop): Handle PARAM_PARLOOPS_SCHEDULE.
+
+2015-10-13 Tom de Vries <tom@codesourcery.com>
+
* Makefile.in (PARAMS_H, PLUGIN_HEADERS): Add params-enum.h.
* params-enum.h: New file.
* opts.c (handle_param): Handle case that param arg is a string.
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 9e028fc..54e9f12 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -11133,6 +11133,10 @@ automaton. The default is 50.
Chunk size of omp schedule for loops parallelized by parloops. The default
is 0.
+@item parloops-schedule
+Schedule type of omp schedule for loops parallelized by parloops (static,
+dynamic, guided, auto, runtime). The default is static.
+
@item max-ssa-name-query-depth
Maximum depth of recursion when querying properties of SSA names in things
like fold routines. One level of recursion corresponds to following a
diff --git a/gcc/params.def b/gcc/params.def
index 8b8b9fe..dd07301 100644
--- a/gcc/params.def
+++ b/gcc/params.def
@@ -35,6 +35,11 @@ along with GCC; see the file COPYING3. If not see
- The maximum acceptable value for the parameter (if greater than
the minimum).
+ The DEFPARAMENUM<N> macro is similar, but instead of the minumum and maximum
+ arguments, it contains a list of <N> allowed strings, corresponding to
+ integer values 0..<N>-1. Note that the default argument needs to be
+ specified as one of the allowed strings, rather than an integer value.
+
Be sure to add an entry to invoke.texi summarizing the parameter. */
/* When branch is predicted to be taken with probability lower than this
@@ -1153,6 +1158,13 @@ DEFPARAM (PARAM_PARLOOPS_CHUNK_SIZE,
"Chunk size of omp schedule for loops parallelized by parloops",
0, 0, 0)
+DEFPARAMENUM5 (PARAM_PARLOOPS_SCHEDULE,
+ "parloops-schedule",
+ "Schedule type of omp schedule for loops parallelized by "
+ "parloops (static, dynamic, guided, auto, runtime)",
+ static,
+ static, dynamic, guided, auto, runtime)
+
DEFPARAM (PARAM_MAX_SSA_NAME_QUERY_DEPTH,
"max-ssa-name-query-depth",
"Maximum recursion depth allowed when querying a property of an"
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index 741392b..62e561c 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -58,6 +58,7 @@ along with GCC; see the file COPYING3. If not see
#include "cgraph.h"
#include "tree-ssa.h"
#include "params.h"
+#include "params-enum.h"
/* This pass tries to distribute iterations of loops into several threads.
The implementation is straightforward -- for each loop we test whether its
@@ -2086,8 +2087,31 @@ create_parallel_loop (struct loop *loop, tree loop_fn, tree data,
gimple_cond_set_lhs (cond_stmt, cvar_base);
type = TREE_TYPE (cvar);
t = build_omp_clause (loc, OMP_CLAUSE_SCHEDULE);
- OMP_CLAUSE_SCHEDULE_KIND (t) = OMP_CLAUSE_SCHEDULE_STATIC;
int chunk_size = PARAM_VALUE (PARAM_PARLOOPS_CHUNK_SIZE);
+ enum PARAM_PARLOOPS_SCHEDULE_KIND schedule_type \
+ = (enum PARAM_PARLOOPS_SCHEDULE_KIND) PARAM_VALUE (PARAM_PARLOOPS_SCHEDULE);
+ switch (schedule_type)
+ {
+ case PARAM_PARLOOPS_SCHEDULE_KIND_static:
+ OMP_CLAUSE_SCHEDULE_KIND (t) = OMP_CLAUSE_SCHEDULE_STATIC;
+ break;
+ case PARAM_PARLOOPS_SCHEDULE_KIND_dynamic:
+ OMP_CLAUSE_SCHEDULE_KIND (t) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
+ break;
+ case PARAM_PARLOOPS_SCHEDULE_KIND_guided:
+ OMP_CLAUSE_SCHEDULE_KIND (t) = OMP_CLAUSE_SCHEDULE_GUIDED;
+ break;
+ case PARAM_PARLOOPS_SCHEDULE_KIND_auto:
+ OMP_CLAUSE_SCHEDULE_KIND (t) = OMP_CLAUSE_SCHEDULE_AUTO;
+ chunk_size = 0;
+ break;
+ case PARAM_PARLOOPS_SCHEDULE_KIND_runtime:
+ OMP_CLAUSE_SCHEDULE_KIND (t) = OMP_CLAUSE_SCHEDULE_RUNTIME;
+ chunk_size = 0;
+ break;
+ default:
+ gcc_unreachable ();
+ }
if (chunk_size != 0)
OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (t)
= build_int_cst (integer_type_node, chunk_size);