Lines Matching refs:loop
152 static struct loop *slpeel_tree_duplicate_loop_to_edge_cfg
153 (struct loop *, struct loops *, edge);
155 (struct loop *, struct loop *, bool after);
157 (edge, struct loop *, bool, basic_block *, bitmap *);
159 (edge, struct loop *, bool, basic_block *);
164 static void rename_variables_in_loop (struct loop *);
228 struct loop *loop = bb->loop_father; in rename_variables_in_bb() local
240 if (!flow_bb_inside_loop_p (loop, e->dest)) in rename_variables_in_bb()
251 rename_variables_in_loop (struct loop *loop) in rename_variables_in_loop() argument
256 bbs = get_loop_body (loop); in rename_variables_in_loop()
258 for (i = 0; i < loop->num_nodes; i++) in rename_variables_in_loop()
273 slpeel_update_phis_for_duplicate_loop (struct loop *orig_loop, in slpeel_update_phis_for_duplicate_loop()
274 struct loop *new_loop, bool after) in slpeel_update_phis_for_duplicate_loop()
505 slpeel_update_phi_nodes_for_guard1 (edge guard_edge, struct loop *loop, in slpeel_update_phi_nodes_for_guard1() argument
515 basic_block orig_bb = loop->header; in slpeel_update_phi_nodes_for_guard1()
521 *new_exit_bb = split_edge (loop->single_exit); in slpeel_update_phi_nodes_for_guard1()
522 add_bb_to_loop (*new_exit_bb, loop->outer); in slpeel_update_phi_nodes_for_guard1()
547 loop_arg = PHI_ARG_DEF_FROM_EDGE (orig_phi, EDGE_SUCC (loop->latch, 0)); in slpeel_update_phi_nodes_for_guard1()
548 guard_arg = PHI_ARG_DEF_FROM_EDGE (orig_phi, loop_preheader_edge (loop)); in slpeel_update_phi_nodes_for_guard1()
567 add_phi_arg (new_phi, loop_arg, loop->single_exit); in slpeel_update_phi_nodes_for_guard1()
632 slpeel_update_phi_nodes_for_guard2 (edge guard_edge, struct loop *loop, in slpeel_update_phi_nodes_for_guard2() argument
647 *new_exit_bb = split_edge (loop->single_exit); in slpeel_update_phi_nodes_for_guard2()
648 add_bb_to_loop (*new_exit_bb, loop->outer); in slpeel_update_phi_nodes_for_guard2()
713 add_phi_arg (new_phi, loop_arg, loop->single_exit); in slpeel_update_phi_nodes_for_guard2()
766 slpeel_make_loop_iterate_ntimes (struct loop *loop, tree niters) in slpeel_make_loop_iterate_ntimes() argument
770 edge exit_edge = loop->single_exit; in slpeel_make_loop_iterate_ntimes()
774 tree begin_label = tree_block_label (loop->latch); in slpeel_make_loop_iterate_ntimes()
775 tree exit_label = tree_block_label (loop->single_exit->dest); in slpeel_make_loop_iterate_ntimes()
782 orig_cond = get_loop_exit_condition (loop); in slpeel_make_loop_iterate_ntimes()
786 standard_iv_increment_position (loop, &incr_bsi, &insert_after); in slpeel_make_loop_iterate_ntimes()
787 create_iv (init, step, NULL_TREE, loop, in slpeel_make_loop_iterate_ntimes()
810 loop_loc = find_loop_location (loop); in slpeel_make_loop_iterate_ntimes()
819 loop->nb_iterations = niters; in slpeel_make_loop_iterate_ntimes()
826 static struct loop *
827 slpeel_tree_duplicate_loop_to_edge_cfg (struct loop *loop, struct loops *loops, in slpeel_tree_duplicate_loop_to_edge_cfg() argument
830 struct loop *new_loop; in slpeel_tree_duplicate_loop_to_edge_cfg()
837 at_exit = (e == loop->single_exit); in slpeel_tree_duplicate_loop_to_edge_cfg()
838 if (!at_exit && e != loop_preheader_edge (loop)) in slpeel_tree_duplicate_loop_to_edge_cfg()
841 bbs = get_loop_body (loop); in slpeel_tree_duplicate_loop_to_edge_cfg()
844 if (!can_copy_bbs_p (bbs, loop->num_nodes)) in slpeel_tree_duplicate_loop_to_edge_cfg()
851 new_loop = duplicate_loop (loops, loop, loop->outer); in slpeel_tree_duplicate_loop_to_edge_cfg()
858 exit_dest = loop->single_exit->dest; in slpeel_tree_duplicate_loop_to_edge_cfg()
860 exit_dest) == loop->header ? in slpeel_tree_duplicate_loop_to_edge_cfg()
863 new_bbs = XNEWVEC (basic_block, loop->num_nodes); in slpeel_tree_duplicate_loop_to_edge_cfg()
865 copy_bbs (bbs, loop->num_nodes, new_bbs, in slpeel_tree_duplicate_loop_to_edge_cfg()
866 &loop->single_exit, 1, &new_loop->single_exit, NULL, in slpeel_tree_duplicate_loop_to_edge_cfg()
873 phi_arg = PHI_ARG_DEF_FROM_EDGE (phi, loop->single_exit); in slpeel_tree_duplicate_loop_to_edge_cfg()
897 edge entry_e = loop_preheader_edge (loop); in slpeel_tree_duplicate_loop_to_edge_cfg()
906 redirect_edge_and_branch_force (new_exit_e, loop->header); in slpeel_tree_duplicate_loop_to_edge_cfg()
907 set_immediate_dominator (CDI_DOMINATORS, loop->header, in slpeel_tree_duplicate_loop_to_edge_cfg()
912 for (phi = phi_nodes (loop->header); phi; phi = PHI_CHAIN (phi)) in slpeel_tree_duplicate_loop_to_edge_cfg()
971 slpeel_can_duplicate_loop_p (struct loop *loop, edge e) in slpeel_can_duplicate_loop_p() argument
973 edge exit_e = loop->single_exit; in slpeel_can_duplicate_loop_p()
974 edge entry_e = loop_preheader_edge (loop); in slpeel_can_duplicate_loop_p()
975 tree orig_cond = get_loop_exit_condition (loop); in slpeel_can_duplicate_loop_p()
981 if (loop->inner in slpeel_can_duplicate_loop_p()
984 || !loop->outer in slpeel_can_duplicate_loop_p()
985 || loop->num_nodes != 2 in slpeel_can_duplicate_loop_p()
986 || !empty_block_p (loop->latch) in slpeel_can_duplicate_loop_p()
987 || !loop->single_exit in slpeel_can_duplicate_loop_p()
998 slpeel_verify_cfg_after_peeling (struct loop *first_loop, in slpeel_verify_cfg_after_peeling()
999 struct loop *second_loop) in slpeel_verify_cfg_after_peeling()
1067 struct loop*
1068 slpeel_tree_peel_loop_to_edge (struct loop *loop, struct loops *loops, in slpeel_tree_peel_loop_to_edge() argument
1072 struct loop *new_loop = NULL, *first_loop, *second_loop; in slpeel_tree_peel_loop_to_edge()
1080 edge exit_e = loop->single_exit; in slpeel_tree_peel_loop_to_edge()
1083 if (!slpeel_can_duplicate_loop_p (loop, e)) in slpeel_tree_peel_loop_to_edge()
1107 if (!(new_loop = slpeel_tree_duplicate_loop_to_edge_cfg (loop, loops, e))) in slpeel_tree_peel_loop_to_edge()
1109 loop_loc = find_loop_location (loop); in slpeel_tree_peel_loop_to_edge()
1123 first_loop = loop; in slpeel_tree_peel_loop_to_edge()
1130 second_loop = loop; in slpeel_tree_peel_loop_to_edge()
1134 slpeel_update_phis_for_duplicate_loop (loop, new_loop, e == exit_e); in slpeel_tree_peel_loop_to_edge()
1229 find_loop_location (struct loop *loop) in find_loop_location() argument
1235 if (!loop) in find_loop_location()
1238 node = get_loop_exit_condition (loop); in find_loop_location()
1247 if (!loop->header) in find_loop_location()
1250 bb = loop->header; in find_loop_location()
1385 new_loop_vec_info (struct loop *loop) in new_loop_vec_info() argument
1394 bbs = get_loop_body (loop); in new_loop_vec_info()
1397 for (i = 0; i < loop->num_nodes; i++) in new_loop_vec_info()
1418 LOOP_VINFO_LOOP (res) = loop; in new_loop_vec_info()
1443 struct loop *loop; in destroy_loop_vec_info() local
1452 loop = LOOP_VINFO_LOOP (loop_vinfo); in destroy_loop_vec_info()
1455 nbbs = loop->num_nodes; in destroy_loop_vec_info()
1643 struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo); in vect_is_simple_use() local
1699 if (!flow_bb_inside_loop_p (loop, bb)) in vect_is_simple_use()
1812 vect_is_simple_reduction (struct loop *loop, tree phi) in vect_is_simple_reduction() argument
1814 edge latch_e = loop_latch_edge (loop); in vect_is_simple_reduction()
1940 && flow_bb_inside_loop_p (loop, bb_for_stmt (def1)) in vect_is_simple_reduction()
1951 && flow_bb_inside_loop_p (loop, bb_for_stmt (def2)) in vect_is_simple_reduction()
2054 struct loop *loop = loops->parray[i]; in vectorize_loops() local
2056 if (!loop) in vectorize_loops()
2059 vect_loop_location = find_loop_location (loop); in vectorize_loops()
2060 loop_vinfo = vect_analyze_loop (loop); in vectorize_loops()
2061 loop->aux = loop_vinfo; in vectorize_loops()
2081 struct loop *loop = loops->parray[i]; in vectorize_loops() local
2084 if (!loop) in vectorize_loops()
2086 loop_vinfo = loop->aux; in vectorize_loops()
2088 loop->aux = NULL; in vectorize_loops()