diff options
author | Sebastian Pop <sebastian.pop@amd.com> | 2007-12-15 18:35:23 +0000 |
---|---|---|
committer | Sebastian Pop <spop@gcc.gnu.org> | 2007-12-15 18:35:23 +0000 |
commit | 0c8efed8c462fdb4249a38fe27dadeb5acbbe0d0 (patch) | |
tree | b8bbfadbc47a89fd0c0d2df7f1e97dd8331d1387 | |
parent | 58a6ef4b0981e35f8faa2363bbc8a3790c1381b0 (diff) | |
download | gcc-0c8efed8c462fdb4249a38fe27dadeb5acbbe0d0.zip gcc-0c8efed8c462fdb4249a38fe27dadeb5acbbe0d0.tar.gz gcc-0c8efed8c462fdb4249a38fe27dadeb5acbbe0d0.tar.bz2 |
tree-scalar-evolution.c (number_of_iterations_for_all_loops): Replace print_loop_ir with print_loops.
2007-12-15 Sebastian Pop <sebastian.pop@amd.com>
* tree-scalar-evolution.c (number_of_iterations_for_all_loops): Replace
print_loop_ir with print_loops.
* tree-flow.h (dot_cfg, debug_loops, debug_loop, debug_loop_num,
print_loops, print_loops_bb): Declare.
* tree-cfg.c (print_loops_bb): New.
(print_loop): Print header, latch, bounds, estimation of iterations.
(print_loop_and_siblings): New.
(print_loop_ir): Renamed print_loops.
(debug_loop_ir): Renamed debug_loops.
(debug_loop, debug_loop_num): New.
From-SVN: r130957
-rw-r--r-- | gcc/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 130 | ||||
-rw-r--r-- | gcc/tree-flow.h | 8 | ||||
-rw-r--r-- | gcc/tree-scalar-evolution.c | 2 |
4 files changed, 115 insertions, 38 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 51ab60e..3921ab3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2007-12-15 Sebastian Pop <sebastian.pop@amd.com> + + * tree-scalar-evolution.c (number_of_iterations_for_all_loops): Replace + print_loop_ir with print_loops. + * tree-flow.h (dot_cfg, debug_loops, debug_loop, debug_loop_num, + print_loops, print_loops_bb): Declare. + * tree-cfg.c (print_loops_bb): New. + (print_loop): Print header, latch, bounds, estimation of iterations. + (print_loop_and_siblings): New. + (print_loop_ir): Renamed print_loops. + (debug_loop_ir): Renamed debug_loops. + (debug_loop, debug_loop_num): New. + 2007-12-15 Bernhard Fischer <aldot@gcc.gnu.org> * tree-flow-inline.h.c (next_readonly_imm_use): Fix typo in comment. diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 6bf1f60..1606497 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -6188,12 +6188,6 @@ debug_function (tree fn, int flags) } -/* Pretty print of the loops intermediate representation. */ -static void print_loop (FILE *, struct loop *, int); -static void print_pred_bbs (FILE *, basic_block bb); -static void print_succ_bbs (FILE *, basic_block bb); - - /* Print on FILE the indexes for the predecessors of basic_block BB. */ static void @@ -6219,11 +6213,42 @@ print_succ_bbs (FILE *file, basic_block bb) fprintf (file, "bb_%d ", e->dest->index); } +/* Print to FILE the basic block BB following the VERBOSITY level. */ + +void +print_loops_bb (FILE *file, basic_block bb, int indent, int verbosity) +{ + char *s_indent = (char *) alloca ((size_t) indent + 1); + memset ((void *) s_indent, ' ', (size_t) indent); + s_indent[indent] = '\0'; + + /* Print basic_block's header. */ + if (verbosity >= 2) + { + fprintf (file, "%s bb_%d (preds = {", s_indent, bb->index); + print_pred_bbs (file, bb); + fprintf (file, "}, succs = {"); + print_succ_bbs (file, bb); + fprintf (file, "})\n"); + } + + /* Print basic_block's body. */ + if (verbosity >= 3) + { + fprintf (file, "%s {\n", s_indent); + tree_dump_bb (bb, file, indent + 4); + fprintf (file, "%s }\n", s_indent); + } +} + +static void print_loop_and_siblings (FILE *, struct loop *, int, int); -/* Pretty print LOOP on FILE, indented INDENT spaces. */ +/* Pretty print LOOP on FILE, indented INDENT spaces. Following + VERBOSITY level this outputs the contents of the loop, or just its + structure. */ static void -print_loop (FILE *file, struct loop *loop, int indent) +print_loop (FILE *file, struct loop *loop, int indent, int verbosity) { char *s_indent; basic_block bb; @@ -6235,55 +6260,90 @@ print_loop (FILE *file, struct loop *loop, int indent) memset ((void *) s_indent, ' ', (size_t) indent); s_indent[indent] = '\0'; - /* Print the loop's header. */ - fprintf (file, "%sloop_%d\n", s_indent, loop->num); + /* Print loop's header. */ + fprintf (file, "%sloop_%d (header = %d, latch = %d", s_indent, + loop->num, loop->header->index, loop->latch->index); + fprintf (file, ", niter = "); + print_generic_expr (file, loop->nb_iterations, 0); - /* Print the loop's body. */ - fprintf (file, "%s{\n", s_indent); - FOR_EACH_BB (bb) - if (bb->loop_father == loop) - { - /* Print the basic_block's header. */ - fprintf (file, "%s bb_%d (preds = {", s_indent, bb->index); - print_pred_bbs (file, bb); - fprintf (file, "}, succs = {"); - print_succ_bbs (file, bb); - fprintf (file, "})\n"); - - /* Print the basic_block's body. */ - fprintf (file, "%s {\n", s_indent); - tree_dump_bb (bb, file, indent + 4); - fprintf (file, "%s }\n", s_indent); - } + if (loop->any_upper_bound) + { + fprintf (file, ", upper_bound = "); + dump_double_int (file, loop->nb_iterations_upper_bound, true); + } - print_loop (file, loop->inner, indent + 2); - fprintf (file, "%s}\n", s_indent); - print_loop (file, loop->next, indent); + if (loop->any_estimate) + { + fprintf (file, ", estimate = "); + dump_double_int (file, loop->nb_iterations_estimate, true); + } + fprintf (file, ")\n"); + + /* Print loop's body. */ + if (verbosity >= 1) + { + fprintf (file, "%s{\n", s_indent); + FOR_EACH_BB (bb) + if (bb->loop_father == loop) + print_loops_bb (file, bb, indent, verbosity); + + print_loop_and_siblings (file, loop->inner, indent + 2, verbosity); + fprintf (file, "%s}\n", s_indent); + } } +/* Print the LOOP and its sibling loops on FILE, indented INDENT + spaces. Following VERBOSITY level this outputs the contents of the + loop, or just its structure. */ + +static void +print_loop_and_siblings (FILE *file, struct loop *loop, int indent, int verbosity) +{ + if (loop == NULL) + return; + + print_loop (file, loop, indent, verbosity); + print_loop_and_siblings (file, loop->next, indent, verbosity); +} /* Follow a CFG edge from the entry point of the program, and on entry of a loop, pretty print the loop structure on FILE. */ void -print_loop_ir (FILE *file) +print_loops (FILE *file, int verbosity) { basic_block bb; bb = BASIC_BLOCK (NUM_FIXED_BLOCKS); if (bb && bb->loop_father) - print_loop (file, bb->loop_father, 0); + print_loop_and_siblings (file, bb->loop_father, 0, verbosity); } -/* Debugging loops structure at tree level. */ +/* Debugging loops structure at tree level, at some VERBOSITY level. */ + +void +debug_loops (int verbosity) +{ + print_loops (stderr, verbosity); +} + +/* Print on stderr the code of LOOP, at some VERBOSITY level. */ void -debug_loop_ir (void) +debug_loop (struct loop *loop, int verbosity) { - print_loop_ir (stderr); + print_loop (stderr, loop, 0, verbosity); } +/* Print on stderr the code of loop number NUM, at some VERBOSITY + level. */ + +void +debug_loop_num (unsigned num, int verbosity) +{ + debug_loop (get_loop (num), verbosity); +} /* Return true if BB ends with a call, possibly followed by some instructions that must stay with the call. Return false, diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h index 6ab91a1..fae0404 100644 --- a/gcc/tree-flow.h +++ b/gcc/tree-flow.h @@ -741,9 +741,13 @@ extern basic_block debug_tree_bb_n (int); extern void dump_tree_cfg (FILE *, int); extern void debug_tree_cfg (int); extern void dump_cfg_stats (FILE *); +extern void dot_cfg (void); extern void debug_cfg_stats (void); -extern void debug_loop_ir (void); -extern void print_loop_ir (FILE *); +extern void debug_loops (int); +extern void debug_loop (struct loop *, int); +extern void debug_loop_num (unsigned, int); +extern void print_loops (FILE *, int); +extern void print_loops_bb (FILE *, basic_block, int, int); extern void cleanup_dead_labels (void); extern void group_case_labels (void); extern tree first_stmt (basic_block); diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index 262ec76..ad8f2f0 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -2376,7 +2376,7 @@ number_of_iterations_for_all_loops (VEC(tree,heap) **exit_conditions) fprintf (dump_file, "-----------------------------------------\n"); fprintf (dump_file, ")\n\n"); - print_loop_ir (dump_file); + print_loops (dump_file, 3); } } |