[gcc r10-6033] vect: Fix ICE in vectorizable_comparison PR93292
Jakub Jelinek
jakub@gcc.gnu.org
Fri Jan 17 08:41:00 GMT 2020
https://gcc.gnu.org/g:dc9ba9d045d0cfc06207806fd64b06ab3304b196
commit r10-6033-gdc9ba9d045d0cfc06207806fd64b06ab3304b196
Author: Jakub Jelinek <jakub@redhat.com>
Date: Fri Jan 17 09:39:45 2020 +0100
vect: Fix ICE in vectorizable_comparison PR93292
The following testcase ICEs on powerpc64le-linux. The problem is that
get_vectype_for_scalar_type returns NULL, and while most places in
tree-vect-stmts.c handle that case, this spot doesn't and punts only
if it is non-NULL, but with different number of elts than expected.
2020-01-17 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/93292
* tree-vect-stmts.c (vectorizable_comparison): Punt also if
get_vectype_for_scalar_type returns NULL.
* g++.dg/opt/pr93292.C: New test.
Diff:
---
gcc/ChangeLog | 6 ++++++
gcc/testsuite/ChangeLog | 3 +++
gcc/testsuite/g++.dg/opt/pr93292.C | 18 ++++++++++++++++++
gcc/tree-vect-stmts.c | 2 +-
4 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e364f61..d8c34b2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2020-01-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/93292
+ * tree-vect-stmts.c (vectorizable_comparison): Punt also if
+ get_vectype_for_scalar_type returns NULL.
+
2020-01-16 Jan Hubicka <hubicka@ucw.cz>
* params.opt (-param=max-predicted-iterations): Increase range from 0.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index eea3bd2..5bd1ab2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2020-01-17 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/93292
+ * g++.dg/opt/pr93292.C: New test.
+
PR testsuite/93294
* lib/c-compat.exp (compat-use-alt-compiler): Handle
-fdiagnostics-urls=never similarly to -fdiagnostics-color=never.
diff --git a/gcc/testsuite/g++.dg/opt/pr93292.C b/gcc/testsuite/g++.dg/opt/pr93292.C
new file mode 100644
index 0000000..a368319
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr93292.C
@@ -0,0 +1,18 @@
+// PR tree-optimization/93292
+// { dg-do compile }
+// { dg-options "-O3 -w" }
+
+struct A {
+ static int foo (float x) { static int b; b = x ? x + 0.5 : 0; return b; }
+};
+
+void
+bar (int *d, float e)
+{
+ float g;
+ for (int h = 0; h < 64; h++)
+ {
+ d[h] += A::foo (g < 0 ? : g > 5 ? : g);
+ A::foo (e);
+ }
+}
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index df2899b..2ca8e49 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -10492,7 +10492,7 @@ vectorizable_comparison (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi,
{
vectype = get_vectype_for_scalar_type (vinfo, TREE_TYPE (rhs1),
slp_node);
- if (maybe_ne (TYPE_VECTOR_SUBPARTS (vectype), nunits))
+ if (!vectype || maybe_ne (TYPE_VECTOR_SUBPARTS (vectype), nunits))
return false;
}
else if (maybe_ne (nunits, TYPE_VECTOR_SUBPARTS (vectype)))
More information about the Gcc-cvs
mailing list