normalize_n_returns does produce unreachable code and invalidates other stuff
[libfirm] / ir / opt / return.c
index 10dd2c7..47713e1 100644 (file)
@@ -162,10 +162,8 @@ void normalize_one_return(ir_graph *irg)
         * a new Block was added, so dominator, outs and loop are inconsistent,
         * trouts and callee-state should be still valid
         */
-       set_irg_doms_inconsistent(irg);
-       set_irg_outs_inconsistent(irg);
+       clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
        set_irg_extblk_inconsistent(irg);
-       set_irg_loopinfo_inconsistent(irg);
 }
 
 /* Create a graph pass. */
@@ -340,7 +338,7 @@ void normalize_n_returns(ir_graph *irg)
                        }
 
                        /* remove the Jmp, we have placed a Return here */
-                       exchange(jmp, new_r_Bad(irg));
+                       exchange(jmp, new_r_Bad(irg, mode_X));
                }
 
                /*
@@ -353,7 +351,7 @@ void normalize_n_returns(ir_graph *irg)
                        n = get_End_n_keepalives(end);
                        for (i = 0; i < n; ++i) {
                                if (get_End_keepalive(end, i) == phiM) {
-                                       set_End_keepalive(end, i, new_r_Bad(irg));
+                                       set_End_keepalive(end, i, new_r_Bad(irg, mode_M));
                                        break;
                                }
                        }
@@ -378,10 +376,13 @@ void normalize_n_returns(ir_graph *irg)
         * Blocks become dead and new Returns were deleted, so dominator, outs and loop are inconsistent,
         * trouts and callee-state should be still valid
         */
-       set_irg_doms_inconsistent(irg);
+       clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+                          | IR_GRAPH_STATE_CONSISTENT_POSTDOMINANCE
+                          | IR_GRAPH_STATE_ONE_RETURN
+                          | IR_GRAPH_STATE_CONSISTENT_OUTS
+                          | IR_GRAPH_STATE_NO_UNREACHABLE_CODE
+                          | IR_GRAPH_STATE_NO_BADS);
        set_irg_extblk_inconsistent(irg);  /* may not be needed */
-       set_irg_outs_inconsistent(irg);
-       set_irg_loopinfo_inconsistent(irg);
 }
 
 /* Create a graph pass. */