static const arch_register_class_t *flag_class = NULL;
static const arch_register_t *flags_reg = NULL;
static func_rematerialize remat = NULL;
+static int changed;
static ir_node *default_remat(ir_node *node, ir_node *after)
{
return;
}
- copy = remat(flags_needed, node);
+ changed = 1;
+ copy = remat(flags_needed, node);
if(get_irn_mode(copy) == mode_T) {
ir_node *block = get_nodes_block(copy);
flag_class = flag_cls;
flags_reg = & flag_class->regs[0];
remat = remat_func;
+ changed = 0;
if(remat == NULL)
remat = &default_remat;
set_using_irn_link(irg);
irg_block_walk_graph(irg, fix_flags_walker, NULL, NULL);
clear_using_irn_link(irg);
+
+ if(changed) {
+ be_remove_dead_nodes_from_schedule(birg);
+ }
}