aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSebastian Pop <spop@gcc.gnu.org>2008-05-20 19:17:12 +0000
committerSebastian Pop <spop@gcc.gnu.org>2008-05-20 19:17:12 +0000
commit9857228c4ca42e03fb12177065a14b5dadaf7e00 (patch)
treecf4a0fe3e80a3306003282e6187090dd233f10c8 /gcc
parent9f275479a9813d4165e9e6766e4f7c6eec1b9792 (diff)
downloadgcc-9857228c4ca42e03fb12177065a14b5dadaf7e00.zip
gcc-9857228c4ca42e03fb12177065a14b5dadaf7e00.tar.gz
gcc-9857228c4ca42e03fb12177065a14b5dadaf7e00.tar.bz2
re PR tree-optimization/36181 (Simple for loop generates ICE with -ftree-parallelize-loops=2)
2008-05-20 Sebastian Pop <sebastian.pop@amd.com> Jan Sjodin <jan.sjodin@amd.com> PR tree-optimization/36181 * tree-parloops.c (loop_has_vector_phi_nodes): New. (parallelize_loops): Don't parallelize when the loop has vector phi nodes. * gcc.dg/tree-ssa/pr36181.c: New. From-SVN: r135673
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr36181.c13
-rw-r--r--gcc/tree-parloops.c23
4 files changed, 50 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ba15ab5..65cb134 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2008-05-20 Sebastian Pop <sebastian.pop@amd.com>
+ Jan Sjodin <jan.sjodin@amd.com>
+
+ PR tree-optimization/36181
+ * tree-parloops.c (loop_has_vector_phi_nodes): New.
+ (parallelize_loops): Don't parallelize when the loop has vector
+ phi nodes.
+
2008-05-20 Jan Sjodin <jan.sjodin@amd.com>
Sebastian Pop <sebastian.pop@amd.com>
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fae9687..0ff1a09 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2008-05-20 Jan Sjodin <jan.sjodin@amd.com>
+ Sebastian Pop <sebastian.pop@amd.com>
+
+ PR tree-optimization/36181
+ * gcc.dg/tree-ssa/pr36181.c: New.
+
2008-05-20 Uros Bizjak <ubizjak@gmail.com>
PR testsuite/36057
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr36181.c b/gcc/testsuite/gcc.dg/tree-ssa/pr36181.c
new file mode 100644
index 0000000..6eda0a4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr36181.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -ftree-parallelize-loops=2" } */
+
+int foo ()
+{
+ int i, sum = 0, data[1024];
+
+ for(i = 0; i<1024; i++)
+ sum += data[i];
+
+ return sum;
+}
+
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index de4f306..109e305 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -1797,6 +1797,27 @@ gen_parallel_loop (struct loop *loop, htab_t reduction_list,
omp_expand_local (parallel_head);
}
+/* Returns true when LOOP contains vector phi nodes. */
+
+static bool
+loop_has_vector_phi_nodes (struct loop *loop)
+{
+ unsigned i;
+ basic_block *bbs = get_loop_body_in_dom_order (loop);
+ bool res = true;
+ tree phi;
+
+ for (i = 0; i < loop->num_nodes; i++)
+ for (phi = phi_nodes (bbs[i]); phi; phi = PHI_CHAIN (phi))
+ if (TREE_CODE (TREE_TYPE (PHI_RESULT (phi))) == VECTOR_TYPE)
+ goto end;
+
+ res = false;
+ end:
+ free (bbs);
+ return res;
+}
+
/* Detect parallel loops and generate parallel code using libgomp
primitives. Returns true if some loop was parallelized, false
otherwise. */
@@ -1828,6 +1849,8 @@ parallelize_loops (void)
/* And of course, the loop must be parallelizable. */
|| !can_duplicate_loop_p (loop)
|| loop_has_blocks_with_irreducible_flag (loop)
+ /* FIXME: the check for vector phi nodes could be removed. */
+ || loop_has_vector_phi_nodes (loop)
|| !loop_parallel_p (loop, reduction_list, &niter_desc))
continue;