From: Sebastian Hack Date: Fri, 3 Sep 2004 09:47:22 +0000 (+0000) Subject: - Fixed block dumper semantics X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=ee1890dea4f8d9627c0f761ded67bbc93e332b85;p=libfirm - Fixed block dumper semantics - Fixed handling of PREFIX/BLOCK_AS_IRN [r3823] --- diff --git a/ir/common/firmwalk.c b/ir/common/firmwalk.c index efb05ad00..a0d7ee7b5 100644 --- a/ir/common/firmwalk.c +++ b/ir/common/firmwalk.c @@ -469,7 +469,7 @@ void firm_walk(firm_walk_interface *wif) /* call block as prefix ir node */ if ((wif->do_node) && - (wif->flags & FW_DUMP_BLOCK_AS_IRN & !FW_DUMP_IRN_IN_PREFIX)) + (wif->flags & (FW_DUMP_BLOCK_AS_IRN | FW_DUMP_IRN_IN_PREFIX))) wif->do_node(block, wif->env); /* do ir nodes in prefix or postfix order? */ @@ -490,18 +490,28 @@ void firm_walk(firm_walk_interface *wif) } /* call block as postfix ir node */ if ((wif->do_node) && - (wif->flags & (FW_DUMP_BLOCK_AS_IRN | FW_DUMP_IRN_IN_PREFIX))) + ((wif->flags & (FW_DUMP_BLOCK_AS_IRN | FW_DUMP_IRN_IN_PREFIX)) + == FW_DUMP_BLOCK_AS_IRN)) wif->do_node(block, wif->env); /* wall over all block's ir nodes nested end =============== */ - if (wif->do_block_finalize) wif->do_block_finalize(current_ir_graph, wif->env); + if(wif->do_block_post) + wif->do_block_post(block, wif->env); + } /* for each block */ + if (wif->do_block_finalize) + wif->do_block_finalize(current_ir_graph, wif->env); + /* walk over all irg's block nested end ====================== */ + if(wif->do_graph_post) + wif->do_graph_post(current_ir_graph, wif->env); } /* for each ir graph irg */ - if (wif->do_graph_finalize) wif->do_graph_finalize(wif->env); + + if(wif->do_graph_finalize) + wif->do_graph_finalize(wif->env); /** ### ToDo: Dump const_code_irg ?? No! Dump const code with entities, types etc. */ diff --git a/ir/common/firmwalk.h b/ir/common/firmwalk.h index 3837849b8..cfab51f07 100644 --- a/ir/common/firmwalk.h +++ b/ir/common/firmwalk.h @@ -146,8 +146,9 @@ typedef struct * * The firm walker dump a graph with its blocks and nodes nested. * Fist do_graph_init will be called (if defined). For each graph - * do_graph will be call in a loop. After dumped all graphs, - * do_graph_finalize will be called. + * do_graph will be call in a loop. + * After all blocks in a graph are dumped, do_graph_post() is called. + * After dumped all graphs, do_graph_finalize will be called. * * Within do_graph each block will be dumped. First do_block_init, * for each block do_block and after all dumped blocks @@ -159,6 +160,7 @@ typedef struct * walking flag, a prefix order is also possible. */ firm_walk_init_func *do_graph_init; firm_walk_graph_func *do_graph; + firm_walk_graph_func *do_graph_post; firm_walk_finalize_func *do_graph_finalize; /* @{ */ @@ -167,6 +169,7 @@ typedef struct * @see do_graph */ firm_walk_block_init_func *do_block_init; firm_walk_block_func *do_block; + firm_walk_block_func *do_block_post; firm_walk_block_finalize_func *do_block_finalize; /* @} */