The following avoids querying ranges of vector entities.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

Richard.

        PR tree-optimization/116905
        * tree-vect-stmts.cc (supportable_indirect_convert_operation):
        Fix guard for vect_get_range_info.

        * gcc.dg/pr116905.c: New testcase.
---
 gcc/testsuite/gcc.dg/pr116905.c | 14 ++++++++++++++
 gcc/tree-vect-stmts.cc          |  6 ++++--
 2 files changed, 18 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/pr116905.c

diff --git a/gcc/testsuite/gcc.dg/pr116905.c b/gcc/testsuite/gcc.dg/pr116905.c
new file mode 100644
index 00000000000..0a2b96ac1c1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr116905.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target float16 } */
+/* { dg-options "-frounding-math" } */
+/* { dg-additional-options "-mavx" { target avx } } */
+
+typedef __attribute__((__vector_size__(16))) _Float16 F;
+typedef __attribute__((__vector_size__(32))) int V;
+F f;
+
+void
+foo()
+{
+  f += __builtin_convertvector((V){3307}, F);
+}
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index c0f8351d3de..e1e4f762078 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -14805,8 +14805,10 @@ supportable_indirect_convert_operation (code_helper 
code,
                 In the future, if it is supported, changes may need to be made
                 to this part, such as checking the RANGE of each element
                 in the vector.  */
-             if ((TREE_CODE (op0) == SSA_NAME && !SSA_NAME_RANGE_INFO (op0))
-                 || !vect_get_range_info (op0, &op_min_value, &op_max_value))
+             if (TREE_CODE (op0) != SSA_NAME
+                 || !SSA_NAME_RANGE_INFO (op0)
+                 || !vect_get_range_info (op0, &op_min_value,
+                                          &op_max_value))
                break;
 
              if (cvt_type == NULL_TREE
-- 
2.43.0

Reply via email to