- fixed warnings
[libfirm] / ir / opt / condeval.c
index 4f683d1..093a522 100644 (file)
@@ -144,7 +144,7 @@ static void construct_ssa(ir_node * const *blocks, ir_node * const *vals, int n_
                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);
@@ -696,14 +696,19 @@ void opt_cond_eval(ir_graph* irg)
                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);
 }