rename tarval to ir_tarval
[libfirm] / ir / opt / gvn_pre.c
index 0c5dba6..c13e4bb 100644 (file)
@@ -27,6 +27,7 @@
  */
 #include "config.h"
 
+#include "iroptimize.h"
 #include "irflag.h"
 #include "irdom.h"
 #include "irouts.h"
@@ -82,7 +83,6 @@ typedef struct pre_env {
        char first_iter;        /**< non-zero for first iteration */
 } pre_env;
 
-static pset         *value_table;
 static ir_nodemap_t value_map;
 
 /** The debug module handle. */
@@ -116,14 +116,14 @@ static ir_node *add(ir_node *e, ir_node *v)
 {
        if (is_Proj(v)) {
                ir_node *pred = get_Proj_pred(v);
-               ir_node *v_pred = identify_remember(value_table, pred);
+               ir_node *v_pred = identify_remember(pred);
 
                if (v_pred != pred) {
                        /* must create a new value here */
                        v = new_r_Proj(v_pred, get_irn_mode(v), get_Proj_proj(v));
                }
        }
-       v = identify_remember(value_table, v);
+       v = identify_remember(v);
        ir_nodemap_insert(&value_map, e, v);
        return v;
 }  /* add */
@@ -140,7 +140,7 @@ static ir_node *lookup(ir_node *e)
 {
        ir_node *value = ir_nodemap_get(&value_map, e);
        if (value != NULL)
-               return identify_remember(value_table, value);
+               return identify_remember(value);
        return NULL;
 }  /* lookup */
 
@@ -372,11 +372,11 @@ static ir_node *phi_translate(ir_node *node, ir_node *block, int pos, ir_valuese
                return node;
        }
 
-       arity = get_irn_intra_arity(node);
+       arity = get_irn_arity(node);
 
        /* check if the node has at least one Phi predecessor */
        for (i = 0; i < arity; ++i) {
-               ir_node *pred    = get_irn_intra_n(node, i);
+               ir_node *pred    = get_irn_n(node, i);
                ir_node *leader  = lookup(pred);
                ir_node *trans;
 
@@ -394,7 +394,7 @@ static ir_node *phi_translate(ir_node *node, ir_node *block, int pos, ir_valuese
        nn = new_ir_node(
                get_irn_dbg_info(node),
                current_ir_graph,
-               NULL,
+               get_nodes_block(node),
                get_irn_op(node),
                get_irn_mode(node),
                arity,
@@ -403,9 +403,8 @@ static ir_node *phi_translate(ir_node *node, ir_node *block, int pos, ir_valuese
           node might depend on that. */
        copy_node_attr(current_ir_graph, node, nn);
 
-       set_nodes_block(nn, get_nodes_block(node));
        for (i = 0; i < arity; ++i) {
-               ir_node *pred    = get_irn_intra_n(node, i);
+               ir_node *pred    = get_irn_n(node, i);
                ir_node *leader  = lookup(pred);
                ir_node *trans;
 
@@ -540,7 +539,7 @@ static void insert_nodes(ir_node *block, void *ctx)
        pre_env    *env = ctx;
        ir_node    *value, *expr, *idom, *first_s, *worklist;
        block_info *curr_info, *idom_info;
-       int        pos, arity = get_irn_intra_arity(block);
+       int        pos, arity = get_irn_arity(block);
        int        all_same, by_some, updated;
        ir_valueset_iterator_t iter;
 
@@ -640,7 +639,8 @@ static void insert_nodes(ir_node *block, void *ctx)
 
                                /* ignore bad blocks. */
                                if (is_Bad(pred_blk)) {
-                                       in[pos] = new_Bad();
+                                       ir_graph *irg = get_irn_irg(pred_blk);
+                                       in[pos] = new_r_Bad(irg);
                                        continue;
                                }
 
@@ -718,7 +718,7 @@ static void eliminate(ir_node *irn, void *ctx)
 {
        pre_env *env = ctx;
 
-       if (is_no_Block(irn)) {
+       if (!is_Block(irn)) {
                ir_node *block = get_nodes_block(irn);
                block_info *bl = get_block_info(block);
                ir_node *value = lookup(irn);
@@ -762,7 +762,7 @@ static void eliminate_nodes(elim_pair *pairs)
                        int i;
                        ir_node *res = NULL;
 
-                       for (i = get_irn_intra_arity(p->new_node) - 1; i >= 0; --i) {
+                       for (i = get_irn_arity(p->new_node) - 1; i >= 0; --i) {
                                ir_node *pred = get_irn_n(p->new_node, i);
 
                                if (pred != p->old_node) {
@@ -806,7 +806,7 @@ void do_gvn_pre(ir_graph *irg)
        /* edges will crash if enabled due to our allocate on other obstack trick */
        edges_deactivate(irg);
 
-       value_table = new_identities();
+       new_identities(irg);
        ir_nodemap_init(&value_map);
 
        obstack_init(&obst);
@@ -816,10 +816,6 @@ void do_gvn_pre(ir_graph *irg)
        a_env.end_block   = get_irg_end_block(irg);
        a_env.pairs       = NULL;
 
-       /* Move Proj's into the same block as their args,
-          else we would assign the result to wrong blocks */
-       normalize_proj_nodes(irg);
-
        /* critical edges MUST be removed */
        remove_critical_cf_edges(irg);
 
@@ -890,10 +886,8 @@ void do_gvn_pre(ir_graph *irg)
                if (bl_info->new_set)
                        ir_valueset_del(bl_info->new_set);
        }
-       del_identities(value_table);
        ir_nodemap_destroy(&value_map);
        obstack_free(&obst, NULL);
-       value_table = NULL;
 
        /* pin the graph again: This is needed due to the use of set_opt_global_cse(1) */
        set_irg_pinned(irg, op_pin_state_pinned);