fixed some minor bugs
[libfirm] / ir / be / besched.c
index d23330b..add6428 100644 (file)
@@ -11,8 +11,9 @@
 #include "iredges_t.h"
 #include "debug.h"
 
+#include "bearch.h"
 #include "besched_t.h"
-#include "besched.h"
+#include "beutil.h"
 #include "belistsched.h"
 
 FIRM_IMPL1(sched_get_time_step, int, const ir_node *)
@@ -48,24 +49,7 @@ void be_sched_dump(FILE *f, const ir_graph *irg)
 void be_sched_init(void)
 {
        sched_irn_data_offset = register_additional_node_data(sizeof(sched_info_t));
-  firm_dbg_register("be.sched");
-}
-
-void be_sched_test(void)
-{
-       int i, n;
-       struct obstack obst;
-
-       obstack_init(&obst);
-
-       for(i = 0, n = get_irp_n_irgs(); i < n; ++i) {
-               ir_graph *irg = get_irp_irg(i);
-
-               list_sched(irg, trivial_selector);
-               be_sched_dump(stdout, irg);
-       }
-
-       obstack_free(&obst, NULL);
+       firm_dbg_register("be.sched");
 }
 
 void sched_renumber(const ir_node *block)
@@ -110,7 +94,7 @@ int sched_verify(const ir_node *block)
   sched_foreach(block, irn) {
     sched_info_t *info = get_irn_sched_info(irn);
     save_time_step[i] = info->time_step;
-    save_nodes[i] = irn;
+    save_nodes[i] = (ir_node *)irn;
     info->time_step = i;
     pset_insert_ptr(scheduled_nodes, irn);
 
@@ -168,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;
 }
 
@@ -185,3 +169,28 @@ 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;
+}
+
+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)
+{
+  const ir_node *bl = get_block(from);
+  ir_node *curr;
+
+  for(curr = from; curr != bl && predicator(curr, data);
+      curr = forward ? sched_next(curr) : sched_prev(curr));
+  return curr;
+}