This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PATCH: Add dumping of dependency information to sched-ebb.c
- From: Maxim Kuvyrkov <mkuvyrkov at ispras dot ru>
- To: Vladimir Makarov <vmakarov at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Fri, 06 Apr 2007 12:15:31 +0400
- Subject: PATCH: Add dumping of dependency information to sched-ebb.c
Hi!
The attached patch adds dumping of dependency information to sched-ebb
pass. This dumping essentially helps in debugging of sched-ebb I
recently was doing.
Bootstrapped and regtested on {x86-64, ia64}-linux-gnu.
OK for the trunk?
Thanks,
Maxim
2007-04-06 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
* sched-ebb.c (debug_ebb_dependencies): New static function.
(init_ready_list): Use it.
* sched-rgn.c (debug_dependencies): Split into debug_dependencies
with changed signature and debug_rgn_dependencies.
(debug_rgn_dependencies): New static function.
(init_ready_list): Use it.
* sched-int.h (debug_dependencies): Declare.
--- sched-ebb.c (/mirror/endeed/trunk/gcc) (revision 1034)
+++ sched-ebb.c (/mirror/endeed/debug-dep/gcc) (revision 1034)
@@ -86,6 +86,19 @@ schedule_more_p (void)
return sched_n_insns < n_insns;
}
+/* Print dependency information about ebb between HEAD and TAIL. */
+static void
+debug_ebb_dependencies (rtx head, rtx tail)
+{
+ fprintf (sched_dump,
+ ";; --------------- forward dependences: ------------ \n");
+
+ fprintf (sched_dump, "\n;; --- EBB Dependences --- from bb%d to bb%d \n",
+ BLOCK_NUM (head), BLOCK_NUM (tail));
+
+ debug_dependencies (head, tail);
+}
+
/* Add all insns that are initially ready to the ready list READY. Called
once before scheduling a set of insns. */
@@ -99,11 +112,9 @@ init_ready_list (void)
sched_n_insns = 0;
-#if 0
/* Print debugging information. */
if (sched_verbose >= 5)
- debug_dependencies ();
-#endif
+ debug_ebb_dependencies (NEXT_INSN (prev_head), PREV_INSN (next_tail));
/* Initialize ready list with all 'ready' insns in target block.
Count number of insns in the target block being scheduled. */
--- sched-int.h (/mirror/endeed/trunk/gcc) (revision 1034)
+++ sched-int.h (/mirror/endeed/debug-dep/gcc) (revision 1034)
@@ -872,4 +872,7 @@ extern rtx bb_note (basic_block);
extern void check_reg_live (bool);
#endif
+/* Functions in sched-rgn.c. */
+extern void debug_dependencies (rtx, rtx);
+
#endif /* GCC_SCHED_INT_H */
--- sched-rgn.c (/mirror/endeed/trunk/gcc) (revision 1034)
+++ sched-rgn.c (/mirror/endeed/debug-dep/gcc) (revision 1034)
@@ -288,7 +288,6 @@ static bool sets_likely_spilled (rtx);
static void sets_likely_spilled_1 (rtx, rtx, void *);
static void add_branch_dependences (rtx, rtx);
static void compute_block_backward_dependences (int);
-void debug_dependencies (void);
static void init_regions (void);
static void schedule_region (int);
@@ -1946,6 +1945,8 @@ static void check_dead_notes1 (int, sbit
static int region_head_or_leaf_p (basic_block, int);
#endif
+static void debug_rgn_dependencies (int);
+
/* Return nonzero if there are more insns that should be scheduled. */
static int
@@ -1971,7 +1972,7 @@ init_ready_list (void)
/* Print debugging information. */
if (sched_verbose >= 5)
- debug_dependencies ();
+ debug_rgn_dependencies (target_bb);
/* Prepare current target block info. */
if (current_nr_blocks > 1)
@@ -2546,26 +2547,41 @@ free_pending_lists (void)
}
}
-/* Print dependences for debugging, callable from debugger. */
+/* Print dependences for debugging starting from FROM_BB.
+ Callable from debugger. */
void
-debug_dependencies (void)
+debug_rgn_dependencies (int from_bb)
{
int bb;
- fprintf (sched_dump, ";; --------------- forward dependences: ------------ \n");
- for (bb = 0; bb < current_nr_blocks; bb++)
+ fprintf (sched_dump,
+ ";; --------------- forward dependences: ------------ \n");
+
+ for (bb = from_bb; bb < current_nr_blocks; bb++)
{
rtx head, tail;
- rtx next_tail;
- rtx insn;
gcc_assert (EBB_FIRST_BB (bb) == EBB_LAST_BB (bb));
get_ebb_head_tail (EBB_FIRST_BB (bb), EBB_LAST_BB (bb), &head, &tail);
- next_tail = NEXT_INSN (tail);
fprintf (sched_dump, "\n;; --- Region Dependences --- b %d bb %d \n",
BB_TO_BLOCK (bb), bb);
+ debug_dependencies (head, tail);
+ }
+}
+
+/* Print dependencies information for instructions between HEAD and TAIL.
+ ??? This function would probably fit best in haifa-sched.c. */
+void debug_dependencies (rtx head, rtx tail)
+{
+ rtx next_tail = NEXT_INSN (tail);
+
+ /* Use 'if (true)' to preserve indentation. */
+ if (true)
+ {
+ rtx insn;
+
fprintf (sched_dump, ";; %7s%6s%6s%6s%6s%6s%14s\n",
"insn", "code", "bb", "dep", "prio", "cost",
"reservation");
@@ -2597,7 +2613,7 @@ debug_dependencies (void)
(SCHED_GROUP_P (insn) ? "+" : " "),
INSN_UID (insn),
INSN_CODE (insn),
- INSN_BB (insn),
+ BLOCK_NUM (insn),
INSN_DEP_COUNT (insn),
INSN_PRIORITY (insn),
insn_cost (insn));