tree-optimization/111082 - bogus promoted min
vectorize_slp_instance_root_stmt promotes operations with undefined overflow to unsigned arithmetic but fails to consider operations that do not overflow like MIN which it turned into MIN with wrong signedness and in the case of the PR an unsupported operation. The following rectifies this. PR tree-optimization/111082 * tree-vect-slp.cc (vectorize_slp_instance_root_stmt): Only pun operations that can overflow. * gcc.dg/pr111082.c: New testcase.
This commit is contained in:
parent
03cb6904d1
commit
e10cb804e6
2 changed files with 12 additions and 1 deletions
10
gcc/testsuite/gcc.dg/pr111082.c
Normal file
10
gcc/testsuite/gcc.dg/pr111082.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3 -fno-vect-cost-model" } */
|
||||
/* { dg-additional-options "-mavx512f" { target { x86_64-*-* i?86-*-* } } } */
|
||||
|
||||
long minarray2(const long *input)
|
||||
{
|
||||
if (input[0] < input[1])
|
||||
return input[0] ;
|
||||
return input[1];
|
||||
}
|
|
@ -9161,7 +9161,8 @@ vectorize_slp_instance_root_stmt (slp_tree node, slp_instance instance)
|
|||
tree vectype = TREE_TYPE (vec_def);
|
||||
tree compute_vectype = vectype;
|
||||
bool pun_for_overflow_p = (ANY_INTEGRAL_TYPE_P (vectype)
|
||||
&& TYPE_OVERFLOW_UNDEFINED (vectype));
|
||||
&& TYPE_OVERFLOW_UNDEFINED (vectype)
|
||||
&& operation_can_overflow (reduc_code));
|
||||
if (pun_for_overflow_p)
|
||||
{
|
||||
compute_vectype = unsigned_type_for (vectype);
|
||||
|
|
Loading…
Add table
Reference in a new issue