remove license stuff from files
[libfirm] / ir / opt / dead_code_elimination.c
index 00e698d..28b2efe 100644 (file)
@@ -1,27 +1,12 @@
 /*
- * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
- *
  * This file is part of libFirm.
- *
- * This file may be distributed and/or modified under the terms of the
- * GNU General Public License version 2 as published by the Free Software
- * Foundation and appearing in the file LICENSE.GPL included in the
- * packaging of this file.
- *
- * Licensees holding valid libFirm Professional Edition licenses may use
- * this file in accordance with the libFirm Commercial License.
- * Agreement provided with the Software.
- *
- * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
+ * Copyright (C) 2012 University of Karlsruhe.
  */
 
 /**
  * @file
  * @brief    Dead node elimination
  * @author   Michael Beck, Goetz Lindenmaier
- * @version  $Id: opt_inline.c 27265 2010-03-07 15:13:00Z matze $
  *
  * Strictly speaking dead node elimination is unnecessary in firm - everthying
  * which is not used can't be found by any walker.
@@ -34,7 +19,6 @@
 #include "iroptimize.h"
 #include "irnode_t.h"
 #include "irgraph_t.h"
-#include "irphase_t.h"
 #include "iredges_t.h"
 #include "irhooks.h"
 #include "irtools.h"
@@ -46,9 +30,6 @@
 #include "irpass.h"
 #include "pmap.h"
 
-/** a pointer to the new phases */
-static ir_phase *new_phases[PHASE_LAST + 1];
-
 /**
  * Reroute the inputs of a node from nodes in the old graph to copied nodes in
  * the new graph
@@ -61,27 +42,13 @@ static void rewire_inputs(ir_node *node, void *env)
 
 static void copy_node_dce(ir_node *node, void *env)
 {
-       ir_phase_id i;
-       ir_node    *new_node = exact_copy(node);
-       ir_graph   *irg      = get_irn_irg(new_node);
+       ir_node  *new_node = exact_copy(node);
        (void) env;
 
        /* preserve the node numbers for easier debugging */
        new_node->node_nr = node->node_nr;
 
-       /* copy phase information for this node */
-       for (i = PHASE_FIRST; i <= PHASE_LAST; ++i) {
-               ir_phase *phase = irg_get_phase(irg, i);
-               if (phase == NULL)
-                       continue;
-               if (!phase_get_irn_data(phase, node))
-                       continue;
-               phase_set_irn_data(new_phases[i], new_node,
-                                  phase_get_irn_data(phase, node));
-       }
-
        set_irn_link(node, new_node);
-       hook_dead_node_elim_subst(irg, node, new_node);
 }
 
 /**
@@ -92,42 +59,16 @@ static void copy_node_dce(ir_node *node, void *env)
  */
 static void copy_graph_env(ir_graph *irg)
 {
-       ir_node    *new_anchor;
-       ir_phase_id i;
-
-       /* init the new_phases array */
-       /* TODO: this is wrong, it should only allocate a new data_ptr inside
-        * the phase! */
-       for (i = PHASE_FIRST; i <= PHASE_LAST; ++i) {
-               ir_phase *old_ph = irg_get_phase(irg, i);
-               if (old_ph == NULL) {
-                       new_phases[i] = NULL;
-               } else {
-                       new_phases[i] = new_phase(irg, old_ph->data_init);
-                       new_phases[i]->priv = old_ph->priv;
-               }
-       }
+       ir_node *anchor = irg->anchor;
+       ir_node *new_anchor;
 
        /* copy nodes */
-       irg_walk_anchors(irg, copy_node_dce, rewire_inputs, NULL);
+       irg_walk_in_or_dep(anchor, copy_node_dce, rewire_inputs, NULL);
 
        /* fix the anchor */
-       new_anchor = (ir_node*)get_irn_link(irg->anchor);
+       new_anchor = (ir_node*)get_irn_link(anchor);
        assert(new_anchor != NULL);
        irg->anchor = new_anchor;
-
-       /* copy the new phases into the irg */
-       for (i = PHASE_FIRST; i <= PHASE_LAST; ++i) {
-               ir_phase *old_ph = irg_get_phase(irg, i);
-               if (old_ph == NULL)
-                       continue;
-
-               /* Matze: commented out for now: This is a memory leak, but for a real
-                * fix we must not create new phases here, but reuse the old phases
-                * and just create a new data array */
-               /* phase_free(old_ph); */
-               irg->phases[i] = new_phases[i];
-       }
 }
 
 /**
@@ -140,31 +81,25 @@ static void copy_graph_env(ir_graph *irg)
  */
 void dead_node_elimination(ir_graph *irg)
 {
-       struct obstack *graveyard_obst = NULL;
-       struct obstack *rebirth_obst   = NULL;
-
        edges_deactivate(irg);
 
        /* inform statistics that we started a dead-node elimination run */
        hook_dead_node_elim(irg, 1);
 
-       assert(get_irg_phase_state(irg) != phase_building);
-
        /* Handle graph state */
        free_callee_info(irg);
        free_irg_outs(irg);
        free_trouts();
        free_loop_information(irg);
-       clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
+       free_vrp_data(irg);
+       clear_irg_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_DOMINANCE);
 
        /* A quiet place, where the old obstack can rest in peace,
           until it will be cremated. */
-       graveyard_obst = irg->obst;
+       struct obstack graveyard_obst = irg->obst;
 
        /* A new obstack, where the reachable nodes will be copied to. */
-       rebirth_obst = XMALLOC(struct obstack);
-       irg->obst = rebirth_obst;
-       obstack_init(irg->obst);
+       obstack_init(&irg->obst);
        irg->last_node_idx = 0;
 
        /* We also need a new value table for CSE */
@@ -174,8 +109,7 @@ void dead_node_elimination(ir_graph *irg)
        copy_graph_env(irg);
 
        /* Free memory from old unoptimized obstack */
-       obstack_free(graveyard_obst, 0);  /* First empty the obstack ... */
-       xfree(graveyard_obst);            /* ... then free it.           */
+       obstack_free(&graveyard_obst, 0);  /* First empty the obstack ... */
 
        /* inform statistics that the run is over */
        hook_dead_node_elim(irg, 0);