diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-05-26 09:03:53 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-05-26 09:03:53 +0000 |
commit | 5cb834f305452b8e38e5df25c9aea7a9d6cc445f (patch) | |
tree | 15fa47bc711a4455035b475a8d1776cff5f4faeb /gcc/tree-vect-slp.c | |
parent | dad188fec16dd26f7b3b57f06e29c290fe154934 (diff) | |
download | gcc-5cb834f305452b8e38e5df25c9aea7a9d6cc445f.tar.gz |
2015-05-26 Richard Biener <rguenther@suse.de>
* tree-vect-loop.c (vect_update_vf_for_slp): Split out from ...
(vect_analyze_loop_operations): ... here. Remove slp parameter,
detect whether we apply SLP. Remove call to
vect_update_slp_costs_according_to_vf.
(vect_analyze_loop_2): Call vect_update_vf_for_slp and
vect_update_slp_costs_according_to_vf from here. Dispatch
to vect_slp_analyze_operations to analyze SLP stmts.
* tree-vect-slp.c (vect_slp_analyze_node_operations): Drop
unused bb_vec_info parameter, adjust assert.
(vect_slp_analyze_operations): Pass in the slp instance tree
instead of bb_vec_info.
(vect_slp_analyze_bb_1): Adjust call to vect_slp_analyze_operations.
* tree-vectorizer.h (vect_slp_analyze_operations): Declare.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@223670 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-vect-slp.c')
-rw-r--r-- | gcc/tree-vect-slp.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index 1c519903153..1e680207aed 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -2191,7 +2191,7 @@ destroy_bb_vec_info (bb_vec_info bb_vinfo) the subtree. Return TRUE if the operations are supported. */ static bool -vect_slp_analyze_node_operations (bb_vec_info bb_vinfo, slp_tree node) +vect_slp_analyze_node_operations (slp_tree node) { bool dummy; int i; @@ -2202,17 +2202,17 @@ vect_slp_analyze_node_operations (bb_vec_info bb_vinfo, slp_tree node) return true; FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (node), i, child) - if (!vect_slp_analyze_node_operations (bb_vinfo, child)) + if (!vect_slp_analyze_node_operations (child)) return false; FOR_EACH_VEC_ELT (SLP_TREE_SCALAR_STMTS (node), i, stmt) { stmt_vec_info stmt_info = vinfo_for_stmt (stmt); gcc_assert (stmt_info); - gcc_assert (PURE_SLP_STMT (stmt_info)); + gcc_assert (STMT_SLP_TYPE (stmt_info) != loop_vect); if (!vect_analyze_stmt (stmt, &dummy, node)) - return false; + return false; } return true; @@ -2222,19 +2222,26 @@ vect_slp_analyze_node_operations (bb_vec_info bb_vinfo, slp_tree node) /* Analyze statements in SLP instances of the basic block. Return TRUE if the operations are supported. */ -static bool -vect_slp_analyze_operations (bb_vec_info bb_vinfo) +bool +vect_slp_analyze_operations (vec<slp_instance> slp_instances) { - vec<slp_instance> slp_instances = BB_VINFO_SLP_INSTANCES (bb_vinfo); slp_instance instance; int i; + if (dump_enabled_p ()) + dump_printf_loc (MSG_NOTE, vect_location, + "=== vect_slp_analyze_operations ===\n"); + for (i = 0; slp_instances.iterate (i, &instance); ) { - if (!vect_slp_analyze_node_operations (bb_vinfo, - SLP_INSTANCE_TREE (instance))) + if (!vect_slp_analyze_node_operations (SLP_INSTANCE_TREE (instance))) { - vect_free_slp_instance (instance); + dump_printf_loc (MSG_NOTE, vect_location, + "removing SLP instance operations starting from: "); + dump_gimple_stmt (MSG_NOTE, TDF_SLIM, + SLP_TREE_SCALAR_STMTS + (SLP_INSTANCE_TREE (instance))[0], 0); + vect_free_slp_instance (instance); slp_instances.ordered_remove (i); } else @@ -2498,7 +2505,7 @@ vect_slp_analyze_bb_1 (basic_block bb) return NULL; } - if (!vect_slp_analyze_operations (bb_vinfo)) + if (!vect_slp_analyze_operations (BB_VINFO_SLP_INSTANCES (bb_vinfo))) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, |