X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firnode_t.h;h=5d3e42ee5c118abcd06c9dbedf21f80d859c9efc;hb=8f355cb9b3d20c10f71d1b1e17cbf59a51ced83b;hp=d4df608d902d6a8d628b626881332ccc2b19ffe0;hpb=20a054e20083e0b0e996aceabf561254c663277a;p=libfirm diff --git a/ir/ir/irnode_t.h b/ir/ir/irnode_t.h index d4df608d9..5d3e42ee5 100644 --- a/ir/ir/irnode_t.h +++ b/ir/ir/irnode_t.h @@ -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. * @@ -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); @@ -508,6 +544,12 @@ _is_Tuple(const ir_node *node) { return (_get_irn_op(node) == op_Tuple); } +static INLINE int +_is_Bound(const ir_node *node) { + assert(node); + return (_get_irn_op(node) == op_Bound); +} + static INLINE int _is_Start(const ir_node *node) { assert(node); @@ -532,6 +574,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); @@ -626,6 +673,11 @@ _is_SymConst(const ir_node *node) { return (_get_irn_op(node) == op_SymConst); } +static INLINE int +_is_SymConst_addr_ent(const ir_node *node) { + return is_SymConst(node) && get_SymConst_kind(node) == symconst_addr_ent; +} + static INLINE int _is_Cond(const ir_node *node) { assert(node); @@ -686,7 +738,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 +756,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); @@ -766,22 +818,16 @@ static INLINE tarval *_get_Const_tarval(const ir_node *node) { return node->attr.con.tv; } -static INLINE cnst_classify_t _classify_Const(ir_node *node) { - ir_op *op; - assert(_is_ir_node(node)); - - op = _get_irn_op(node); +static INLINE int _is_Const_null(const ir_node *node) { + return tarval_is_null(_get_Const_tarval(node)); +} - if (op == op_Const) { - tarval *tv = _get_Const_tarval(node); - if (tarval_is_null(tv)) return CNST_NULL; - if (tarval_is_one(tv)) return CNST_ONE; - if (tarval_is_all_one(tv)) return CNST_ALL_ONE; - return CNST_OTHER; - } else if(op == op_SymConst) - return CNST_SYMCONST; +static INLINE int _is_Const_one(const ir_node *node) { + return tarval_is_one(_get_Const_tarval(node)); +} - return CNST_NO_CONST; +static INLINE int _is_Const_all_one(const ir_node *node) { + return tarval_is_all_one(_get_Const_tarval(node)); } static INLINE int _is_irn_forking(const ir_node *node) { @@ -838,7 +884,7 @@ static INLINE void _set_Cond_jmp_pred(ir_node *node, cond_jmp_predicate pred) { node->attr.cond.pred = pred; } -static INLINE int _get_Psi_n_conds(ir_node *node) { +static INLINE int _get_Psi_n_conds(const ir_node *node) { assert(_get_irn_op(node) == op_Psi); return _get_irn_arity(node) >> 1; } @@ -887,8 +933,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) @@ -902,6 +951,7 @@ static INLINE void _set_irn_dbg_info(ir_node *n, dbg_info *db) { #define is_Confirm(node) _is_Confirm(node) #define is_Pin(node) _is_Pin(node) #define is_SymConst(node) _is_SymConst(node) +#define is_SymConst_addr_ent(node) _is_SymConst_addr_ent(node) #define is_Cond(node) _is_Cond(node) #define is_CopyB(node) _is_CopyB(node) #define is_Cmp(node) _is_Cmp(node) @@ -931,6 +981,7 @@ static INLINE void _set_irn_dbg_info(ir_node *n, dbg_info *db) { #define is_Rot(node) _is_Rot(node) #define is_Psi(node) _is_Psi(node) #define is_Tuple(node) _is_Tuple(node) +#define is_Bound(node) _is_Bound(node) #define is_no_Block(node) _is_no_Block(node) #define is_Block(node) _is_Block(node) #define get_Block_n_cfgpreds(node) _get_Block_n_cfgpreds(node) @@ -944,7 +995,9 @@ static INLINE void _set_irn_dbg_info(ir_node *n, dbg_info *db) { #define set_Block_dead(block) _set_Block_dead(block) #define is_Block_dead(block) _is_Block_dead(block) #define get_Const_tarval(node) _get_Const_tarval(node) -#define classify_Const(node) _classify_Const(node) +#define is_Const_null(node) _is_Const_null(node) +#define is_Const_one(node) _is_Const_one(node) +#define is_Const_all_one(node) _is_Const_all_one(node) #define is_irn_forking(node) _is_irn_forking(node) #define get_irn_type(node) _get_irn_type(node) #define get_irn_type_attr(node) _get_irn_type_attr(node)