aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-12-05 15:10:23 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-12-05 15:10:23 +0000
commit9824a520b2b293f3e2f0e954e8b358317b553356 (patch)
tree82c8fde25fe4149fde2e49bd77f2454cc65b6f53
parent6acc594827256e256815741aef5102ca6838fa5b (diff)
downloadgcc-9824a520b2b293f3e2f0e954e8b358317b553356.zip
gcc-9824a520b2b293f3e2f0e954e8b358317b553356.tar.gz
gcc-9824a520b2b293f3e2f0e954e8b358317b553356.tar.bz2
re PR tree-optimization/83277 ([graphite] Wrong code w/ -O2 -floop-nest-optimize)
2017-12-05 Richard Biener <rguenther@suse.de> PR tree-optimization/83277 * graphite-isl-ast-to-gimple.c (should_copy_to_new_region): Make sure to code-gen liveout vars. * gcc.dg/graphite/pr83277.c: New testcase. From-SVN: r255424
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/graphite-isl-ast-to-gimple.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr83277.c52
4 files changed, 67 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 87d2b12..cfda6b3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-12-05 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/83277
+ * graphite-isl-ast-to-gimple.c (should_copy_to_new_region): Make sure
+ to code-gen liveout vars.
+
2017-12-05 Richard Sandiford <richard.sandiford@linaro.org>
* config/aarch64/aarch64-simd.md (aarch64_simd_bsldi_internal)
diff --git a/gcc/graphite-isl-ast-to-gimple.c b/gcc/graphite-isl-ast-to-gimple.c
index c565cf0..ab7f0e7 100644
--- a/gcc/graphite-isl-ast-to-gimple.c
+++ b/gcc/graphite-isl-ast-to-gimple.c
@@ -1137,8 +1137,10 @@ should_copy_to_new_region (gimple *stmt, sese_info_p region)
if (is_gimple_assign (stmt)
&& (lhs = gimple_assign_lhs (stmt))
&& TREE_CODE (lhs) == SSA_NAME
- && is_gimple_reg (lhs)
- && scev_analyzable_p (lhs, region->region))
+ && scev_analyzable_p (lhs, region->region)
+ /* But to code-generate liveouts - liveout PHI generation is
+ in generic sese.c code that cannot do code generation. */
+ && ! bitmap_bit_p (region->liveout, SSA_NAME_VERSION (lhs)))
return false;
return true;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6a9ce85..b4f02a7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-12-05 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/83277
+ * gcc.dg/graphite/pr83277.c: New testcase.
+
2017-12-05 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/83283
diff --git a/gcc/testsuite/gcc.dg/graphite/pr83277.c b/gcc/testsuite/gcc.dg/graphite/pr83277.c
new file mode 100644
index 0000000..aef4fee
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr83277.c
@@ -0,0 +1,52 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -floop-nest-optimize" } */
+
+int rk, si = 0;
+int jr[2];
+
+int
+wv (signed char n8)
+{
+ const int tw = 8;
+ int xq[tw];
+ int bj, pu = 0;
+
+ for (bj = 0; bj < tw; ++bj)
+ xq[bj] = 0;
+
+ bj = 0;
+ while (bj < 1)
+ {
+ int gs = n8 ^ 128;
+
+ if (gs != 0)
+ {
+ int u7[3];
+
+ while (bj < 2)
+ {
+ u7[bj] = 0;
+ ++bj;
+ }
+
+ jr[0] = u7[0];
+ rk = xq[0];
+ pu = n8;
+
+ if (si != 0)
+ return si;
+ }
+ }
+
+ return pu;
+}
+
+int
+main (void)
+{
+ signed char ax = 1;
+
+ if (wv (ax) != ax)
+ __builtin_abort ();
+ return 0;
+}