X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ir%2Fbe%2Fbeschednormal.c;h=aa8ad83f8b2b864e1f9decef039d69340b40e3da;hb=38c17099b003f4b0ba5c598b2be3d5a431baf022;hp=0fc950e7504d3ca685c2fb9f4eedc2785b9778b7;hpb=17581259db083ecee8d74088e2637d6050402a65;p=libfirm diff --git a/ir/be/beschednormal.c b/ir/be/beschednormal.c index 0fc950e75..aa8ad83f8 100644 --- a/ir/be/beschednormal.c +++ b/ir/be/beschednormal.c @@ -20,7 +20,7 @@ /** * @brief Use the strong normal form theorem (though it does not hold) * @author Christoph Mallon - * @version $Id: beschedrand.c 14604 2007-06-18 14:07:07Z matze $ + * @version $Id$ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -34,6 +34,7 @@ #include "beutil.h" #include "irtools.h" #include "irgwalk.h" +#include "benode_t.h" // XXX there is no one time init for schedulers @@ -105,6 +106,10 @@ static int count_result(const ir_node* irn) } +/* TODO high cost for store trees + */ + + static int normal_tree_cost(ir_node* irn) { flag_and_cost* fc = get_irn_link(irn); @@ -129,7 +134,7 @@ static int normal_tree_cost(ir_node* irn) ir_node* pred = get_irn_n(irn, i); int cost; - if (is_Phi(irn) || get_irn_mode(pred) == mode_M) { + if (is_Phi(irn) || get_irn_mode(pred) == mode_M || is_Block(pred)) { cost = 0; } else if (get_nodes_block(pred) != block) { cost = 1; @@ -238,6 +243,8 @@ static ir_node** sched_node(ir_node** sched, ir_node* irn) if (irn_visited(irn)) return sched; + if (is_End(irn)) return sched; + if (!is_Phi(irn)) { for (i = 0; i < arity; ++i) { ir_node* pred = irns[i].irn;