+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.
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
- 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
"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"
#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
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);
+2015-10-13 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/67476
+ * testsuite/libgomp.c/autopar-3.c: New test.
+ * testsuite/libgomp.c/autopar-4.c: New test.
+ * testsuite/libgomp.c/autopar-5.c: New test.
+ * testsuite/libgomp.c/autopar-6.c: New test.
+ * testsuite/libgomp.c/autopar-7.c: New test.
+ * testsuite/libgomp.c/autopar-8.c: New test.
+
2015-10-12 James Norris <jnorris@codesourcery.com>
* testsuite/libgomp.oacc-c-c++-common/vector-loop.c: Fix loop
--- /dev/null
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-parallelize-loops=4 -ffast-math --param parloops-schedule=dynamic" } */
+
+#include "autopar-1.c"
--- /dev/null
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-parallelize-loops=4 -ffast-math --param parloops-schedule=dynamic --param parloops-chunk-size=100" } */
+
+#include "autopar-1.c"
--- /dev/null
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-parallelize-loops=4 -ffast-math --param parloops-schedule=guided" } */
+
+#include "autopar-1.c"
--- /dev/null
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-parallelize-loops=4 -ffast-math --param parloops-schedule=guided --param parloops-chunk-size=100" } */
+
+#include "autopar-1.c"
--- /dev/null
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-parallelize-loops=4 -ffast-math --param parloops-schedule=auto" } */
+
+#include "autopar-1.c"
--- /dev/null
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-parallelize-loops=4 -ffast-math --param parloops-schedule=runtime" } */
+
+#include "autopar-1.c"