summaryrefslogtreecommitdiffstats
path: root/gcc/tree-vect-transform.c
diff options
context:
space:
mode:
authorrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>2005-03-01 13:44:46 +0000
committerrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>2005-03-01 13:44:46 +0000
commitffc6b5d5b57e2da11b8cff38cc2476ee44c42796 (patch)
tree5b1c8a12d24075ced5f333d3ddacf873da6903a0 /gcc/tree-vect-transform.c
parent53f179c0e553180244c2fdefecc79063d15c1149 (diff)
downloadppe42-gcc-ffc6b5d5b57e2da11b8cff38cc2476ee44c42796.tar.gz
ppe42-gcc-ffc6b5d5b57e2da11b8cff38cc2476ee44c42796.zip
* cfgloop.c (flow_loop_entry_edges_find, flow_loop_exit_edges_find,
flow_loop_pre_header_scan, flow_loop_pre_header_find, flow_loop_scan): Removed. (flow_loop_dump): Do not dump removed fields. (flow_loop_free): Do not free removed fields. (flow_loops_find): Flags argument removed. Do not call flow_loop_scan. (loop_exit_edge_p): New function. * cfgloop.h (struct loop): Removed fields pre_header, pre_header_edges, num_pre_header_edges, entry_edges, num_entries, exit_edges, num_exits, exits_doms. (LOOP_TREE, LOOP_PRE_HEADER, LOOP_ENTRY_EDGES, LOOP_EXIT_EDGES, LOOP_EDGES, LOOP_ALL): Removed. (flow_loop_scan): Declaration removed. (loop_exit_edge_p, mark_loop_exit_edges): Declare. * cfgloopmanip.c (create_loop_notes): Do not pass flags to flow_loops_find. * ifcvt.c (mark_loop_exit_edges): Moved to cfgloopanal.c. (if_convert): Call flow_loops_find and flow_loops_free when calling mark_loop_exit_edges. * cfgloopanal.c (mark_loop_exit_edges): Moved from ifcvt.c. Removed the flow_loops_find, flow_loops_free and free_dominance_info calls. * loop-init.c (flow_loops_find): Ditto. * passes.c (rest_of_handle_branch_prob): Ditto. * lambda-code.c (perfect_nestify): Do not call flow_loops_find. * loop-unroll.c (analyze_insns_in_loop): Do not use EDGE_LOOP_EXIT. * predict.c (predict_loops): Do not call flow_loop_scan. Use get_loop_exit_edges. (tree_estimate_probability): Do not pass flags to flow_loops_find. * tree-if-conv.c (bb_with_exit_edge_p): Take loop as argument. Do not use EDGE_LOOP_EXIT. (tree_if_convert_cond_expr, if_convertible_modify_expr_p): Pass loop to bb_with_exit_edge_p. (if_convertible_loop_p): Do not call flow_loop_scan. Use loop->single_exit. Do not use EDGE_LOOP_EXIT. Pass loop to bb_with_exit_edge_p. (combine_blocks): Pass loop to bb_with_exit_edge_p. Do not use EDGE_LOOP_EXIT. * tree-loop-linear.c (linear_transform_loops): Do not call flow_loop_scan. Use loop->single_exit. * tree-vect-analyze.c (vect_analyze_operations): Use loop->single_exit. (vect_analyze_loop_form): Do not call flow_loop_scan. * tree-vect-transform.c (vect_update_ivs_after_vectorizer): Use loop->single_exit. (vect_do_peeling_for_loop_bound): Use loop_preheader_edge and loop->single_exit. * tree-vectorizer.c (slpeel_update_phis_for_duplicate_loop, slpeel_make_loop_iterate_ntimes, slpeel_can_duplicate_loop_p, slpeel_tree_duplicate_loop_to_edge_cfg, slpeel_verify_cfg_after_peeling, slpeel_tree_peel_loop_to_edge): Use loop_preheader_edge and loop->single_exit. Do not call flow_loop_scan. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95738 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-vect-transform.c')
-rw-r--r--gcc/tree-vect-transform.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/gcc/tree-vect-transform.c b/gcc/tree-vect-transform.c
index 5f71256e14e..1935a738f71 100644
--- a/gcc/tree-vect-transform.c
+++ b/gcc/tree-vect-transform.c
@@ -1315,7 +1315,7 @@ vect_update_ivs_after_vectorizer (loop_vec_info loop_vinfo, tree niters,
edge update_e)
{
struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
- basic_block exit_bb = loop->exit_edges[0]->dest;
+ basic_block exit_bb = loop->single_exit->dest;
tree phi, phi1;
basic_block update_bb = update_e->dest;
@@ -1398,6 +1398,7 @@ vect_do_peeling_for_loop_bound (loop_vec_info loop_vinfo, tree *ratio,
struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
struct loop *new_loop;
edge update_e;
+ basic_block preheader;
#ifdef ENABLE_CHECKING
int loop_num;
#endif
@@ -1413,14 +1414,10 @@ vect_do_peeling_for_loop_bound (loop_vec_info loop_vinfo, tree *ratio,
vect_generate_tmps_on_preheader (loop_vinfo, &ni_name,
&ratio_mult_vf_name, ratio);
- /* Update loop info. */
- loop->pre_header = loop_preheader_edge (loop)->src;
- loop->pre_header_edges[0] = loop_preheader_edge (loop);
-
#ifdef ENABLE_CHECKING
loop_num = loop->num;
#endif
- new_loop = slpeel_tree_peel_loop_to_edge (loop, loops, loop->exit_edges[0],
+ new_loop = slpeel_tree_peel_loop_to_edge (loop, loops, loop->single_exit,
ratio_mult_vf_name, ni_name, false);
#ifdef ENABLE_CHECKING
gcc_assert (new_loop);
@@ -1434,10 +1431,11 @@ vect_do_peeling_for_loop_bound (loop_vec_info loop_vinfo, tree *ratio,
is a bb after NEW_LOOP, where these IVs are not used. Find the edge that
is on the path where the LOOP IVs are used and need to be updated. */
- if (EDGE_PRED (new_loop->pre_header, 0)->src == loop->exit_edges[0]->dest)
- update_e = EDGE_PRED (new_loop->pre_header, 0);
+ preheader = loop_preheader_edge (new_loop)->src;
+ if (EDGE_PRED (preheader, 0)->src == loop->single_exit->dest)
+ update_e = EDGE_PRED (preheader, 0);
else
- update_e = EDGE_PRED (new_loop->pre_header, 1);
+ update_e = EDGE_PRED (preheader, 1);
/* Update IVs of original loop as if they were advanced
by ratio_mult_vf_name steps. */
OpenPOWER on IntegriCloud