aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRevital Eres <eres@il.ibm.com>2007-07-03 10:27:19 +0000
committerRevital Eres <revitale@gcc.gnu.org>2007-07-03 10:27:19 +0000
commit8cec1624c5c14ad76268cb1c21fa2c5e770bbeb7 (patch)
treea2979cd31d86c0bfd58e49b08c1f11996c3a7605
parentbb9e683e797818425ed3c7bf372455e6aa70c021 (diff)
downloadgcc-8cec1624c5c14ad76268cb1c21fa2c5e770bbeb7.zip
gcc-8cec1624c5c14ad76268cb1c21fa2c5e770bbeb7.tar.gz
gcc-8cec1624c5c14ad76268cb1c21fa2c5e770bbeb7.tar.bz2
modulo-sched: print sccs and check it
From-SVN: r126249
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/ddg.c48
-rw-r--r--gcc/ddg.h1
-rw-r--r--gcc/modulo-sched.c3
4 files changed, 60 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 35f68c1..2b9b245 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2007-07-03 Revital Eres <eres@il.ibm.com>
+
+ * ddg.c (print_sccs): New function.
+ (check_sccs): New function.
+ (create_ddg_all_sccs): Use it.
+ * ddg.h (print_sccs): Declare.
+ * modulo-sched.c (sms_order_nodes): Call print_sccs.
+
2007-07-03 Uros Bizjak <ubizjak@gmail.com>
* targhooks.h (default_mode_for_suffix): New function declaration.
diff --git a/gcc/ddg.c b/gcc/ddg.c
index 882cc81..9822806 100644
--- a/gcc/ddg.c
+++ b/gcc/ddg.c
@@ -630,6 +630,30 @@ vcg_print_ddg (FILE *file, ddg_ptr g)
fprintf (file, "}\n");
}
+/* Dump the sccs in SCCS. */
+void
+print_sccs (FILE *file, ddg_all_sccs_ptr sccs, ddg_ptr g)
+{
+ unsigned int u = 0;
+ sbitmap_iterator sbi;
+ int i;
+
+ if (!file)
+ return;
+
+ fprintf (file, "\n;; Number of SCC nodes - %d\n", sccs->num_sccs);
+ for (i = 0; i < sccs->num_sccs; i++)
+ {
+ fprintf (file, "SCC number: %d\n", i);
+ EXECUTE_IF_SET_IN_SBITMAP (sccs->sccs[i]->nodes, 0, u, sbi)
+ {
+ fprintf (file, "insn num %d\n", u);
+ print_rtl_single (file, g->nodes[u].insn);
+ }
+ }
+ fprintf (file, "\n");
+}
+
/* Create an edge and initialize it with given values. */
static ddg_edge_ptr
create_ddg_edge (ddg_node_ptr src, ddg_node_ptr dest,
@@ -846,6 +870,27 @@ order_sccs (ddg_all_sccs_ptr g)
(int (*) (const void *, const void *)) compare_sccs);
}
+/* Check that every node in SCCS belongs to exactly one strongly connected
+ component and that no element of SCCS is empty. */
+static void
+check_sccs (ddg_all_sccs_ptr sccs, int num_nodes)
+{
+ int i = 0;
+ sbitmap tmp = sbitmap_alloc (num_nodes);
+
+ sbitmap_zero (tmp);
+ for (i = 0; i < sccs->num_sccs; i++)
+ {
+ gcc_assert (!sbitmap_empty_p (sccs->sccs[i]->nodes));
+ /* Verify that every node in sccs is in exactly one strongly
+ connected component. */
+ gcc_assert (!sbitmap_any_common_bits (tmp, sccs->sccs[i]->nodes));
+ sbitmap_a_or_b (tmp, tmp, sccs->sccs[i]->nodes);
+ }
+ sbitmap_free (tmp);
+}
+
+
/* Perform the Strongly Connected Components decomposing algorithm on the
DDG and return DDG_ALL_SCCS structure that contains them. */
ddg_all_sccs_ptr
@@ -890,6 +935,9 @@ create_ddg_all_sccs (ddg_ptr g)
sbitmap_free (from);
sbitmap_free (to);
sbitmap_free (scc_nodes);
+#ifdef ENABLE_CHECKING
+ check_sccs (sccs, num_nodes);
+#endif
return sccs;
}
diff --git a/gcc/ddg.h b/gcc/ddg.h
index ef293b0..f82599e 100644
--- a/gcc/ddg.h
+++ b/gcc/ddg.h
@@ -171,6 +171,7 @@ void free_ddg (ddg_ptr);
void print_ddg (FILE *, ddg_ptr);
void vcg_print_ddg (FILE *, ddg_ptr);
void print_ddg_edge (FILE *, ddg_edge_ptr);
+void print_sccs (FILE *, ddg_all_sccs_ptr, ddg_ptr);
ddg_node_ptr get_node_of_insn (ddg_ptr, rtx);
diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c
index 6664e32..bf9bc9b 100644
--- a/gcc/modulo-sched.c
+++ b/gcc/modulo-sched.c
@@ -1648,6 +1648,9 @@ sms_order_nodes (ddg_ptr g, int mii, int * node_order)
nopa nops = calculate_order_params (g, mii);
+ if (dump_file)
+ print_sccs (dump_file, sccs, g);
+
order_nodes_of_sccs (sccs, node_order);
if (sccs->num_sccs > 0)