simplify transform_node_Mux by using is_single_bit
[libfirm] / ir / ir / irnode_t.h
index ed0a3c9..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)