aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-08-27 14:17:03 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-08-27 14:17:03 +0000
commitefc3a1a101184a73718bcb034e530e57cd65a543 (patch)
treeac8a0f32f451eb4a03dcf94123aa557266812792 /gcc
parentde5b5228631d14e272ec8bf93827dea3da16a33d (diff)
downloadgcc-efc3a1a101184a73718bcb034e530e57cd65a543.zip
gcc-efc3a1a101184a73718bcb034e530e57cd65a543.tar.gz
gcc-efc3a1a101184a73718bcb034e530e57cd65a543.tar.bz2
re PR tree-optimization/86927 (Gcc miscompiles at -O3 on valid code)
2018-08-27 Richard Biener <rguenther@suse.de> PR tree-optimization/86927 * tree-vect-loop.c (vect_create_epilog_for_reduction): Properly use const cond reduction code. * gcc.dg/vect/pr86927.c: New testcase. From-SVN: r263888
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr86927.c15
-rw-r--r--gcc/tree-vect-loop.c3
4 files changed, 29 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 123d76c..d27a7a8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-08-27 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/86927
+ * tree-vect-loop.c (vect_create_epilog_for_reduction): Properly
+ use const cond reduction code.
+
2018-08-27 Alexander Monakov <amonakov@ispras.ru>
PR tree-optimization/85758
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index aa957ee..8ebadb0 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-08-27 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/86927
+ * gcc.dg/vect/pr86927.c: New testcase.
+
2018-08-27 David Malcolm <dmalcolm@redhat.com>
PR 87091
diff --git a/gcc/testsuite/gcc.dg/vect/pr86927.c b/gcc/testsuite/gcc.dg/vect/pr86927.c
new file mode 100644
index 0000000..794092b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr86927.c
@@ -0,0 +1,15 @@
+#include "tree-vect.h"
+
+int a[28];
+int main()
+{
+ check_vect ();
+ a[4] = 1;
+ int c = 1;
+ for (int b = 0; b < 8; b++)
+ if (a[b])
+ c = 0;
+ if (c)
+ abort();
+ return 0;
+}
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index d5e3552..124a4be 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -5197,6 +5197,9 @@ vect_create_epilog_for_reduction (vec<tree> vect_defs,
if (STMT_VINFO_VEC_REDUCTION_TYPE (stmt_info)
== INTEGER_INDUC_COND_REDUCTION)
code = induc_code;
+ else if (STMT_VINFO_VEC_REDUCTION_TYPE (stmt_info)
+ == CONST_COND_REDUCTION)
+ code = STMT_VINFO_VEC_CONST_COND_REDUC_CODE (stmt_info);
else
code = MAX_EXPR;
}