X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeutil.c;h=2e884d0c7aa7c700fd71ddd22cc3d0aced83fec8;hb=5d6cfd12693c34b702aab148038ebb562f2695f9;hp=4129bde7476120752e063e2074e9f94d532535c0;hpb=d2c1b0191844c3c23731158a153838d570dcd65a;p=libfirm diff --git a/ir/be/beutil.c b/ir/be/beutil.c index 4129bde74..2e884d0c7 100644 --- a/ir/be/beutil.c +++ b/ir/be/beutil.c @@ -117,9 +117,7 @@ void be_dump(ir_graph *irg, const char *suffix, void (*dumper)(ir_graph *, const void be_clear_links(ir_graph *irg) { - ir_reserve_resources(irg, IR_RESOURCE_IRN_LINK); irg_walk_graph(irg, firm_clear_link, NULL, NULL); - ir_free_resources(irg, IR_RESOURCE_IRN_LINK); } static void count_num_reachable_nodes(ir_node *irn, void *env) @@ -165,3 +163,25 @@ FILE *be_ffopen(const char *base, const char *ext, const char *mode) { } return out; } + +static void add_to_postorder(ir_node *block, void *data) +{ + ir_node ***list = (ir_node***) data; + ARR_APP1(ir_node*, *list, block); +} + +ir_node **be_get_cfgpostorder(ir_graph *irg) +{ + ir_node **list = NEW_ARR_F(ir_node*, 0); + ir_node *end_block = get_irg_end_block(irg); + + /* end block may be unreachable in case of endless loops */ + if (get_Block_n_cfgpreds(end_block) == 0) + ARR_APP1(ir_node*, list, end_block); + + /* walk blocks */ + irg_block_edges_walk(get_irg_start_block(irg), NULL, add_to_postorder, + &list); + + return list; +}