Add be_dep_on_frame() to let a node depend on the frame, so it does not get scheduled...
[libfirm] / ir / be / betranshlp.h
index 3869c7b..e0be48a 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.
  *
@@ -33,7 +33,7 @@
 /**
  * A callback to pre-transform some nodes before the transformation starts.
  */
-typedef void (arch_pretrans_nodes)(void *arch_cg);
+typedef void (arch_pretrans_nodes)(void);
 
 /**
  * The type of a transform function.
@@ -49,14 +49,15 @@ ir_node *be_pre_transform_node(ir_node *place);
 ir_node *be_transform_node(ir_node *node);
 
 /**
- * returns an anchor from the graph before the transformation
+ * Duplicate all dependency edges of a node.
  */
-ir_node *be_get_old_anchor(int anchor);
+void be_duplicate_deps(ir_node *old_node, ir_node *new_node);
 
 /**
- * Duplicate all dependency edges of a node.
+ * Depend on the frame if the node is in the start block.  This prevents
+ * nodes being scheduled before they can be spilled.
  */
-void be_duplicate_deps(ir_node *old_node, ir_node *new_node);
+void be_dep_on_frame(ir_node *node);
 
 /**
  * Duplicate a node during transformation.
@@ -68,6 +69,11 @@ ir_node *be_duplicate_node(ir_node *node);
  */
 void be_set_transformed_node(ir_node *old_node, ir_node *new_node);
 
+/**
+ * returns 1 if the node is already transformed
+ */
+int be_is_transformed(const ir_node *node);
+
 /**
  * enqueue all inputs into the transform queue.
  */
@@ -76,6 +82,6 @@ void be_enqueue_preds(ir_node *node);
 /**
  * Transform a graph. Transformers must be registered first.
  */
-void be_transform_graph(be_irg_t *birg, arch_pretrans_nodes *func, void *cg_env);
+void be_transform_graph(be_irg_t *birg, arch_pretrans_nodes *func);
 
 #endif /* FIRM_BE_BETRANSHLP_H */