rework fragile ops to have a throws_exception attribute
[libfirm] / ir / ir / irnode_t.h
index 7ea1c25..376a68e 100644 (file)
@@ -327,7 +327,7 @@ static inline op_pin_state _get_irn_pinned(const ir_node *node)
        state = _get_op_pinned(_get_irn_op(node));
 
        if (state >= op_pin_state_exc_pinned)
-               return node->attr.except.pin_state;
+               return (op_pin_state)node->attr.except.pin_state;
 
        return state;
 }
@@ -390,10 +390,14 @@ static inline ir_node *_get_Block_cfgpred(const ir_node *node, int pos)
  */
 static inline ir_node  *_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);
-       return res;
+       ir_node *res = get_Block_cfgpred(node, pos);
+       if (is_Bad(res)) {
+               /* must return a Bad with mode_BB! */
+               ir_graph *irg = get_irn_irg(node);
+               return new_r_Bad(irg, mode_BB);
+       } else {
+               return get_nodes_block(skip_Proj(res));
+       }
 }
 
 static inline ir_visited_t _get_Block_block_visited(const ir_node *node)
@@ -420,29 +424,6 @@ static inline int _Block_block_visited(const ir_node *node)
        return node->attr.block.block_visited >= get_irg_block_visited(irg);
 }
 
-static inline ir_node *_set_Block_dead(ir_node *block)
-{
-       assert(_get_irn_op(block) == op_Block);
-       block->attr.block.dom.dom_depth = -1;
-       block->attr.block.is_dead = 1;
-       return block;
-}
-
-static inline int _is_Block_dead(const ir_node *block)
-{
-       ir_op *op = _get_irn_op(block);
-
-       /* we can have Bad, Anchor and Block nodes as block input */
-       if (op == op_Bad) {
-               return 1;
-       } else if (op == op_Anchor) {
-               return 0;
-       } else {
-               assert(op == op_Block);
-               return block->attr.block.is_dead;
-       }
-}
-
 static inline ir_graph *_get_Block_irg(const ir_node *block)
 {
        assert(is_Block(block));
@@ -575,6 +556,7 @@ static inline ir_node *_get_Phi_next(const ir_node *phi)
 /** Add a Phi node to the list of Block Phi's. */
 static inline void _add_Block_phi(ir_node *block, ir_node *phi)
 {
+       assert(_is_Block(block));
        _set_Phi_next(phi, _get_Block_phis(block));
        _set_Block_phis(block, phi);
 }
@@ -604,12 +586,6 @@ static inline int _is_arg_Proj(const ir_node *node)
        return pn_Start_T_args == get_Proj_proj(node) && is_Start(get_Proj_pred(node));
 }
 
-static inline pn_Cmp _get_Proj_pn_cmp(const ir_node *node)
-{
-       assert(is_Cmp(get_Proj_pred(node)));
-       return (pn_Cmp)get_Proj_proj(node);
-}
-
 /** initialize ir_node module */
 void init_irnode(void);
 
@@ -646,8 +622,6 @@ void init_irnode(void);
 #define set_Block_block_visited(node, visit)  _set_Block_block_visited(node, visit)
 #define mark_Block_block_visited(node)        _mark_Block_block_visited(node)
 #define Block_block_visited(node)             _Block_block_visited(node)
-#define set_Block_dead(block)                 _set_Block_dead(block)
-#define is_Block_dead(block)                  _is_Block_dead(block)
 #define get_Block_irg(block)                  _get_Block_irg(block)
 #define get_Const_tarval(node)                _get_Const_tarval(node)
 #define is_Const_null(node)                   _is_Const_null(node)
@@ -693,6 +667,4 @@ void init_irnode(void);
 
 #define is_arg_Proj(node)                     _is_arg_Proj(node)
 
-#define get_Proj_pn_cmp(node)                 _get_Proj_pn_cmp(node)
-
 #endif