diff options
Diffstat (limited to 'gcc/cfgloop.h')
-rw-r--r-- | gcc/cfgloop.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h index c2be07d..367851e 100644 --- a/gcc/cfgloop.h +++ b/gcc/cfgloop.h @@ -185,6 +185,10 @@ struct loop /* Upper bound on number of iterations of a loop. */ struct nb_iter_bound *bounds; + + /* If not NULL, loop has just single exit edge stored here (edges to the + EXIT_BLOCK_PTR do not count. */ + edge single_exit; }; /* Flags for state of loop structure. */ @@ -192,7 +196,8 @@ enum { LOOPS_HAVE_PREHEADERS = 1, LOOPS_HAVE_SIMPLE_LATCHES = 2, - LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS = 4 + LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS = 4, + LOOPS_HAVE_MARKED_SINGLE_EXITS = 8 }; /* Structure to hold CFG information about natural loops within a function. */ @@ -258,6 +263,7 @@ extern void flow_loop_dump (const struct loop *, FILE *, extern int flow_loop_scan (struct loop *, int); extern void flow_loop_free (struct loop *); void mark_irreducible_loops (struct loops *); +void mark_single_exit_loops (struct loops *); extern void create_loop_notes (void); /* Loop data structure manipulation/querying. */ @@ -268,6 +274,7 @@ extern bool flow_loop_nested_p (const struct loop *, const struct loop *); extern bool flow_bb_inside_loop_p (const struct loop *, const basic_block); extern struct loop * find_common_loop (struct loop *, struct loop *); struct loop *superloop_at_depth (struct loop *, unsigned); +extern unsigned tree_num_loop_insns (struct loop *); extern int num_loop_insns (struct loop *); extern int average_num_loop_insns (struct loop *); extern unsigned get_loop_level (const struct loop *); |