irg_block_edges_walk() implemented
[libfirm] / ir / ir / irnode.c
index 086a661..e1c3f2e 100644 (file)
@@ -108,7 +108,7 @@ unsigned firm_add_node_size = 0;
 
 
 /* register new space for every node */
-unsigned register_additional_node_data(unsigned size) {
+unsigned firm_register_additional_node_data(unsigned size) {
        assert(!forbid_new_data && "Too late to register additional node data");
 
        if (forbid_new_data)
@@ -131,8 +131,8 @@ init_irnode(void) {
  * If arity is negative, a node with a dynamic array is created.
  */
 ir_node *
-new_ir_node (dbg_info *db, ir_graph *irg, ir_node *block, ir_op *op, ir_mode *mode,
-         int arity, ir_node **in)
+new_ir_node(dbg_info *db, ir_graph *irg, ir_node *block, ir_op *op, ir_mode *mode,
+            int arity, ir_node **in)
 {
        ir_node *res;
        size_t node_size = offsetof(ir_node, attr) + op->attr_size + firm_add_node_size;
@@ -552,10 +552,10 @@ long get_irn_node_nr(const ir_node *node) {
 #endif
 }
 
-const_attr
+const_attr *
 get_irn_const_attr(ir_node *node) {
        assert(node->op == op_Const);
-       return node->attr.con;
+       return &node->attr.con;
 }
 
 long
@@ -564,22 +564,22 @@ get_irn_proj_attr(ir_node *node) {
        return node->attr.proj;
 }
 
-alloc_attr
+alloc_attr *
 get_irn_alloc_attr(ir_node *node) {
        assert(node->op == op_Alloc);
-       return node->attr.alloc;
+       return &node->attr.alloc;
 }
 
-free_attr
+free_attr *
 get_irn_free_attr(ir_node *node) {
        assert(node->op == op_Free);
-       return node->attr.free;
+       return &node->attr.free;
 }
 
-symconst_attr
+symconst_attr *
 get_irn_symconst_attr(ir_node *node) {
        assert(node->op == op_SymConst);
-       return node->attr.symc;
+       return &node->attr.symc;
 }
 
 ir_type *
@@ -588,10 +588,10 @@ get_irn_call_attr(ir_node *node) {
        return node->attr.call.cld_tp = skip_tid(node->attr.call.cld_tp);
 }
 
-sel_attr
+sel_attr *
 get_irn_sel_attr(ir_node *node) {
        assert(node->op == op_Sel);
-       return node->attr.sel;
+       return &node->attr.sel;
 }
 
 int
@@ -600,29 +600,29 @@ get_irn_phi0_attr(ir_node *node) {
        return node->attr.phi0.pos;
 }
 
-block_attr
+block_attr *
 get_irn_block_attr(ir_node *node) {
        assert(node->op == op_Block);
-       return node->attr.block;
+       return &node->attr.block;
 }
 
-load_attr
+load_attr *
 get_irn_load_attr(ir_node *node) {
        assert(node->op == op_Load);
-       return node->attr.load;
+       return &node->attr.load;
 }
 
-store_attr
+store_attr *
 get_irn_store_attr(ir_node *node) {
        assert(node->op == op_Store);
-       return node->attr.store;
+       return &node->attr.store;
 }
 
-except_attr
+except_attr *
 get_irn_except_attr(ir_node *node) {
        assert(node->op == op_Div || node->op == op_Quot ||
               node->op == op_DivMod || node->op == op_Mod || node->op == op_Call || node->op == op_Alloc);
-       return node->attr.except;
+       return &node->attr.except;
 }
 
 void *(get_irn_generic_attr)(ir_node *node) {
@@ -655,7 +655,6 @@ int get_irn_pred_pos(ir_node *node, ir_node *arg) {
 ir_node *
 get_nodes_block(const ir_node *node) {
        assert(node->op != op_Block);
-       assert(is_irn_pinned_in_irg(node) && "block info may be incorrect");
        return get_irn_n(node, -1);
 }
 
@@ -871,6 +870,22 @@ ir_graph *get_Block_irg(const ir_node *block) {
        return block->attr.block.irg;
 }
 
+int has_Block_label(const ir_node *block) {
+       assert(is_Block(block));
+       return block->attr.block.has_label;
+}
+
+ir_label_t get_Block_label(const ir_node *block) {
+       assert(is_Block(block));
+       return block->attr.block.label;
+}
+
+void set_Block_label(ir_node *block, ir_label_t label) {
+       assert(is_Block(block));
+       block->attr.block.has_label = 1;
+       block->attr.block.label = label;
+}
+
 int
 get_End_n_keepalives(ir_node *end) {
        assert(end->op == op_End);
@@ -1169,6 +1184,16 @@ set_SymConst_symbol(ir_node *node, union symconst_symbol sym) {
        node->attr.symc.sym = sym;
 }
 
+ir_label_t get_SymConst_label(const ir_node *node) {
+       assert(node->op == op_SymConst && SYMCONST_HAS_LABEL(get_SymConst_kind(node)));
+       return node->attr.symc.sym.label;
+}
+
+void set_SymConst_label(ir_node *node, ir_label_t label) {
+       assert(node->op == op_SymConst && SYMCONST_HAS_LABEL(get_SymConst_kind(node)));
+       node->attr.symc.sym.label = label;
+}
+
 ir_type *
 get_SymConst_value_type(ir_node *node) {
        assert(node->op == op_SymConst);
@@ -1700,6 +1725,18 @@ set_Load_volatility(ir_node *node, ir_volatility volatility) {
        node->attr.load.volatility = volatility;
 }
 
+ir_align
+get_Load_align(ir_node *node) {
+       assert(node->op == op_Load);
+       return node->attr.load.aligned;
+}
+
+void
+set_Load_align(ir_node *node, ir_align align) {
+       assert(node->op == op_Load);
+       node->attr.load.aligned = align;
+}
+
 
 ir_node *
 get_Store_mem(ir_node *node) {
@@ -1749,6 +1786,18 @@ set_Store_volatility(ir_node *node, ir_volatility volatility) {
        node->attr.store.volatility = volatility;
 }
 
+ir_align
+get_Store_align(ir_node *node) {
+       assert(node->op == op_Store);
+       return node->attr.store.aligned;
+}
+
+void
+set_Store_align(ir_node *node, ir_align align) {
+       assert(node->op == op_Store);
+       node->attr.store.aligned = align;
+}
+
 
 ir_node *
 get_Alloc_mem(ir_node *node) {
@@ -2588,11 +2637,46 @@ int
        return _is_Or(node);
 }
 
+int
+(is_Eor)(const ir_node *node) {
+       return _is_Eor(node);
+}
+
 int
 (is_Sub)(const ir_node *node) {
        return _is_Sub(node);
 }
 
+int
+(is_Shl)(const ir_node *node) {
+       return _is_Shl(node);
+}
+
+int
+(is_Shr)(const ir_node *node) {
+       return _is_Shr(node);
+}
+
+int
+(is_Shrs)(const ir_node *node) {
+       return _is_Shrs(node);
+}
+
+int
+(is_Rot)(const ir_node *node) {
+       return _is_Rot(node);
+}
+
+int
+(is_Not)(const ir_node *node) {
+       return _is_Not(node);
+}
+
+int
+(is_Psi)(const ir_node *node) {
+       return _is_Psi(node);
+}
+
 int
 (is_Tuple)(const ir_node *node) {
        return _is_Tuple(node);
@@ -2958,6 +3042,22 @@ ir_op_ops *firm_set_default_get_entity_attr(ir_opcode code, ir_op_ops *ops) {
        return ops;
 }
 
+/* Sets the debug information of a node. */
+void (set_irn_dbg_info)(ir_node *n, dbg_info *db) {
+       _set_irn_dbg_info(n, db);
+}
+
+/**
+ * Returns the debug information of an node.
+ *
+ * @param n   The node.
+ */
+dbg_info *(get_irn_dbg_info)(const ir_node *n) {
+       return _get_irn_dbg_info(n);
+}
+
+
+
 #ifdef DEBUG_libfirm
 void dump_irn(ir_node *n) {
        int i, arity = get_irn_arity(n);