ir_node *value = vals[i];
ir_node *value_block = blocks[i];
- assert(get_irn_mode(value) == mode);
+ assert(get_irn_mode(value) == mode || is_Bad(value));
set_irn_link(value_block, value);
mark_irn_visited(value_block);
changed |= rerun;
} while (rerun);
+ clear_using_irn_visited(irg);
+ clear_using_irn_link(irg);
+
if (changed) {
/* control flow changed, some blocks may become dead */
set_irg_outs_inconsistent(irg);
set_irg_doms_inconsistent(irg);
set_irg_extblk_inconsistent(irg);
set_irg_loopinfo_inconsistent(irg);
+
+ /* Dead code might be created. Optimize it away as it is dangerous
+ * to call optimize_df() an dead code. */
+ optimize_cf(irg);
}
- clear_using_irn_visited(irg);
- clear_using_irn_link(irg);
}