changed code placement so it can work in more environments:
[libfirm] / ir / ana / field_temperature.c
index 4747231..626612e 100644 (file)
 #include "irgwalk.h"
 
 #include "array.h"
-#include "set.h"
-#include "hashptr.h"
-
 
 /* *************************************************************************** */
 /* initialize, global variables.                                               */
 /* *************************************************************************** */
 
-/* *************************************************************************** */
-/* Another hash table, this time containing temperature values.                */
-/* *************************************************************************** */
-
-typedef struct {
-  firm_kind *kind;   /* An entity or type. */
-  double    val1;
-} temperature_tp;
-
-/* We use this set for all types and entities.  */
-static set *temperature_set = NULL;
-
-static int temp_cmp(const void *e1, const void *e2, size_t size) {
-  temperature_tp *ef1 = (temperature_tp *)e1;
-  temperature_tp *ef2 = (temperature_tp *)e2;
-  return (ef1->kind != ef2->kind);
-}
-
-static INLINE unsigned int tem_hash(void *e) {
-  void *v = (void *) ((temperature_tp *)e)->kind;
-  return HASH_PTR(v);
-}
-
-double get_entity_acc_estimated_n_loads (entity *ent) {
-  return 0;
-}
-double get_entity_acc_estimated_n_stores(entity *ent) {
-  return 0;
-}
-
-void set_entity_acc_estimated_n_loads (entity *ent, double val) {
-}
-void set_entity_acc_estimated_n_stores(entity *ent, double val) {
-}
-
-double get_type_acc_estimated_n_instances(type *tp) {
-  return 0;
-}
-void set_type_acc_estimated_n_instances(type *tp, double val) {
-}
-
-/*
-static INLINE void set_region_exec_freq(void *reg, double freq) {
-  reg_exec_freq ef;
-  ef.reg  = reg;
-  ef.freq = freq;
-  set_insert(exec_freq_set, &ef, sizeof(ef), exec_freq_hash(&ef));
-}
-
-INLINE double get_region_exec_freq(void *reg) {
-  reg_exec_freq ef, *found;
-  ef.reg  = reg;
-  assert(exec_freq_set);
-  found = set_find(exec_freq_set, &ef, sizeof(ef), exec_freq_hash(&ef));
-  if (found)
-    return found->freq;
-  else
-    return 0;
-}
-*/
-
-
 /* *************************************************************************** */
 /*   Access routines for irnodes                                               */
 /* *************************************************************************** */
@@ -116,7 +51,7 @@ int get_irn_loop_call_depth(ir_node *n) {
   return get_irg_loop_depth(irg);
 }
 
-int get_irn_loop_depth(ir_node *n) {
+int get_irn_cfloop_depth(ir_node *n) {
   ir_loop *l = get_irn_loop(get_nodes_block(n));
   if (l)
     return get_loop_depth(l);
@@ -133,7 +68,7 @@ int get_irn_recursion_depth(ir_node *n) {
 /**   @@@ the second version of the heuristic. */
 int get_weighted_loop_depth(ir_node *n) {
   int loop_call_depth = get_irn_loop_call_depth(n);
-  int loop_depth      = get_irn_loop_depth(n);
+  int loop_depth      = get_irn_cfloop_depth(n);
   int recursion_depth = get_irn_recursion_depth(n);
 
   return loop_call_depth + loop_depth + recursion_depth;
@@ -146,16 +81,16 @@ int get_weighted_loop_depth(ir_node *n) {
 
 static int default_recursion_weight = 5;
 
-
 /* The final evaluation of a node.  In this function we can
-   adapt the heuristic.  Combine execution freqency with
+   adapt the heuristic.  Combine execution frequency with
    recursion depth.
    @@@ the second version of the heuristic. */
 double get_irn_final_cost(ir_node *n) {
   double cost_loop   = get_irn_exec_freq(n);
   double cost_method = get_irg_method_execution_frequency(get_irn_irg(n));
   int    rec_depth   = get_irn_recursion_depth(n);
-  double cost_rec    = pow(default_recursion_weight, rec_depth);
+  double cost_rec    = 0;
+  if (rec_depth) cost_rec = pow(default_recursion_weight, rec_depth);
   return cost_loop*(cost_method + cost_rec);
 }
 
@@ -171,6 +106,7 @@ double get_type_estimated_n_instances(type *tp) {
 
 double get_type_estimated_mem_consumption_bytes(type *tp) {
   assert(0);
+  return 0.0;
 }
 
 int get_type_estimated_n_fields(type *tp) {
@@ -391,81 +327,6 @@ double get_entity_estimated_n_dyncalls(entity *ent) {
   return n_calls;
 }
 
-/* ------------------------------------------------------------------------- */
-/* Accumulate information in the type hierarchy.                             */
-/* This should go to co_read_profiling.c                                     */
-/* ------------------------------------------------------------------------- */
-
-static void acc_temp (type *tp) {
-  assert(is_Class_type(tp));
-
-  int i, n_subtypes = get_class_n_subtypes(tp);
-
-  /* Recursive descend. */
-  for (i = 0; i < n_subtypes; ++i) {
-    type *stp = get_class_subtype(tp, i);
-    if (type_not_visited(stp)) {
-      acc_temp(stp);
-    }
-  }
-
-  /* Deal with entity numbers. */
-  int n_members = get_class_n_members(tp);
-  for (i = 0; i < n_members; ++i) {
-    entity *mem = get_class_member(tp, i);
-    double acc_loads  = get_entity_estimated_n_loads (mem);
-    double acc_writes = get_entity_estimated_n_stores(mem);
-    int j, n_ov = get_entity_n_overwrittenby(mem);
-    for (j = 0; j < n_ov; ++j) {
-      entity *ov_mem = get_entity_overwrittenby(mem, j);
-      acc_loads  += get_entity_acc_estimated_n_loads (ov_mem);
-      acc_writes += get_entity_acc_estimated_n_stores(ov_mem);
-    }
-    set_entity_acc_estimated_n_loads (mem, acc_loads);
-    set_entity_acc_estimated_n_stores(mem, acc_writes);
-  }
-
-  /* Deal with type numbers. */
-  double inst = get_type_estimated_n_instances(tp);
-  for (i = 0; i < n_subtypes; ++i) {
-    type *stp = get_class_subtype(tp, i);
-    inst += get_type_acc_estimated_n_instances(stp);
-  }
-  set_type_acc_estimated_n_instances(tp, inst);
-
-  mark_type_visited(tp);
-}
-
-void accumulate_temperatures(void) {
-  int i, n_types = get_irp_n_types();
-  free_accumulated_temperatures();
-
-  inc_master_type_visited();
-  for (i = 0; i < n_types; ++i) {
-    type *tp = get_irp_type(i);
-    if (is_Class_type(tp)) { /* For others there is nothing to accumulate. */
-      int j, n_subtypes = get_class_n_subtypes(tp);
-      int has_unmarked_subtype = false;
-      for (j = 0; j < n_subtypes && !has_unmarked_subtype; ++j) {
-       type *stp = get_class_subtype(tp, j);
-       if (type_not_visited(stp)) has_unmarked_subtype = true;
-      }
-
-      if (!has_unmarked_subtype)
-       acc_temp(tp);
-    }
-  }
-
-  irp->temperature_state = temperature_consistent;
-}
-
-
-void free_accumulated_temperatures(void) {
-  if (temperature_set) del_set(temperature_set);
-  temperature_set = NULL;
-  irp->temperature_state = temperature_none;
-}
-
 /* ------------------------------------------------------------------------- */
 /* Auxiliary                                                                 */
 /* ------------------------------------------------------------------------- */