X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firnode_t.h;h=518c63c6db9950725d895dd50af306864e8dd30e;hb=19975388facbb3943fbc2aa2f5f9422350bb5cb3;hp=e4ed420c982b4459bf9aa299a528e128be0e932c;hpb=dd17276851571116b6fd2ca068944494b95a1cf0;p=libfirm diff --git a/ir/ir/irnode_t.h b/ir/ir/irnode_t.h index e4ed420c9..518c63c6d 100644 --- a/ir/ir/irnode_t.h +++ b/ir/ir/irnode_t.h @@ -29,6 +29,7 @@ # include "irnode.h" # include "irop_t.h" +# include "irgraph_t.h" # include "irflag_t.h" # include "firm_common_t.h" # include "irdom_t.h" /* For size of struct dom_info. */ @@ -249,14 +250,44 @@ block_attr get_irn_block_attr (ir_node *node); /* functions so they can be inlined. */ /*-------------------------------------------------------------------*/ +/** + * Checks whether a pointer points to a ir node. + * Intern version for libFirm. + */ +static INLINE int +__is_ir_node (const void *thing) { + return (get_kind(thing) == k_ir_node); +} +/** + * Gets the op of a node. + * Intern version for libFirm. + */ +static INLINE ir_op * +__get_irn_op (const ir_node *node) +{ + assert (node); + return node->op; +} + +/** + * Gets the opcode of a node. + * Intern version for libFirm. + */ +static INLINE opcode +__get_irn_opcode (const ir_node *node) +{ + assert (k_ir_node == get_kind(node)); + assert (node -> op); + return node->op->code; +} /** * Returns the number of predecessors without the block predecessor. * Intern version for libFirm. */ static INLINE int -intern_get_irn_intra_arity (const ir_node *node) { +__get_irn_intra_arity (const ir_node *node) { assert(node); return ARR_LEN(node->in) - 1; } @@ -266,15 +297,15 @@ intern_get_irn_intra_arity (const ir_node *node) { * Intern version for libFirm. */ static INLINE int -intern_get_irn_inter_arity (const ir_node *node) { +__get_irn_inter_arity (const ir_node *node) { assert(node); - if (get_irn_opcode(node) == iro_Filter) { + if (__get_irn_opcode(node) == iro_Filter) { assert(node->attr.filter.in_cg); return ARR_LEN(node->attr.filter.in_cg) - 1; - } else if (get_irn_opcode(node) == iro_Block && node->attr.block.in_cg) { + } else if (__get_irn_opcode(node) == iro_Block && node->attr.block.in_cg) { return ARR_LEN(node->attr.block.in_cg) - 1; } - return intern_get_irn_intra_arity(node); + return __get_irn_intra_arity(node); } /** @@ -282,17 +313,17 @@ intern_get_irn_inter_arity (const ir_node *node) { * Intern version for libFirm. */ static INLINE int -intern_get_irn_arity (const ir_node *node) { +__get_irn_arity (const ir_node *node) { assert(node); - if (interprocedural_view) return intern_get_irn_inter_arity(node); - return intern_get_irn_intra_arity(node); + if (interprocedural_view) return __get_irn_inter_arity(node); + return __get_irn_intra_arity(node); } /** * Intern version for libFirm. */ static INLINE ir_node * -intern_get_irn_intra_n (ir_node *node, int n) { +__get_irn_intra_n (ir_node *node, int n) { return (node->in[n + 1] = skip_nop(node->in[n + 1])); } @@ -300,31 +331,31 @@ intern_get_irn_intra_n (ir_node *node, int n) { * Intern version for libFirm. */ static INLINE ir_node* -intern_get_irn_inter_n (ir_node *node, int n) { +__get_irn_inter_n (ir_node *node, int n) { /* handle Filter and Block specially */ - if (get_irn_opcode(node) == iro_Filter) { + if (__get_irn_opcode(node) == iro_Filter) { assert(node->attr.filter.in_cg); return (node->attr.filter.in_cg[n + 1] = skip_nop(node->attr.filter.in_cg[n + 1])); - } else if (get_irn_opcode(node) == iro_Block && node->attr.block.in_cg) { + } else if (__get_irn_opcode(node) == iro_Block && node->attr.block.in_cg) { return (node->attr.block.in_cg[n + 1] = skip_nop(node->attr.block.in_cg[n + 1])); } - return get_irn_intra_n (node, n); + return __get_irn_intra_n (node, n); } /** * Access to the predecessors of a node. - * To iterate over the operands iterate from 0 to i < intern_get_irn_arity(), + * To iterate over the operands iterate from 0 to i < get_irn_arity(), * to iterate including the Block predecessor iterate from i = -1 to * i < get_irn_arity. * If it is a block, the entry -1 is NULL. * Intern version for libFirm. */ static INLINE ir_node * -intern_get_irn_n (ir_node *node, int n) { - assert(node); assert(-1 <= n && n < intern_get_irn_arity(node)); - if (interprocedural_view) return get_irn_inter_n (node, n); - return get_irn_intra_n (node, n); +__get_irn_n (ir_node *node, int n) { + assert(node); assert(-1 <= n && n < __get_irn_arity(node)); + if (interprocedural_view) return __get_irn_inter_n (node, n); + return __get_irn_intra_n (node, n); } /** @@ -332,35 +363,117 @@ intern_get_irn_n (ir_node *node, int n) { * Intern version for libFirm. */ static INLINE ir_mode * -intern_get_irn_mode (const ir_node *node) +__get_irn_mode (const ir_node *node) { assert (node); return node->mode; } /** - * Gets the op of a node. + * Sets the mode of a node. + * Intern version of libFirm. + */ +static INLINE void +__set_irn_mode (ir_node *node, ir_mode *mode) +{ + assert (node); + node->mode = mode; +} + +/** + * Gets the visited counter of a node. * Intern version for libFirm. */ -static INLINE ir_op * -intern_get_irn_op (const ir_node *node) +static INLINE unsigned long +__get_irn_visited (const ir_node *node) { assert (node); - return node->op; + return node->visited; } /** - * Gets the opcode of a node. + * Sets the visited counter of a node. * Intern version for libFirm. */ -static INLINE opcode -intern_get_irn_opcode (const ir_node *node) +static INLINE void +__set_irn_visited (ir_node *node, unsigned long visited) { - assert (k_ir_node == get_kind(node)); - assert (node -> op); - return node->op->code; + assert (node); + node->visited = visited; +} + +/** + * Mark a node as visited in a graph. + * Intern version for libFirm. + */ +static INLINE void +__mark_irn_visited (ir_node *node) { + assert (node); + node->visited = current_ir_graph->visited; +} + +/** + * Returns non-zero if a node of was visited. + * Intern version for libFirm. + */ +static INLINE int +__irn_visited(const ir_node *node) { + assert (node); + return (node->visited >= current_ir_graph->visited); } +/** + * Returns non-zero if a node of was NOT visited. + * Intern version for libFirm. + */ +static INLINE int +__irn_not_visited(const ir_node *node) { + assert (node); + return (node->visited < current_ir_graph->visited); +} + +/** + * Sets the link of a node. + * Intern version of libFirm. + */ +static INLINE void +__set_irn_link(ir_node *node, void *link) { + assert (node); + /* Link field is used for Phi construction and various optimizations + in iropt. */ + assert(get_irg_phase_state(current_ir_graph) != phase_building); + + node->link = link; +} + +/** + * Returns the link of a node. + * Intern version of libFirm. + */ +static INLINE void * +__get_irn_link(const ir_node *node) { + assert (node); + return node->link; +} +/* this section MUST contain all inline functions */ +#define is_ir_node(thing) __is_ir_node(thing) +#define get_irn_intra_arity(node) __get_irn_intra_arity(node) +#define get_irn_inter_arity(node) __get_irn_inter_arity(node) +#define get_irn_arity(node) __get_irn_arity(node) +#define get_irn_intra_n(node, n) __get_irn_intra_n(node, n) +#define get_irn_inter_n(node, n) __get_irn_inter_n(node, n) +#define get_irn_n(node, n) __get_irn_n(node, n) +#define get_irn_mode(node) __get_irn_mode(node) +#define set_irn_mode(node, mode) __set_irn_mode(node, mode) +#define get_irn_op(node) __get_irn_op(node) +#define get_irn_opcode(node) __get_irn_opcode(node) +#define get_irn_visited(node) __get_irn_visited(node) +#define set_irn_visited(node, v) __set_irn_visited(node, v) +#define mark_irn_visited(node) __mark_irn_visited(node) +#define irn_visited(node) __irn_visited(node) +#define irn_not_visited(node) __irn_not_visited(node) +#define set_irn_link(node, link) __set_irn_link(node, link) +#define get_irn_link(node) __get_irn_link(node) # endif /* _IRNODE_T_H_ */