aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenth@gcc.gnu.org>2019-11-08 09:30:52 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-11-08 09:30:52 +0000
commit714fc568abfd02d7dc28607ff60301902f830917 (patch)
treee5c1085ffa34fbee4ef8ee45d098ddb2c0179969 /gcc
parentbe5f7eccf766a4c3a59b821f77ce320001df838f (diff)
downloadgcc-714fc568abfd02d7dc28607ff60301902f830917.zip
gcc-714fc568abfd02d7dc28607ff60301902f830917.tar.gz
gcc-714fc568abfd02d7dc28607ff60301902f830917.tar.bz2
re PR tree-optimization/92324 (ICE in expand_direct_optab_fn, at internal-fn.c:2890)
2019-11-08 Richard Biener <rguenther@suse.de> PR tree-optimization/92324 * tree-vect-loop.c (vect_create_epilog_for_reduction): Use STMT_VINFO_REDUC_VECTYPE for all computations, inserting sign-conversions as necessary. (vectorizable_reduction): Reject conversions in the chain that are not sign-conversions, base analysis on a non-converting stmt and its operation sign. Set STMT_VINFO_REDUC_VECTYPE. * tree-vect-stmts.c (vect_stmt_relevant_p): Don't dump anything for debug stmts. * tree-vectorizer.h (_stmt_vec_info::reduc_vectype): New. (STMT_VINFO_REDUC_VECTYPE): Likewise. * gcc.dg/vect/pr92205.c: XFAIL. * gcc.dg/vect/pr92324-1.c: New testcase. * gcc.dg/vect/pr92324-2.c: Likewise. From-SVN: r277958
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr92324-1.c14
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr92324-2.c21
2 files changed, 35 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/pr92324-1.c b/gcc/testsuite/gcc.dg/vect/pr92324-1.c
new file mode 100644
index 0000000..e37fa78
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr92324-1.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+
+unsigned a, b;
+int c, d;
+unsigned e(int f) {
+ if (a > f)
+ return a;
+ return f;
+}
+void g() {
+ for (; c; c++)
+ d = e(d);
+ b = d;
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr92324-2.c b/gcc/testsuite/gcc.dg/vect/pr92324-2.c
new file mode 100644
index 0000000..c7805fc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr92324-2.c
@@ -0,0 +1,21 @@
+#include "tree-vect.h"
+
+unsigned b[1024];
+
+int __attribute__((noipa))
+foo (int n)
+{
+ int res = 0;
+ for (int i = 0; i < n; ++i)
+ res = res > b[i] ? res : b[i];
+ return res;
+}
+
+int main ()
+{
+ check_vect ();
+ b[15] = (unsigned)__INT_MAX__ + 1;
+ if (foo (16) != -__INT_MAX__ - 1)
+ __builtin_abort ();
+ return 0;
+}