Commit 0c8efed8 by Sebastian Pop Committed by Sebastian Pop

tree-scalar-evolution.c (number_of_iterations_for_all_loops): Replace…

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
parent 58a6ef4b
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> 2007-12-15 Bernhard Fischer <aldot@gcc.gnu.org>
* tree-flow-inline.h.c (next_readonly_imm_use): Fix typo in comment. * tree-flow-inline.h.c (next_readonly_imm_use): Fix typo in comment.
...@@ -6188,12 +6188,6 @@ debug_function (tree fn, int flags) ...@@ -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. */ /* Print on FILE the indexes for the predecessors of basic_block BB. */
static void static void
...@@ -6219,11 +6213,42 @@ print_succ_bbs (FILE *file, basic_block bb) ...@@ -6219,11 +6213,42 @@ print_succ_bbs (FILE *file, basic_block bb)
fprintf (file, "bb_%d ", e->dest->index); 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 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; char *s_indent;
basic_block bb; basic_block bb;
...@@ -6235,55 +6260,90 @@ print_loop (FILE *file, struct loop *loop, int indent) ...@@ -6235,55 +6260,90 @@ print_loop (FILE *file, struct loop *loop, int indent)
memset ((void *) s_indent, ' ', (size_t) indent); memset ((void *) s_indent, ' ', (size_t) indent);
s_indent[indent] = '\0'; s_indent[indent] = '\0';
/* Print the loop's header. */ /* Print loop's header. */
fprintf (file, "%sloop_%d\n", s_indent, loop->num); 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. */ if (loop->any_upper_bound)
fprintf (file, "%s{\n", s_indent); {
FOR_EACH_BB (bb) fprintf (file, ", upper_bound = ");
if (bb->loop_father == loop) dump_double_int (file, loop->nb_iterations_upper_bound, true);
{ }
/* 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);
}
print_loop (file, loop->inner, indent + 2); if (loop->any_estimate)
fprintf (file, "%s}\n", s_indent); {
print_loop (file, loop->next, indent); 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 /* Follow a CFG edge from the entry point of the program, and on entry
of a loop, pretty print the loop structure on FILE. */ of a loop, pretty print the loop structure on FILE. */
void void
print_loop_ir (FILE *file) print_loops (FILE *file, int verbosity)
{ {
basic_block bb; basic_block bb;
bb = BASIC_BLOCK (NUM_FIXED_BLOCKS); bb = BASIC_BLOCK (NUM_FIXED_BLOCKS);
if (bb && bb->loop_father) 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 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 /* Return true if BB ends with a call, possibly followed by some
instructions that must stay with the call. Return false, instructions that must stay with the call. Return false,
......
...@@ -741,9 +741,13 @@ extern basic_block debug_tree_bb_n (int); ...@@ -741,9 +741,13 @@ extern basic_block debug_tree_bb_n (int);
extern void dump_tree_cfg (FILE *, int); extern void dump_tree_cfg (FILE *, int);
extern void debug_tree_cfg (int); extern void debug_tree_cfg (int);
extern void dump_cfg_stats (FILE *); extern void dump_cfg_stats (FILE *);
extern void dot_cfg (void);
extern void debug_cfg_stats (void); extern void debug_cfg_stats (void);
extern void debug_loop_ir (void); extern void debug_loops (int);
extern void print_loop_ir (FILE *); 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 cleanup_dead_labels (void);
extern void group_case_labels (void); extern void group_case_labels (void);
extern tree first_stmt (basic_block); extern tree first_stmt (basic_block);
......
...@@ -2376,7 +2376,7 @@ number_of_iterations_for_all_loops (VEC(tree,heap) **exit_conditions) ...@@ -2376,7 +2376,7 @@ number_of_iterations_for_all_loops (VEC(tree,heap) **exit_conditions)
fprintf (dump_file, "-----------------------------------------\n"); fprintf (dump_file, "-----------------------------------------\n");
fprintf (dump_file, ")\n\n"); fprintf (dump_file, ")\n\n");
print_loop_ir (dump_file); print_loops (dump_file, 3);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment