Add param parloops-schedule
authorTom de Vries <tom@codesourcery.com>
Tue, 13 Oct 2015 10:08:59 +0000 (10:08 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Tue, 13 Oct 2015 10:08:59 +0000 (10:08 +0000)
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.

* 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.

From-SVN: r228756

gcc/ChangeLog
gcc/doc/invoke.texi
gcc/params.def
gcc/tree-parloops.c
libgomp/ChangeLog
libgomp/testsuite/libgomp.c/autopar-3.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/autopar-4.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/autopar-5.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/autopar-6.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/autopar-7.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/autopar-8.c [new file with mode: 0644]

index 83e4bfadfd4eae4ab69b36af39f47d4c4c8bbc74..d71bcd28bc914575715090ffffdb3fb4d285d8be 100644 (file)
@@ -1,3 +1,11 @@
+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.
index 9e028fc14624946ef6745669142ac3036b1937f8..54e9f12863416816f0267fae1ec3f3903aedc559 100644 (file)
@@ -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
index 8b8b9fe3ff76eab22a8de0e8c08052c065bde5a3..dd073019d691d81e935aaf866e5a971e5abda8db 100644 (file)
@@ -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"
index 741392bf937c74694112fd71972c414f14f1ebfb..62e561c5b4ffff35e9bfc667cd23f90300da5f33 100644 (file)
@@ -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);
index aa03f82d2ee161fa3fee2c2ef29f14eefc21cb60..74a135cd55bf8da0fda6207f7fb4f36b8e68be60 100644 (file)
@@ -1,3 +1,13 @@
+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
diff --git a/libgomp/testsuite/libgomp.c/autopar-3.c b/libgomp/testsuite/libgomp.c/autopar-3.c
new file mode 100644 (file)
index 0000000..1c25a44
--- /dev/null
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-parallelize-loops=4 -ffast-math --param parloops-schedule=dynamic" } */
+
+#include "autopar-1.c"
diff --git a/libgomp/testsuite/libgomp.c/autopar-4.c b/libgomp/testsuite/libgomp.c/autopar-4.c
new file mode 100644 (file)
index 0000000..78c77d9
--- /dev/null
@@ -0,0 +1,4 @@
+/* { 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"
diff --git a/libgomp/testsuite/libgomp.c/autopar-5.c b/libgomp/testsuite/libgomp.c/autopar-5.c
new file mode 100644 (file)
index 0000000..f0acb20
--- /dev/null
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-parallelize-loops=4 -ffast-math --param parloops-schedule=guided" } */
+
+#include "autopar-1.c"
diff --git a/libgomp/testsuite/libgomp.c/autopar-6.c b/libgomp/testsuite/libgomp.c/autopar-6.c
new file mode 100644 (file)
index 0000000..f6e723e
--- /dev/null
@@ -0,0 +1,4 @@
+/* { 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"
diff --git a/libgomp/testsuite/libgomp.c/autopar-7.c b/libgomp/testsuite/libgomp.c/autopar-7.c
new file mode 100644 (file)
index 0000000..5f15508
--- /dev/null
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-parallelize-loops=4 -ffast-math --param parloops-schedule=auto" } */
+
+#include "autopar-1.c"
diff --git a/libgomp/testsuite/libgomp.c/autopar-8.c b/libgomp/testsuite/libgomp.c/autopar-8.c
new file mode 100644 (file)
index 0000000..6099e9f
--- /dev/null
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-parallelize-loops=4 -ffast-math --param parloops-schedule=runtime" } */
+
+#include "autopar-1.c"