From e824098ad68e42ccf587aa5ac0ce07280bfd0626 Mon Sep 17 00:00:00 2001 From: Sebastian Hack Date: Sun, 28 Aug 2005 12:38:47 +0000 Subject: [PATCH] Added dominance checker --- ir/be/belive.c | 26 ++++++++++++++++++++++++++ ir/be/belive.h | 5 +++++ 2 files changed, 31 insertions(+) diff --git a/ir/be/belive.c b/ir/be/belive.c index 98d98f301..368d8f1fd 100644 --- a/ir/be/belive.c +++ b/ir/be/belive.c @@ -190,3 +190,29 @@ void be_liveness_dump(ir_graph *irg, FILE *f) { irg_block_walk_graph(irg, dump_liveness_walker, NULL, f); } + +static void dom_check(ir_node *irn, void *data) +{ + if(!is_block(irn)) { + int i, n; + ir_node *bl = get_nodes_block(irn); + + for(i = 0, n = get_irn_arity(irn); i < n; ++i) { + ir_node *op = get_irn_n(irn, i); + ir_node *def_bl = get_nodes_block(op); + ir_node *use_bl = bl; + + if(is_Phi(irn)) + use_bl = get_Block_cfgpred_block(bl, i); + + if(!block_dominates(def_bl, use_bl)) + ir_fprintf(stderr, "In %+F(%d:%+Fr): %+F must dominate %+F\n", + irn, i, op, def_bl, use_bl); + } + } +} + +void be_check_dominance(ir_graph *irg) +{ + irg_walk_graph(irg, dom_check, NULL, NULL); +} diff --git a/ir/be/belive.h b/ir/be/belive.h index cf9c6fb1f..c1e58fa0d 100644 --- a/ir/be/belive.h +++ b/ir/be/belive.h @@ -46,5 +46,10 @@ int (is_live_out)(const ir_node *block, const ir_node *irn); */ int (is_live_end)(const ir_node *block, const ir_node *irn); +/** + * Check, if the SSA dominance property is fulfilled. + * @param irg The graph. + */ +void be_check_dominance(ir_graph *irg); #endif -- 2.20.1