From db9740e388dc031014b63331375ebd6a89e9649c Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Wed, 28 May 2008 10:38:15 +0000 Subject: [PATCH] - added is_Filter() - fixed is_Proj() implementation - improved docu a bit [r19804] --- include/libfirm/irnode.h | 25 +++++++++++++------------ ir/ir/irnode.c | 10 +++++++--- ir/ir/irnode_t.h | 15 ++++++++++++++- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/include/libfirm/irnode.h b/include/libfirm/irnode.h index 7b7ec35f5..8e2f854c0 100644 --- a/include/libfirm/irnode.h +++ b/include/libfirm/irnode.h @@ -918,14 +918,14 @@ int is_Cast_upcast(ir_node *node); int is_Cast_downcast(ir_node *node); -/** Returns true if n is Phi or Filter in interprocedural_view. - Returns false if irg in phase building and the Phi has zero +/** Returns true if n is a Phi or a Filter node in INTER-procedural view. + Returns false if irg is in phase phase_building and the Phi has zero predecessors: it's a Phi0. */ int is_Phi(const ir_node *n); -/** Returns true if irg in phase building and the Phi has zero +/** Returns true if irg in phase phase_building and the Phi has zero predecessors. It's a Phi0 then. */ int is_Phi0(const ir_node *n); -/* These routines also work for Filter nodes in interprocedural view. */ +/* These routines also work for Filter nodes in INTER-procedural view. */ ir_node **get_Phi_preds_arr(ir_node *node); int get_Phi_n_preds(const ir_node *node); ir_node *get_Phi_pred(const ir_node *node, int pos); @@ -1128,7 +1128,7 @@ typedef enum { } pn_InstOf; #define pn_InstOf_M pn_InstOf_M_regular -/** InstOf access */ +/** InstOf access. */ ir_type *get_InstOf_type(ir_node *node); void set_InstOf_type(ir_node *node, ir_type *type); ir_node *get_InstOf_store(const ir_node *node); @@ -1310,21 +1310,22 @@ int is_SymConst(const ir_node *node); int is_SymConst_addr_ent(const ir_node *node); /** Returns true if node is a Cond node. */ int is_Cond(const ir_node *node); -/** Returns true of node is a CopyB node */ +/** Returns true of node is a CopyB node. */ int is_CopyB(const ir_node *node); /** Returns true if node is a Cmp node. */ int is_Cmp(const ir_node *node); -/** Returns true if node is an Alloc node */ +/** Returns true if node is an Alloc node. */ int is_Alloc(const ir_node *node); -/** Returns true if a node is a Jmp node */ +/** Returns true if a node is a Jmp node. */ int is_Jmp(const ir_node *node); -/** Returns true if a node is a Raise node */ +/** Returns true if a node is a Raise node. */ int is_Raise(const ir_node *node); -/** Returns true if a node is an ASM node */ +/** Returns true if a node is an ASM node. */ int is_ASM(const ir_node *node); -/** Returns true if node is a Proj node or a Filter node in - * intraprocedural view */ +/** Returns true if node is a Proj node or a Filter node in INTRA-procedural view. */ int is_Proj(const ir_node *node); +/** Returns true if node is a Filter node. */ +int is_Filter(const ir_node *node); /** Returns true if the operation manipulates control flow: Start, End, Jmp, Cond, Return, Raise, Bad, CallBegin, EndReg, EndExcept */ int is_cfop(const ir_node *node); diff --git a/ir/ir/irnode.c b/ir/ir/irnode.c index fcd336884..78e805233 100644 --- a/ir/ir/irnode.c +++ b/ir/ir/irnode.c @@ -2851,9 +2851,13 @@ int int (is_Proj)(const ir_node *node) { - assert(node); - return node->op == op_Proj || - (!get_interprocedural_view() && node->op == op_Filter); + return _is_Proj(node); +} + +/* Returns true if node is a Filter node. */ +int +(is_Filter)(const ir_node *node) { + return _is_Filter(node); } /* Returns true if the operation manipulates control flow. */ diff --git a/ir/ir/irnode_t.h b/ir/ir/irnode_t.h index 64c219365..c7858e1cc 100644 --- a/ir/ir/irnode_t.h +++ b/ir/ir/irnode_t.h @@ -423,8 +423,20 @@ _is_Phi(const ir_node *node) { static INLINE int _is_Proj(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_Proj); +} + +static INLINE int +_is_Filter(const ir_node *node) { assert(node); - return (_get_irn_op(node) == op_Proj); + return (_get_irn_op(node) == op_Filter); } static INLINE int @@ -998,6 +1010,7 @@ _set_Block_mark(ir_node *block, unsigned mark) { #define is_unop(node) _is_unop(node) #define is_binop(node) _is_binop(node) #define is_Proj(node) _is_Proj(node) +#define is_Filter(node) _is_Filter(node) #define is_Phi(node) _is_Phi(node) #define is_Const(node) _is_Const(node) #define is_Conv(node) _is_Conv(node) -- 2.20.1