]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
vect: Fix ICE caused by missing check for TREE_CODE == SSA_NAME
authorHu, Lin1 <lin1.hu@intel.com>
Wed, 3 Jul 2024 02:07:02 +0000 (10:07 +0800)
committerHu, Lin1 <lin1.hu@intel.com>
Thu, 4 Jul 2024 01:27:56 +0000 (09:27 +0800)
Need to check if the tree's code is SSA_NAME before SSA_NAME_RANGE_INFO.

2024-07-03  Hu, Lin1 <lin1.hu@intel.com>
    Andrew Pinski <quic_apinski@quicinc.com>

gcc/ChangeLog:

PR tree-optimization/115753
* tree-vect-stmts.cc (supportable_indirect_convert_operation): Add
TYPE_CODE check before SSA_NAME_RANGE_INFO.

gcc/testsuite/ChangeLog:

PR tree-optimization/115753
* gcc.dg/vect/pr115753-1.c: New test.
* gcc.dg/vect/pr115753-2.c: Ditto.
* gcc.dg/vect/pr115753-3.c: Ditto.

gcc/testsuite/gcc.dg/vect/pr115753-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr115753-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/pr115753-3.c [new file with mode: 0644]
gcc/tree-vect-stmts.cc

diff --git a/gcc/testsuite/gcc.dg/vect/pr115753-1.c b/gcc/testsuite/gcc.dg/vect/pr115753-1.c
new file mode 100644 (file)
index 0000000..2c1b6e5
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -frounding-math" } */
+/* { dg-add-options float16  } */
+/* { dg-require-effective-target float16  } */
+
+void f(_Complex _Float16*);
+void
+foo1 (_Complex _Float16 *d)
+{
+    _Complex _Float16 cf = 3967 + 3791 * 1i;
+    f(&cf);
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr115753-2.c b/gcc/testsuite/gcc.dg/vect/pr115753-2.c
new file mode 100644 (file)
index 0000000..ceacada
--- /dev/null
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -frounding-math" } */
+/* { dg-add-options float16  } */
+/* { dg-require-effective-target float16  } */
+
+void f(_Float16*);
+void
+foo1 ()
+{
+  int t0 = 3967;
+  int t1 = 3969;
+  int t2 = 3971;
+  int t3 = 3973;
+  _Float16 tt[4];
+  tt[0] = t0;
+  tt[1] = t1;
+  tt[2] = t2;
+  tt[3] = t3;
+  f(&tt[0]);
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr115753-3.c b/gcc/testsuite/gcc.dg/vect/pr115753-3.c
new file mode 100644 (file)
index 0000000..8e95445
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -frounding-math" } */
+
+void f(float*);
+void
+foo1 ()
+{
+  long long t0 = __LONG_LONG_MAX__;
+  long long t1 = __LONG_LONG_MAX__ - 1;
+  float tt[2];
+  tt[0] = t0;
+  tt[1] = t1;
+  f(&tt[0]);
+}
+
index 156c11fee8214ee69e6956288ab2b1b450037fa9..fdcda0d2abae99de7f31ce1b00a947a705b5e350 100644 (file)
@@ -14680,7 +14680,7 @@ 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 (!SSA_NAME_RANGE_INFO (op0)
+             if ((TREE_CODE (op0) == SSA_NAME && !SSA_NAME_RANGE_INFO (op0))
                  || !vect_get_range_info (op0, &op_min_value, &op_max_value))
                break;