summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>2015-02-25 14:12:46 +0000
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>2015-02-25 14:12:46 +0000
commit25f61332c23e9e193cf6847547d0e8b92c9280ac (patch)
tree72b1bba679b53db6bd255405253a032ffd8055b5
parent5607113e2fbd550118fe107fe874c8413b87475f (diff)
downloadgcc-25f61332c23e9e193cf6847547d0e8b92c9280ac.tar.gz
2015-02-25 Richard Biener <rguenther@suse.de>
Kai Tietz <ktietz@redhat.com> Backport from mainline PR tree-optimization/61917 * tree-vect-loop.c (vectorizable_reduction): Allow vect_internal_def without reduction to exit graceful. ChangeLog testsuite/ 2015-02-25 Kai Tietz <ktietz@redhat.com> Backport from mainline PR tree-optimization/61917 * gcc.dg/vect/vect-pr61917.c: New file. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch@220968 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-pr61917.c13
-rw-r--r--gcc/tree-vect-loop.c9
4 files changed, 33 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2b069a75b94..001d1e952ff 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2015-02-25 Richard Biener <rguenther@suse.de>
+ Kai Tietz <ktietz@redhat.com>
+
+ Backported from mainline
+ PR tree-optimization/61917
+ * tree-vect-loop.c (vectorizable_reduction): Allow
+ vect_internal_def without reduction to exit graceful.
+
2015-02-25 Georg-Johann Lay <avr@gjlay.de>
PR target/65196
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d3bd0f0b38a..c86c2a33d65 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-25 Kai Tietz <ktietz@redhat.com>
+
+ Backported from mainline
+ PR tree-optimization/61917
+ * gcc.dg/vect/vect-pr61917.c: New file.
+
2015-02-23 Oleg Endo <olegendo@gcc.gnu.org>
Backport from mainline
diff --git a/gcc/testsuite/gcc.dg/vect/vect-pr61917.c b/gcc/testsuite/gcc.dg/vect/vect-pr61917.c
new file mode 100644
index 00000000000..c55c6206ab0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-pr61917.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-O3" } */
+
+int a, b, c, d;
+
+int
+fn1 ()
+{
+ for (; c; c++)
+ for (b = 0; b < 2; b++)
+ d = a - d;
+ return d;
+}
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index bb8a9841d63..790914bcff6 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -4909,6 +4909,12 @@ vectorizable_reduction (gimple stmt, gimple_stmt_iterator *gsi,
if (!vectype_in)
vectype_in = tem;
gcc_assert (is_simple_use);
+ if (!found_nested_cycle_def)
+ reduc_def_stmt = def_stmt;
+
+ if (gimple_code (reduc_def_stmt) != GIMPLE_PHI)
+ return false;
+
if (!(dt == vect_reduction_def
|| dt == vect_nested_cycle
|| ((dt == vect_internal_def || dt == vect_external_def
@@ -4921,10 +4927,7 @@ vectorizable_reduction (gimple stmt, gimple_stmt_iterator *gsi,
gcc_assert (orig_stmt);
return false;
}
- if (!found_nested_cycle_def)
- reduc_def_stmt = def_stmt;
- gcc_assert (gimple_code (reduc_def_stmt) == GIMPLE_PHI);
if (orig_stmt)
gcc_assert (orig_stmt == vect_is_simple_reduction (loop_vinfo,
reduc_def_stmt,