aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-02-01 08:02:50 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-02-01 08:02:50 +0000
commit405a740640530a3c93ef68089cb185083e4df890 (patch)
treee5cc46cf37a94684492138f56035edd905c55361
parent315405b66954a298c39503347f1997ca2e0647f4 (diff)
downloadgcc-405a740640530a3c93ef68089cb185083e4df890.zip
gcc-405a740640530a3c93ef68089cb185083e4df890.tar.gz
gcc-405a740640530a3c93ef68089cb185083e4df890.tar.bz2
re PR tree-optimization/71824 (ICE when compiling libiberty with Graphite loop optimizations)
2017-02-01 Richard Biener <rguenther@suse.de> PR tree-optimization/71824 * graphite-scop-detection.c (scop_detection::build_scop_breadth): Verify the loops are valid in the merged SESE region. (scop_detection::can_represent_loop_1): Check analyzing the evolution of the number of iterations in the region succeeds. * gcc.dg/graphite/pr71824.c: New testcase. From-SVN: r245081
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/graphite-scop-detection.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr71824.c17
4 files changed, 35 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 02f635e..1b62c0b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2017-02-01 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/71824
+ * graphite-scop-detection.c (scop_detection::build_scop_breadth):
+ Verify the loops are valid in the merged SESE region.
+ (scop_detection::can_represent_loop_1): Check analyzing the
+ evolution of the number of iterations in the region succeeds.
+
2017-01-31 Ian Lance Taylor <iant@golang.org>
* config/i386/i386.c (ix86_expand_split_stack_prologue): Add
diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c
index 3860693..2f96412 100644
--- a/gcc/graphite-scop-detection.c
+++ b/gcc/graphite-scop-detection.c
@@ -905,7 +905,9 @@ scop_detection::build_scop_breadth (sese_l s1, loop_p loop)
sese_l combined = merge_sese (s1, s2);
- if (combined)
+ if (combined
+ && loop_is_valid_in_scop (loop, combined)
+ && loop_is_valid_in_scop (loop->next, combined))
s1 = combined;
else
add_scop (s2);
@@ -931,6 +933,8 @@ scop_detection::can_represent_loop_1 (loop_p loop, sese_l scop)
&& niter_desc.control.no_overflow
&& (niter = number_of_latch_executions (loop))
&& !chrec_contains_undetermined (niter)
+ && !chrec_contains_undetermined (scalar_evolution_in_region (scop,
+ loop, niter))
&& graphite_can_represent_expr (scop, loop, niter);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c313baa..dbbd485 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-02-01 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/71824
+ * gcc.dg/graphite/pr71824.c: New testcase.
+
2017-01-31 Jakub Jelinek <jakub@redhat.com>
PR c++/79304
diff --git a/gcc/testsuite/gcc.dg/graphite/pr71824.c b/gcc/testsuite/gcc.dg/graphite/pr71824.c
new file mode 100644
index 0000000..2a90e30
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr71824.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-nest-optimize" } */
+
+int a, b, d;
+int **c;
+int fn1() {
+ while (a)
+ if (d) {
+ int e = -d;
+ for (; b < e; b++)
+ c[b] = &a;
+ } else {
+ for (; b; b++)
+ c[b] = &b;
+ d = 0;
+ }
+}