diff options
author | Richard Biener <rguenther@suse.de> | 2017-06-02 10:26:10 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-06-02 10:26:10 +0000 |
commit | 643a9684fadd71e0b89bc737e937e22fe621a4e7 (patch) | |
tree | ee45fe7845f42edf39217d19020ca988a2ef1daf /gcc | |
parent | e7754973ed3f91db45ae9257197966e1030e1e85 (diff) | |
download | gcc-643a9684fadd71e0b89bc737e937e22fe621a4e7.zip gcc-643a9684fadd71e0b89bc737e937e22fe621a4e7.tar.gz gcc-643a9684fadd71e0b89bc737e937e22fe621a4e7.tar.bz2 |
tree-vect-loop.c (vect_analyze_loop_operations): Not relevant PHIs are ok.
2017-06-02 Richard Biener <rguenther@suse.de>
* 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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/tree-vect-loop.c | 3 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 14 |
3 files changed, 22 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index db9e243..122c8cd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2017-06-02 Richard Biener <rguenther@suse.de> + * 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 <rguenther@suse.de> + * tree-vect-loop.c (get_initial_def_for_induction): Inline into ... (vectorizable_induction): ... this. Remove dead code. diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 27fe808..107f082 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 7490b08..1e9d42c 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; |