From: Richard Biener Date: Fri, 2 Jun 2017 10:26:10 +0000 (+0000) Subject: tree-vect-loop.c (vect_analyze_loop_operations): Not relevant PHIs are ok. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=643a9684fadd71e0b89bc737e937e22fe621a4e7;p=gcc.git tree-vect-loop.c (vect_analyze_loop_operations): Not relevant PHIs are ok. 2017-06-02 Richard Biener * tree-vect-loop.c (vect_analyze_loop_operations): Not relevant PHIs are ok. * tree-vect-stmts.c (process_use): Do not mark backedge defs for inductions as relevant. From-SVN: r248820 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index db9e2430d05..122c8cdcf72 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2017-06-02 Richard Biener + + * tree-vect-loop.c (vect_analyze_loop_operations): Not relevant + PHIs are ok. + * tree-vect-stmts.c (process_use): Do not mark backedge defs + for inductions as relevant. + 2017-06-02 Richard Biener * tree-vect-loop.c (get_initial_def_for_induction): Inline into ... diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 27fe80852e2..107f082366a 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -1708,8 +1708,7 @@ vect_analyze_loop_operations (loop_vec_info loop_vinfo) are not used in the outerloop (unless it is double reduction, i.e., this phi is vect_reduction_def), cause this case requires to actually do something here. */ - if ((!STMT_VINFO_RELEVANT_P (stmt_info) - || STMT_VINFO_LIVE_P (stmt_info)) + if (STMT_VINFO_LIVE_P (stmt_info) && STMT_VINFO_DEF_TYPE (stmt_info) != vect_double_reduction_def) { diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 7490b08b454..1e9d42cd53f 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -579,6 +579,20 @@ process_use (gimple *stmt, tree use, loop_vec_info loop_vinfo, gcc_unreachable (); } } + /* We are also not interested in uses on loop PHI backedges that are + inductions. Otherwise we'll needlessly vectorize the IV increment + and cause hybrid SLP for SLP inductions. */ + else if (gimple_code (stmt) == GIMPLE_PHI + && STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_induction_def + && (PHI_ARG_DEF_FROM_EDGE (stmt, loop_latch_edge (bb->loop_father)) + == use)) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_NOTE, vect_location, + "induction value on backedge.\n"); + return true; + } + vect_mark_relevant (worklist, def_stmt, relevant, false); return true;