keep_alive_barrier operand used wrong block; schedule keep behind phi sequences
[libfirm] / ir / be / beschedtrace.c
index 7d8c82f..956f9df 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
@@ -74,7 +74,7 @@ static ir_node *get_nodeset_node(const ir_nodeset_t *nodeset)
  */
 static inline unsigned is_root_node(trace_env_t *env, ir_node *n)
 {
-       int idx = get_irn_idx(n);
+       unsigned const idx = get_irn_idx(n);
 
        assert(idx < ARR_LEN(env->sched_info));
        return env->sched_info[idx].is_root;
@@ -85,7 +85,7 @@ static inline unsigned is_root_node(trace_env_t *env, ir_node *n)
  */
 static inline void mark_root_node(trace_env_t *env, ir_node *n)
 {
-       int idx = get_irn_idx(n);
+       unsigned const idx = get_irn_idx(n);
 
        assert(idx < ARR_LEN(env->sched_info));
        env->sched_info[idx].is_root = 1;
@@ -96,7 +96,7 @@ static inline void mark_root_node(trace_env_t *env, ir_node *n)
  */
 static inline sched_timestep_t get_irn_delay(trace_env_t *env, ir_node *n)
 {
-       int idx = get_irn_idx(n);
+       unsigned const idx = get_irn_idx(n);
 
        assert(idx < ARR_LEN(env->sched_info));
        return env->sched_info[idx].delay;
@@ -107,7 +107,7 @@ static inline sched_timestep_t get_irn_delay(trace_env_t *env, ir_node *n)
  */
 static inline void set_irn_delay(trace_env_t *env, ir_node *n, sched_timestep_t delay)
 {
-       int idx = get_irn_idx(n);
+       unsigned const idx = get_irn_idx(n);
 
        assert(idx < ARR_LEN(env->sched_info));
        env->sched_info[idx].delay = delay;
@@ -118,7 +118,7 @@ static inline void set_irn_delay(trace_env_t *env, ir_node *n, sched_timestep_t
  */
 static inline sched_timestep_t get_irn_etime(trace_env_t *env, ir_node *n)
 {
-       int idx = get_irn_idx(n);
+       unsigned const idx = get_irn_idx(n);
 
        assert(idx < ARR_LEN(env->sched_info));
        return env->sched_info[idx].etime;
@@ -129,7 +129,7 @@ static inline sched_timestep_t get_irn_etime(trace_env_t *env, ir_node *n)
  */
 static inline void set_irn_etime(trace_env_t *env, ir_node *n, sched_timestep_t etime)
 {
-       int idx = get_irn_idx(n);
+       unsigned const idx = get_irn_idx(n);
 
        assert(idx < ARR_LEN(env->sched_info));
        env->sched_info[idx].etime = etime;
@@ -140,7 +140,7 @@ static inline void set_irn_etime(trace_env_t *env, ir_node *n, sched_timestep_t
  */
 static inline unsigned get_irn_num_user(trace_env_t *env, ir_node *n)
 {
-       int idx = get_irn_idx(n);
+       unsigned const idx = get_irn_idx(n);
 
        assert(idx < ARR_LEN(env->sched_info));
        return env->sched_info[idx].num_user;
@@ -151,7 +151,7 @@ static inline unsigned get_irn_num_user(trace_env_t *env, ir_node *n)
  */
 static inline void set_irn_num_user(trace_env_t *env, ir_node *n, unsigned num_user)
 {
-       int idx = get_irn_idx(n);
+       unsigned const idx = get_irn_idx(n);
 
        assert(idx < ARR_LEN(env->sched_info));
        env->sched_info[idx].num_user = num_user;
@@ -162,7 +162,7 @@ static inline void set_irn_num_user(trace_env_t *env, ir_node *n, unsigned num_u
  */
 static inline int get_irn_reg_diff(trace_env_t *env, ir_node *n)
 {
-       int idx = get_irn_idx(n);
+       unsigned const idx = get_irn_idx(n);
 
        assert(idx < ARR_LEN(env->sched_info));
        return env->sched_info[idx].reg_diff;
@@ -173,7 +173,7 @@ static inline int get_irn_reg_diff(trace_env_t *env, ir_node *n)
  */
 static inline void set_irn_reg_diff(trace_env_t *env, ir_node *n, int reg_diff)
 {
-       int idx = get_irn_idx(n);
+       unsigned const idx = get_irn_idx(n);
 
        assert(idx < ARR_LEN(env->sched_info));
        env->sched_info[idx].reg_diff = reg_diff;
@@ -184,7 +184,7 @@ static inline void set_irn_reg_diff(trace_env_t *env, ir_node *n, int reg_diff)
  */
 static inline int get_irn_preorder(trace_env_t *env, ir_node *n)
 {
-       int idx = get_irn_idx(n);
+       unsigned const idx = get_irn_idx(n);
 
        assert(idx < ARR_LEN(env->sched_info));
        return env->sched_info[idx].preorder;
@@ -195,7 +195,7 @@ static inline int get_irn_preorder(trace_env_t *env, ir_node *n)
  */
 static inline void set_irn_preorder(trace_env_t *env, ir_node *n, int pos)
 {
-       int idx = get_irn_idx(n);
+       unsigned const idx = get_irn_idx(n);
 
        assert(idx < ARR_LEN(env->sched_info));
        env->sched_info[idx].preorder = pos;
@@ -206,7 +206,7 @@ static inline void set_irn_preorder(trace_env_t *env, ir_node *n, int pos)
  */
 static inline unsigned get_irn_critical_path_len(trace_env_t *env, ir_node *n)
 {
-       int idx = get_irn_idx(n);
+       unsigned const idx = get_irn_idx(n);
 
        assert(idx < ARR_LEN(env->sched_info));
        return env->sched_info[idx].critical_path_len;
@@ -217,7 +217,7 @@ static inline unsigned get_irn_critical_path_len(trace_env_t *env, ir_node *n)
  */
 static inline void set_irn_critical_path_len(trace_env_t *env, ir_node *n, unsigned len)
 {
-       int idx = get_irn_idx(n);
+       unsigned const idx = get_irn_idx(n);
 
        assert(idx < ARR_LEN(env->sched_info));
        env->sched_info[idx].critical_path_len = len;
@@ -430,7 +430,7 @@ static void trace_preprocess_block(trace_env_t *env, ir_node *block)
        /* Second step: calculate the pre-order list. */
        preord = NULL;
        for (curr = root; curr; curr = irn) {
-               irn = get_irn_link(curr);
+               irn = (ir_node*)get_irn_link(curr);
                DBG((env->dbg, LEVEL_2, "   DAG root %+F\n", curr));
                descent(curr, block, &preord, env, 0);
        }
@@ -439,7 +439,7 @@ static void trace_preprocess_block(trace_env_t *env, ir_node *block)
        /* Third step: calculate the Delay. Note that our
        * list is now in pre-order, starting at root
        */
-       for (cur_pos = 0, curr = root; curr; curr = get_irn_link(curr), cur_pos++) {
+       for (cur_pos = 0, curr = root; curr; curr = (ir_node*)get_irn_link(curr), cur_pos++) {
                sched_timestep_t d;
 
                if (is_cfop(curr)) {
@@ -478,7 +478,7 @@ static void trace_preprocess_block(trace_env_t *env, ir_node *block)
  */
 static void trace_node_ready(void *data, ir_node *irn, ir_node *pred)
 {
-       trace_env_t *env = data;
+       trace_env_t *env = (trace_env_t*)data;
        sched_timestep_t etime_p, etime;
 
        etime = env->curr_time;
@@ -497,7 +497,7 @@ static void trace_node_ready(void *data, ir_node *irn, ir_node *pred)
  */
 static void trace_update_time(void *data, ir_node *irn)
 {
-       trace_env_t *env = data;
+       trace_env_t *env = (trace_env_t*)data;
        if (is_Phi(irn) || get_irn_opcode(irn) == beo_Start) {
                env->curr_time += get_irn_etime(env, irn);
        }
@@ -533,7 +533,7 @@ static trace_env_t *trace_init(ir_graph *irg)
  */
 static void trace_free(void *data)
 {
-       trace_env_t *env = data;
+       trace_env_t *env = (trace_env_t*)data;
        be_liveness_free(env->liveness);
        DEL_ARR_F(env->sched_info);
        free(env);
@@ -565,7 +565,7 @@ static ir_node *basic_selection(ir_nodeset_t *ready_set)
 */
 static ir_node *muchnik_select(void *block_env, ir_nodeset_t *ready_set, ir_nodeset_t *live_set)
 {
-       trace_env_t *env = block_env;
+       trace_env_t *env = (trace_env_t*)block_env;
        ir_nodeset_t mcands, ecands;
        ir_nodeset_iterator_t iter;
        sched_timestep_t max_delay = 0;
@@ -597,7 +597,7 @@ static ir_node *muchnik_select(void *block_env, ir_nodeset_t *ready_set, ir_node
                DB((env->dbg, LEVEL_3, "\tirn = %+F, mcand = 1, max_delay = %u\n", irn, max_delay));
        }
        else {
-               int cnt = ir_nodeset_size(&ecands);
+               size_t cnt = ir_nodeset_size(&ecands);
                if (cnt == 1) {
                        irn = get_nodeset_node(&ecands);
 
@@ -608,12 +608,12 @@ static ir_node *muchnik_select(void *block_env, ir_nodeset_t *ready_set, ir_node
                        DB((env->dbg, LEVEL_3, "\tirn = %+F, ecand = 1, max_delay = %u\n", irn, max_delay));
                }
                else if (cnt > 1) {
-                       DB((env->dbg, LEVEL_3, "\tecand = %d, max_delay = %u\n", cnt, max_delay));
+                       DB((env->dbg, LEVEL_3, "\tecand = %zu, max_delay = %u\n", cnt, max_delay));
                        irn = basic_selection(&ecands);
                }
                else {
 force_mcands:
-                       DB((env->dbg, LEVEL_3, "\tmcand = %d\n", ir_nodeset_size(&mcands)));
+                       DB((env->dbg, LEVEL_3, "\tmcand = %zu\n", ir_nodeset_size(&mcands)));
                        irn = basic_selection(&mcands);
                }
        }
@@ -631,7 +631,8 @@ static void *muchnik_init_graph(const list_sched_selector_t *vtab, ir_graph *irg
 
 static void *muchnik_init_block(void *graph_env, ir_node *bl)
 {
-       trace_preprocess_block(graph_env, bl);
+       trace_env_t *env = (trace_env_t*) graph_env;
+       trace_preprocess_block(env, bl);
        return graph_env;
 }
 
@@ -652,7 +653,7 @@ const list_sched_selector_t muchnik_selector = {
  */
 static ir_node *heuristic_select(void *block_env, ir_nodeset_t *ns, ir_nodeset_t *lv)
 {
-       trace_env_t *trace_env   = block_env;
+       trace_env_t *trace_env   = (trace_env_t*)block_env;
        ir_node     *irn, *cand  = NULL;
        int         max_prio     = INT_MIN;
        int         cur_prio     = INT_MIN;