Initial commit of morgans spilling algorithm (spill unused values that live through
[libfirm] / ir / be / benode.c
index 957c1a8..98d97b8 100644 (file)
@@ -232,7 +232,7 @@ static void *init_node_attr(ir_node* irn, int max_reg_data)
        return a;
 }
 
-static INLINE int is_be_node(const ir_node *irn)
+int is_be_node(const ir_node *irn)
 {
        return get_op_tag(get_irn_op(irn)) == &be_node_tag;
 }
@@ -309,12 +309,18 @@ ir_node *be_new_Reload(const arch_register_class_t *cls, const arch_register_cla
        return res;
 }
 
-ir_node *(be_get_Reload_mem)(const ir_node *irn)
+ir_node *be_get_Reload_mem(const ir_node *irn)
 {
        assert(be_is_Reload(irn));
        return get_irn_n(irn, be_pos_Reload_mem);
 }
 
+ir_node *be_get_Reload_frame(const ir_node *irn)
+{
+       assert(be_is_Reload(irn));
+       return get_irn_n(irn, be_pos_Reload_frame);
+}
+
 ir_node *be_new_Perm(const arch_register_class_t *cls, ir_graph *irg, ir_node *bl, int n, ir_node *in[])
 {
        int i;
@@ -345,6 +351,10 @@ ir_node *be_get_Copy_op(const ir_node *cpy) {
        return get_irn_n(cpy, be_pos_Copy_op);
 }
 
+void be_set_Copy_op(ir_node *cpy, ir_node *op) {
+       set_irn_n(cpy, be_pos_Copy_op, op);
+}
+
 ir_node *be_new_Keep(const arch_register_class_t *cls, ir_graph *irg, ir_node *bl, int n, ir_node *in[])
 {
        int i;
@@ -431,7 +441,7 @@ ir_node *be_new_IncSP(const arch_register_t *sp, ir_graph *irg, ir_node *bl, ir_
 {
        be_stack_attr_t *a;
        ir_node *irn;
-       ir_node *in[1];
+       ir_node *in[2];
 
        in[0]     = old_sp;
        in[1]     = mem;
@@ -1016,6 +1026,7 @@ static arch_irn_class_t be_node_classify(const void *_self, const ir_node *irn)
                XXX(Perm, perm);
                XXX(Copy, copy);
                XXX(Return, branch);
+               XXX(StackParam, stackparam);
 #undef XXX
                default:
                return 0;