Rework linkage types in firm.
[libfirm] / ir / be / beschedmris.c
index 742f878..7de3bcc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
@@ -29,9 +29,7 @@
  * Minimum Register Instruction Sequencing to Reduce Register Spills
  * in out-of-order issue superscalar architectures
  */
-#ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
 
 #include <limits.h>
 
 #include "irgwalk.h"
 #include "irtools.h"
 #include "irbitset.h"
+#include "irnodeset.h"
 #include "height.h"
 
-#include "benode_t.h"
-#include "besched_t.h"
+#include "benode.h"
+#include "besched.h"
 #include "beschedmris.h"
 #include "beirg.h"
 
 struct _mris_env_t {
        ir_phase          ph;
        heights_t         *heights;
-       const arch_env_t  *aenv;
        ir_graph          *irg;
        ir_node           *bl;
        int               visited;
@@ -88,54 +86,6 @@ static void *mris_irn_data_init(ir_phase *ph, const ir_node *irn, void *data)
        return mi;
 }
 
-#if 0
-static int compute_height(mris_env_t *env, ir_node *irn, unsigned long visited)
-{
-       mris_irn_t *mi = get_mris_irn(env, irn);
-
-       if(get_irn_visited(irn) >= visited) {
-               DBG((env->dbg, LEVEL_3, "\theight of %+F = %d\n", irn, mi->height));
-               return mi->height;
-       }
-
-       else {
-               const ir_edge_t *edge;
-
-               set_irn_visited(irn, visited);
-               mi->height  = 0;
-
-               foreach_out_edge(irn, edge) {
-                       ir_node *dep = get_edge_src_irn(edge);
-
-                       if(!is_Block(dep) && get_nodes_block(dep) == env->bl) {
-                               int dep_height = compute_height(env, dep, visited);
-                               mi->height     = MAX(mi->height, dep_height);
-                       }
-               }
-
-               mi->height++;
-               DBG((env->dbg, LEVEL_3, "\tsetting height of %+F = %d\n", irn, mi->height));
-       }
-
-       return mi->height;
-}
-
-static void compute_heights(mris_env_t *env)
-{
-       const ir_edge_t *edge;
-       unsigned long visited;
-
-       visited = get_irg_visited(env->irg) + 1;
-       set_irg_visited(env->irg, visited);
-
-       foreach_out_edge(env->bl, edge) {
-               ir_node *dep = get_edge_src_irn(edge);
-               if(to_appear(env, dep))
-                       compute_height(env, dep, visited);
-       }
-}
-#endif
-
 #define valid_node(env, dep) (to_appear(env, dep) && !be_is_Keep(dep))
 
 static void grow_all_descendands(mris_env_t *env, ir_node *irn, bitset_t *visited)
@@ -208,72 +158,11 @@ static ir_node *put_lowest_in_front(mris_env_t *env, ir_node **in)
        return in[0];
 }
 
-#if 0
-static void reaches_walker(mris_env_t *env, ir_node *irn, ir_node *tgt, int *found, unsigned long visited)
-{
-       if(get_irn_visited(irn) < visited && get_nodes_block(irn) == env->bl) {
-
-               set_irn_visited(irn, visited);
-
-               if(irn == tgt)
-                       *found = 1;
-               else {
-                       int i, n;
-
-                       for(i = 0, n = get_irn_arity(irn); i < n; ++i) {
-                               ir_node *op = get_irn_n(irn, i);
-                               if(!*found)
-                                       reaches_walker(env, op, tgt, found, visited);
-                       }
-               }
-       }
-}
-
-static int reaches(mris_env_t *env, ir_node *src, ir_node *tgt)
-{
-       int found = 0;
-       unsigned long visited = get_irg_visited(env->irg) + 1;
-
-       set_irg_visited(env->irg, visited);
-       reaches_walker(env, src, tgt, &found, visited);
-       return found;
-}
-#endif
-
-static INLINE ir_node *skip_Projs(ir_node *irn)
+static inline ir_node *skip_Projs(ir_node *irn)
 {
        return is_Proj(irn) ? skip_Projs(get_Proj_pred(irn)) : irn;
 }
 
-#if 0
-static void replace_tuple_by_repr_proj(mris_env_t *env, ir_node **in)
-{
-       int i;
-
-       for(i = 0; in[i]; ++i) {
-               if(get_irn_mode(in[i]) == mode_T) {
-                       const ir_edge_t *edge;
-                       ir_node *proj  = NULL;
-                       ir_node *first = NULL;
-
-                       foreach_out_edge(in[i], edge) {
-                               ir_node *desc = get_edge_src_irn(edge);
-
-                               first = first ? first : desc;
-                               if(get_irn_mode(desc) == mode_M) {
-                                       proj = desc;
-                                       break;
-                               }
-                       }
-
-                       proj = proj ? proj : first;
-                       assert(proj);
-                       in[i] = proj;
-               }
-       }
-}
-#endif
-
 static void lineage_formation(mris_env_t *env)
 {
        DEBUG_ONLY(firm_dbg_module_t *dbg = env->dbg);
@@ -513,11 +402,10 @@ void dump_ir_block_graph_mris(mris_env_t *env, const char *suffix) {
 
 mris_env_t *be_sched_mris_preprocess(const be_irg_t *birg)
 {
-       mris_env_t *env = xmalloc(sizeof(env[0]));
+       mris_env_t *env = XMALLOC(mris_env_t);
        ir_graph   *irg = be_get_birg_irg(birg);
 
        phase_init(&env->ph, "mris", irg, 2 * PHASE_DEFAULT_GROWTH, mris_irn_data_init, NULL);
-       env->aenv     = be_get_birg_arch_env(birg);
        env->irg      = irg;
        env->visited  = 0;
        env->heights  = heights_new(irg);