diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 4 | ||||
-rw-r--r-- | gcc/params.def | 12 | ||||
-rw-r--r-- | gcc/tree-parloops.c | 26 |
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); |