add an get_irg_idx
[libfirm] / ir / ir / irnode_t.h
index 7aa1901..acd9bc4 100644 (file)
@@ -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)