From 35b0708052ed3381ee58d4e6251e3e43da411a4e Mon Sep 17 00:00:00 2001 From: Zdenek Dvorak Date: Wed, 5 Mar 2003 23:05:18 +0100 Subject: basic-block.h (EDGE_IRREDUCIBLE_LOOP, [...]): New. * basic-block.h (EDGE_IRREDUCIBLE_LOOP, EDGE_ALL_FLAGS): New. * cfg.c (dump_edge_info): Add EDGE_IRREDUCIBLE_LOOP flag dump. * cfgloop.c (flow_loop_free): Made global. (establish_preds): New static function. (flow_loop_tree_node_add): Handle subloops of added loop correctly. (get_loop_exit_edges): New. (verify_loop_structure): Verify EDGE_IRREDUCIBLE_LOOP flags. * cfgloop.h (flow_loop_free, get_loop_exit_edges, unloop): Declare. * cfgloopanal.c (mark_irreducible_loops): Mark edges in irreducible loops. * cfgloopmanip.c (loop_delete_branch_edge): Allow to test for removability of an edge. (fix_irreducible_loops): New static function. (find_path, remove_path): Add ability to remove enclosing loops. (unloop): New. (copy_bbs, duplicate_loop_to_header_edge): Use EDGE_IRREDUCIBLE_LOOP flags. * cfgrtl.c (verify_flow_info): Handle EDGE_IRREDUCIBLE_LOOP flag. * loop-unroll.c (peel_loops_completely): Do not duplicate loop if not neccessary. (decide_peel_completely, peel_loops_completely): Allow complete peeling of non-duplicable once rolling loops. * loop-unswitch.c (unswitch_loop): Update EDGE_IRREDUCIBLE_LOOP flags. From-SVN: r63864 --- gcc/cfgloop.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gcc/cfgloop.h') diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h index ae1e529..c5db914 100644 --- a/gcc/cfgloop.h +++ b/gcc/cfgloop.h @@ -266,6 +266,7 @@ extern void flow_loop_dump PARAMS ((const struct loop *, FILE *, FILE *, int), int)); extern int flow_loop_scan PARAMS ((struct loops *, struct loop *, int)); +extern void flow_loop_free PARAMS ((struct loop *)); void mark_irreducible_loops PARAMS ((struct loops *)); /* Loop datastructure manipulation/querying. */ @@ -282,6 +283,7 @@ extern int average_num_loop_insns PARAMS ((struct loop *)); /* Loops & cfg manipulation. */ extern basic_block *get_loop_body PARAMS ((const struct loop *)); +extern edge *get_loop_exit_edges PARAMS ((const struct loop *, unsigned *)); extern edge loop_preheader_edge PARAMS ((const struct loop *)); extern edge loop_latch_edge PARAMS ((const struct loop *)); @@ -326,6 +328,7 @@ extern int duplicate_loop_to_header_edge PARAMS ((struct loop *, edge, unsigned *, int)); extern struct loop *loopify PARAMS ((struct loops *, edge, edge, basic_block)); +extern void unloop PARAMS ((struct loops *, struct loop *)); extern bool remove_path PARAMS ((struct loops *, edge)); extern edge split_loop_bb PARAMS ((struct loops *, basic_block, rtx)); -- cgit v1.1