made code C89 compliant (changed unnamed union in attributes)
[libfirm] / ir / be / bespillbelady.c
index c5a021e..237ef77 100644 (file)
@@ -257,10 +257,12 @@ static int is_mem_phi(const ir_node *irn, void *data) {
 static INLINE unsigned get_distance(belady_env_t *bel, const ir_node *from, unsigned from_step, const ir_node *def, int skip_from_uses)
 {
        arch_irn_flags_t fl = arch_irn_get_flags(bel->arch, def);
-       if((fl & (arch_irn_flags_ignore | arch_irn_flags_dont_spill)) != 0)
+       unsigned dist = be_get_next_use(bel->uses, from, from_step, def, skip_from_uses);
+
+       if(!USES_IS_INIFINITE(dist) && (fl & (arch_irn_flags_ignore | arch_irn_flags_dont_spill)) != 0)
                return 0;
-       else
-               return be_get_next_use(bel->uses, from, from_step, def, skip_from_uses);
+
+       return dist;
 }
 
 /**
@@ -612,17 +614,20 @@ static void remove_unused_reloads(ir_graph *irg, belady_env_t *bel) {
                ir_node *spill;
                DBG((dbg, DBG_SPILL, "Removing %+F before %+F in %+F\n", irn, sched_next(irn), get_nodes_block(irn)));
 
-               spill = get_irn_n(irn, be_pos_Reload_mem);
+               if (be_is_Reload(irn))
+                       spill = get_irn_n(irn, be_pos_Reload_mem);
 
                /* remove reload */
                set_irn_n(irn, 0, new_Bad());
                sched_remove(irn);
 
-               /* if spill not used anymore, remove it too
-                * test of regclass is necessary since spill may be a phi-M */
-               if (get_irn_n_edges(spill) == 0 && bel->cls == arch_get_irn_reg_class(bel->arch, spill, -1)) {
-                       set_irn_n(spill, 0, new_Bad());
-                       sched_remove(spill);
+               if (be_is_Reload(irn)) {
+                       /* if spill not used anymore, remove it too
+                        * test of regclass is necessary since spill may be a phi-M */
+                       if (get_irn_n_edges(spill) == 0 && bel->cls == arch_get_irn_reg_class(bel->arch, spill, -1)) {
+                               set_irn_n(spill, 0, new_Bad());
+                               sched_remove(spill);
+                       }
                }
        }
 }
@@ -630,7 +635,7 @@ static void remove_unused_reloads(ir_graph *irg, belady_env_t *bel) {
 void be_spill_belady(const be_chordal_env_t *chordal_env) {
        belady_env_t bel;
 
-       dbg = firm_dbg_register("ir.be.spillbelady");
+       FIRM_DBG_REGISTER(dbg, "ir.be.spillbelady");
 
        /* init belady env */
        obstack_init(&bel.ob);