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 0000000000000000000000000000000000000000..2c1b6e5df632112a626564cbd4b561e695b86e47 --- /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 0000000000000000000000000000000000000000..ceacada2a7642fe5c0ba58daedaf29ce697a116b --- /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 0000000000000000000000000000000000000000..8e95445897cc26aa52be9b404eaf68a625863cf4 --- /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 156c11fee8214ee69e6956288ab2b1b450037fa9..fdcda0d2abae99de7f31ce1b00a947a705b5e350 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -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;