Message ID | 20240703084220.686122-1-lin1.hu@intel.com |
---|---|
State | New |
Headers | show |
Series | vect: Fix ICE caused by missing check for TREE_CODE == SSA_NAME | expand |
On Wed, 3 Jul 2024, Hu, Lin1 wrote: > Hi, all > > I forgot to check if the tree's code is SSA_NAME. Have modified. > > Bootstrapped and regtested on {x86-64, aarch64}-linux-gnu, OK for trunk? OK. Thanks, Richard. > BRs, > Lin > > 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 | 12 ++++++++++++ > gcc/testsuite/gcc.dg/vect/pr115753-2.c | 20 ++++++++++++++++++++ > gcc/testsuite/gcc.dg/vect/pr115753-3.c | 15 +++++++++++++++ > gcc/tree-vect-stmts.cc | 2 +- > 4 files changed, 48 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.dg/vect/pr115753-1.c > create mode 100644 gcc/testsuite/gcc.dg/vect/pr115753-2.c > create mode 100644 gcc/testsuite/gcc.dg/vect/pr115753-3.c > > diff --git a/gcc/testsuite/gcc.dg/vect/pr115753-1.c b/gcc/testsuite/gcc.dg/vect/pr115753-1.c > new file mode 100644 > index 00000000000..2c1b6e5df63 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/vect/pr115753-1.c > @@ -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 > index 00000000000..ceacada2a76 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/vect/pr115753-2.c > @@ -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 > index 00000000000..8e95445897c > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/vect/pr115753-3.c > @@ -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]); > +} > + > diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc > index 20b84515446..b4f346ee6ab 100644 > --- a/gcc/tree-vect-stmts.cc > +++ b/gcc/tree-vect-stmts.cc > @@ -14678,7 +14678,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; > >
diff --git a/gcc/testsuite/gcc.dg/vect/pr115753-1.c b/gcc/testsuite/gcc.dg/vect/pr115753-1.c new file mode 100644 index 00000000000..2c1b6e5df63 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr115753-1.c @@ -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 index 00000000000..ceacada2a76 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr115753-2.c @@ -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 index 00000000000..8e95445897c --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr115753-3.c @@ -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]); +} + diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 20b84515446..b4f346ee6ab 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -14678,7 +14678,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;