- implemented apply phase
[libfirm] / ir / be / bessaconstr.c
index bd5a54f..bf5ae96 100644 (file)
@@ -46,9 +46,7 @@
  * This function reroutes all uses of the original value to the copies in the
  * corresponding dominance subtrees and creates Phi functions where necessary.
  */
-#ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
 
 /* statev in this file is extensive, so only enable if needed */
 #define DISABLE_STATEV
@@ -118,8 +116,8 @@ ir_node *create_phi(be_ssa_construction_env_t *env, ir_node *block,
 {
        int i, n_preds = get_Block_n_cfgpreds(block);
        ir_graph *irg = get_irn_irg(block);
-       ir_node *phi;
-       ir_node **ins = alloca(n_preds * sizeof(ins[0]));
+       ir_node **ins = ALLOCAN(ir_node*, n_preds);
+       ir_node  *phi;
 
        assert(n_preds > 1);
 
@@ -222,7 +220,7 @@ ir_node *search_def(be_ssa_construction_env_t *env, ir_node *at)
 static
 void introduce_def_at_block(ir_node *block, ir_node *def)
 {
-       if(irn_visited(block)) {
+       if (irn_visited_else_mark(block)) {
                ir_node *node = block;
                ir_node *current_def;
 
@@ -244,7 +242,6 @@ void introduce_def_at_block(ir_node *block, ir_node *def)
        } else {
                set_irn_link(block, def);
                set_irn_link(def, NULL);
-               mark_irn_visited(block);
        }
 }
 
@@ -350,9 +347,9 @@ ir_node **be_ssa_construction_get_new_phis(be_ssa_construction_env_t *env)
 void be_ssa_construction_fix_users_array(be_ssa_construction_env_t *env,
                                          ir_node **nodes, size_t nodes_len)
 {
-       stat_ev_cnt_decl(uses);
        const ir_edge_t *edge, *next;
        size_t i;
+       stat_ev_cnt_decl(uses);
 
        BE_TIMER_PUSH(t_ssa_constr);