X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeflags.c;h=0a3871a03520a54fcd8ff139c32c010e0367b636;hb=51d5090095b2f4f2285ff1b7ccd13c72a7b5d9d3;hp=af2525c57c52882e29f32415c2eeb72573d49115;hpb=e5aba28dc0a0df8f99b7de5e4bb6ac113bd402b5;p=libfirm diff --git a/ir/be/beflags.c b/ir/be/beflags.c index af2525c57..0a3871a03 100644 --- a/ir/be/beflags.c +++ b/ir/be/beflags.c @@ -46,10 +46,11 @@ #include "error.h" #include "beflags.h" -#include "bearch_t.h" -#include "beirg_t.h" -#include "besched_t.h" -#include "benode_t.h" +#include "bearch.h" +#include "beirg.h" +#include "besched.h" +#include "benode.h" +#include "belive.h" static const arch_register_class_t *flag_class = NULL; static const arch_register_t *flags_reg = NULL; @@ -91,15 +92,15 @@ static int can_move(ir_node *node, ir_node *after) assert(get_irn_n_edges_kind(out, EDGE_KIND_DEP) == 0); foreach_out_edge(out, edge2) { ir_node *out2 = get_edge_src_irn(edge2); - /* phi represents a usage at block end */ - if(is_Phi(out2)) + /* Phi or End represents a usage at block end. */ + if(is_Phi(out2) || is_End(out2)) continue; if(is_Sync(out2)) { const ir_edge_t *edge3; foreach_out_edge(out2, edge3) { ir_node *out3 = get_edge_src_irn(edge3); - /* phi represents a usage at block end */ - if(is_Phi(out3)) + /* Phi or End represents a usage at block end. */ + if(is_Phi(out3) || is_End(out3)) continue; assert(!is_Sync(out3)); if(sched_get_time_step(out3) <= sched_get_time_step(after)) { @@ -146,8 +147,7 @@ static void rematerialize_or_move(ir_node *flags_needed, ir_node *node, if(get_irn_mode(copy) == mode_T) { ir_node *block = get_nodes_block(copy); ir_mode *mode = flag_class->mode; - value = new_rd_Proj(NULL, current_ir_graph, block, - copy, mode, pn); + value = new_rd_Proj(NULL, block, copy, mode, pn); } else { value = copy; } @@ -173,8 +173,10 @@ static void rematerialize_or_move(ir_node *flags_needed, ir_node *node, get_nodes_block(node) != get_nodes_block(flags_needed)) { int i; - for (i = get_irn_arity(copy) - 1; i >= 0; --i) { - be_liveness_update(lv, get_irn_n(copy, i)); + if (lv != NULL) { + for (i = get_irn_arity(copy) - 1; i >= 0; --i) { + be_liveness_update(lv, get_irn_n(copy, i)); + } } } }