diff --git a/gcc/testsuite/gcc.dg/pr111082.c b/gcc/testsuite/gcc.dg/pr111082.c new file mode 100644 index 00000000000..46e36e320d1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr111082.c @@ -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]; +} diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 89c3216afac..b5f9333fc22 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -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);