https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69053
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED --- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> --- Certainly bougs though. The following works for me - can you test that? Index: gcc/tree-vect-loop.c =================================================================== --- gcc/tree-vect-loop.c (revision 232213) +++ gcc/tree-vect-loop.c (working copy) @@ -4063,10 +4075,10 @@ get_initial_def_for_reduction (gimple *s tree *elts; int i; bool nested_in_vect_loop = false; - tree init_value; REAL_VALUE_TYPE real_init_val = dconst0; int int_init_val = 0; gimple *def_stmt = NULL; + gimple_seq stmts = NULL; gcc_assert (vectype); nunits = TYPE_VECTOR_SUBPARTS (vectype); @@ -4095,16 +4107,6 @@ get_initial_def_for_reduction (gimple *s return vect_create_destination_var (init_val, vectype); } - if (TREE_CONSTANT (init_val)) - { - if (SCALAR_FLOAT_TYPE_P (scalar_type)) - init_value = build_real (scalar_type, TREE_REAL_CST (init_val)); - else - init_value = build_int_cst (scalar_type, TREE_INT_CST_LOW (init_val)); - } - else - init_value = init_val; - switch (code) { case WIDEN_SUM_EXPR: @@ -4181,7 +4183,10 @@ get_initial_def_for_reduction (gimple *s break; } } - init_def = build_vector_from_val (vectype, init_value); + init_val = gimple_convert (&stmts, TREE_TYPE (vectype), init_val); + if (! gimple_seq_empty_p (stmts)) + gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts); + init_def = build_vector_from_val (vectype, init_val); break; default: