X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeutil.c;h=2e884d0c7aa7c700fd71ddd22cc3d0aced83fec8;hb=a8d6e45f13a40f6c9269608bf937e3e641d0b715;hp=1637c4d2115408a5c59aa9f5db55959aff43aa2f;hpb=0dad8bfcc985ba41f200b5db21d8f1546ae901c2;p=libfirm diff --git a/ir/be/beutil.c b/ir/be/beutil.c index 1637c4d21..2e884d0c7 100644 --- a/ir/be/beutil.c +++ b/ir/be/beutil.c @@ -41,8 +41,8 @@ #include "iredges.h" #include "beutil.h" -#include "besched_t.h" -#include "bearch_t.h" +#include "besched.h" +#include "bearch.h" /* Get an always empty set. */ pset *be_empty_set(void) @@ -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; +}