fixed CopyKeeps
[libfirm] / ir / be / besched.c
index f856db4..6e71367 100644 (file)
@@ -73,7 +73,7 @@ int sched_verify(const ir_node *block)
   const ir_node *irn;
   int i, n;
   int *save_time_step;
-  ir_node **save_nodes;
+  const ir_node **save_nodes;
   const ir_edge_t *edge;
   pset *scheduled_nodes = pset_new_ptr_default();
 
@@ -152,7 +152,7 @@ int sched_verify(const ir_node *block)
 
   del_pset(scheduled_nodes);
   free(save_time_step);
-  free(save_nodes);
+  free((void *) save_nodes);
   return res;
 }
 
@@ -170,6 +170,11 @@ int sched_verify_irg(ir_graph *irg)
   return res;
 }
 
+int (sched_comes_after)(const ir_node *n1, const ir_node *n2)
+{
+       return _sched_comes_after(n1, n2);
+}
+
 int sched_skip_cf_predicator(const ir_node *irn, void *data) {
   arch_env_t *ae = data;
   return arch_irn_classify(ae, irn) == arch_irn_class_branch;
@@ -179,13 +184,15 @@ int sched_skip_phi_predicator(const ir_node *irn, void *data) {
        return is_Phi(irn);
 }
 
-extern ir_node *sched_skip(ir_node *from, int forward,
-    sched_predicator_t *predicator, void *data)
+extern ir_node *sched_skip(ir_node *from, int forward, sched_predicator_t *predicator, void *data)
 {
-  const ir_node *bl = get_block(from);
-  ir_node *curr;
+       const ir_node *bl = get_block(from);
+       ir_node *curr;
+
+       if (is_Block(from))
+               from = forward ? sched_next(from) : sched_prev(from);
+
+       for(curr = from; curr != bl && predicator(curr, data); curr = forward ? sched_next(curr) : sched_prev(curr));
 
-  for(curr = from; curr != bl && predicator(curr, data);
-      curr = forward ? sched_next(curr) : sched_prev(curr));
-  return curr;
+       return curr;
 }