From ac3addaf3baa1e7baf4675aa60b087189b0abb86 Mon Sep 17 00:00:00 2001 From: Johannes Spallek Date: Mon, 26 Jun 2006 13:35:10 +0000 Subject: [PATCH] Added be_ifg_check_sorted_to_file(). --- ir/be/beifg.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++ ir/be/beifg.h | 1 + 2 files changed, 60 insertions(+) diff --git a/ir/be/beifg.c b/ir/be/beifg.c index 75e34055d..4ce136dbb 100644 --- a/ir/be/beifg.c +++ b/ir/be/beifg.c @@ -334,6 +334,65 @@ void be_ifg_check_sorted(const be_ifg_t *ifg) } +void be_ifg_check_sorted_to_file(const be_ifg_t *ifg, FILE *f) +{ + void *iter1 = be_ifg_nodes_iter_alloca(ifg); + void *iter2 = be_ifg_neighbours_iter_alloca(ifg); + + ir_node *n, *m; + const int node_count = be_ifg_check_get_node_count(ifg); + int neighbours_count = 0; + int i = 0; + + ir_node **all_nodes = xmalloc(node_count * sizeof(all_nodes[0])); + + be_ifg_foreach_node(ifg, iter1, n) + { + if(!node_is_in_irgs_storage(ifg->env->irg, n)) + { + ir_fprintf (f,"+%F is in ifg but not in the current irg!",n); + assert (node_is_in_irgs_storage(ifg->env->irg, n)); + } + + all_nodes[i] = n; + i++; + } + + qsort(all_nodes, node_count, sizeof(all_nodes[0]), be_ifg_check_cmp_nodes); + + for (i = 0; i < node_count; i++) + { + ir_node **neighbours = xmalloc(node_count * sizeof(neighbours[0])); + int j = 0; + int k = 0; + int degree = 0; + + degree = be_ifg_degree(ifg, all_nodes[i]); + + be_ifg_foreach_neighbour(ifg, iter2, all_nodes[i], m) + { + neighbours[j] = m; + j++; + } + + qsort(neighbours, j, sizeof(neighbours[0]), be_ifg_check_cmp_nodes); + + ir_fprintf (f,"%d. %+F's neighbours(%d): ", i+1, all_nodes[i], degree); + + for(k = 0; k < j; k++) + { + ir_fprintf (f,"%+F, ", neighbours[k]); + } + + ir_fprintf (f,"\n"); + + free(neighbours); + } + + free(all_nodes); + +} + void be_ifg_check_performance(be_chordal_env_t *chordal_env) { int tests = BE_CH_PERFORMANCETEST_COUNT; diff --git a/ir/be/beifg.h b/ir/be/beifg.h index ac112140d..0f9be1a08 100644 --- a/ir/be/beifg.h +++ b/ir/be/beifg.h @@ -74,6 +74,7 @@ typedef struct _be_ifg_dump_dot_cb_t { void be_ifg_dump_dot(be_ifg_t *ifg, ir_graph *irg, FILE *file, const be_ifg_dump_dot_cb_t *cb, void *self); void be_ifg_check_sorted(const be_ifg_t *ifg); +void be_ifg_check_sorted_to_file(const be_ifg_t *ifg, FILE *f); void be_ifg_check_performance(be_chordal_env_t *chordal_env); -- 2.20.1