include backend headers without "../"
[libfirm] / ir / opt / tailrec.c
index fc580fb..76a765a 100644 (file)
@@ -47,7 +47,7 @@
 #include "ircons_t.h"
 #include "irpass.h"
 
-DEBUG_ONLY(static firm_dbg_module_t *dbg);
+DEBUG_ONLY(static firm_dbg_module_t *dbg;)
 
 /**
  * the environment for collecting data
@@ -152,11 +152,8 @@ static void do_opt_tail_rec(ir_graph *irg, tr_env *env)
        assert(env->n_tail_calls > 0);
 
        /* we add new blocks and change the control flow */
-       set_irg_doms_inconsistent(irg);
-       set_irg_extblk_inconsistent(irg);
-
-       /* calls are removed */
-       set_trouts_inconsistent();
+       clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+                          | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
 
        /* we must build some new nodes WITHOUT CSE */
        set_optimize(0);
@@ -228,7 +225,6 @@ static void do_opt_tail_rec(ir_graph *irg, tr_env *env)
        if (n_params > 0) {
                ir_node *calls;
                ir_node *args;
-               ir_node *args_bl;
 
                NEW_ARR_A(ir_node **, call_params, env->n_tail_calls);
 
@@ -241,7 +237,6 @@ static void do_opt_tail_rec(ir_graph *irg, tr_env *env)
 
                /* build new Proj's and Phi's */
                args    = get_irg_args(irg);
-               args_bl = get_nodes_block(args);
                for (i = 0; i < n_params; ++i) {
                        ir_mode *mode = get_type_mode(get_method_param_type(method_tp, i));
 
@@ -267,10 +262,9 @@ static void do_opt_tail_rec(ir_graph *irg, tr_env *env)
        }
 
        /* tail recursion was done, all info is invalid */
-       set_irg_doms_inconsistent(irg);
-       set_irg_extblk_inconsistent(irg);
-       set_irg_loopinfo_state(irg, loopinfo_cf_inconsistent);
-       set_trouts_inconsistent();
+       clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+                          | IR_GRAPH_STATE_CONSISTENT_LOOPINFO
+                          | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
        set_irg_callee_info_state(irg, irg_callee_info_inconsistent);
 
        set_optimize(rem);
@@ -339,7 +333,7 @@ static void do_opt_tail_rec(ir_graph *irg, tr_env *env)
                        /* create a new tuple for the return values */
                        tuple = new_r_Tuple(block, env->n_ress, in);
 
-                       turn_into_tuple(call, pn_Call_max);
+                       turn_into_tuple(call, pn_Call_max+1);
                        set_Tuple_pred(call, pn_Call_M,         mem);
                        set_Tuple_pred(call, pn_Call_X_regular, jmp);
                        set_Tuple_pred(call, pn_Call_X_except,  new_r_Bad(irg, mode_X));