https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63379
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |wrong-code Target| |x86_64-*-* Status|UNCONFIRMED |NEW Last reconfirmed| |2014-10-09 Ever confirmed|0 |1 Known to fail| |4.7.4, 4.8.3, 4.9.1, 5.0 --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed. We're choosing bogus "neutral" operands for MIN/MAX in the case of SLP. I am testing Index: gcc/tree-vect-slp.c =================================================================== --- gcc/tree-vect-slp.c (revision 215917) +++ gcc/tree-vect-slp.c (working copy) @@ -2395,13 +2395,8 @@ vect_get_constant_vectors (tree op, slp_ neutral_op = build_int_cst (TREE_TYPE (op), -1); break; - case MAX_EXPR: - case MIN_EXPR: - def_stmt = SSA_NAME_DEF_STMT (op); - loop = (gimple_bb (stmt))->loop_father; - neutral_op = PHI_ARG_DEF_FROM_EDGE (def_stmt, - loop_preheader_edge (loop)); - break; + /* For MIN/MAX we don't have an easy neutral operand but + the initial values can be used fine here. */ default: neutral_op = NULL;