X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firnode_t.h;h=acd9bc4c85163e463bd8435be97b7adebb61818e;hb=203717b8dd44597fb10c126b33a28528a2432e9c;hp=7aa1901d3641095932f240f8b60000f349a4494c;hpb=3977737475ce98c71e45f363a053e47d5d1bb39d;p=libfirm diff --git a/ir/ir/irnode_t.h b/ir/ir/irnode_t.h index 7aa1901d3..acd9bc4c8 100644 --- a/ir/ir/irnode_t.h +++ b/ir/ir/irnode_t.h @@ -175,12 +175,18 @@ _get_irn_inter_arity(const ir_node *node) { return _get_irn_intra_arity(node); } +#ifdef INTERPROCEDURAL_VIEW /** * Returns the number of predecessors without the block predecessor. * Intern version for libFirm. */ extern int (*_get_irn_arity)(const ir_node *node); +#else + +#define _get_irn_arity(n) _get_irn_intra_arity(n) +#endif + /** * Intern version for libFirm. */ @@ -220,6 +226,14 @@ _get_irn_inter_n(const ir_node *node, int n) { return _get_irn_intra_n(node, n); } +/** + * returns a hash value for a node + */ +static INLINE unsigned hash_irn(const ir_node *node) +{ + return (unsigned) get_irn_idx(node); +} + /** * Access to the predecessors of a node. * To iterate over the operands iterate from 0 to i < get_irn_arity(), @@ -228,7 +242,11 @@ _get_irn_inter_n(const ir_node *node, int n) { * If it is a block, the entry -1 is NULL. * Intern version for libFirm. */ +#ifdef INTERPROCEDURAL_VIEW extern ir_node *(*_get_irn_n)(const ir_node *node, int n); +#else +#define _get_irn_n(n,i) _get_irn_intra_n(n,i) +#endif static INLINE int _get_irn_deps(const ir_node *node) { return node->deps ? ARR_LEN(node->deps) : 0; @@ -394,6 +412,24 @@ _is_binop(const ir_node *node) { return (node->op->opar == oparity_binary); } +static INLINE int +_is_Phi(const ir_node *node) { + ir_op *op; + assert(node); + + op = get_irn_op(node); +#ifdef INTERPROCEDURAL_VIEW + if (op == op_Filter) return get_interprocedural_view(); +#endif + return (op == op_Phi); +} + +static INLINE int +_is_Proj(const ir_node *node) { + assert(node); + return (_get_irn_op(node) == op_Proj); +} + static INLINE int _is_Bad(const ir_node *node) { assert(node); @@ -532,6 +568,11 @@ _is_Conv(const ir_node *node) { return (_get_irn_op(node) == op_Conv); } +static INLINE int +_is_strictConv(const ir_node *node) { + return _is_Conv(node) && get_Conv_strict(node); +} + static INLINE int _is_Cast(const ir_node *node) { assert(node); @@ -686,7 +727,7 @@ _get_Block_n_cfgpreds(const ir_node *node) { } static INLINE ir_node * -_get_Block_cfgpred(ir_node *node, int pos) { +_get_Block_cfgpred(const ir_node *node, int pos) { assert(0 <= pos && pos < get_irn_arity(node)); assert(_is_Block(node)); return _get_irn_n(node, pos); @@ -704,7 +745,7 @@ _get_Block_cfgpred(ir_node *node, int pos) { * Start, but the Bad node. */ static INLINE ir_node * -_get_Block_cfgpred_block(ir_node *node, int pos) { +_get_Block_cfgpred_block(const ir_node *node, int pos) { ir_node *res = skip_Proj(get_Block_cfgpred(node, pos)); if (!is_Bad(res)) res = get_nodes_block(res); @@ -881,8 +922,11 @@ static INLINE void _set_irn_dbg_info(ir_node *n, dbg_info *db) { #define is_irn_pinned_in_irg(node) _is_irn_pinned_in_irg(node) #define is_unop(node) _is_unop(node) #define is_binop(node) _is_binop(node) +#define is_Proj(node) _is_Proj(node) +#define is_Phi(node) _is_Phi(node) #define is_Const(node) _is_Const(node) #define is_Conv(node) _is_Conv(node) +#define is_strictConv(node) _is_strictConv(node) #define is_Cast(node) _is_Cast(node) #define is_Unknown(node) _is_Unknown(node) #define is_Return(node) _is_Return(node)