Let dfs() discover only memory nodes
[libfirm] / ir / ir / irnode.c
index 616211a..7f90a40 100644 (file)
@@ -664,6 +664,13 @@ set_nodes_block(ir_node *node, ir_node *block) {
        set_irn_n(node, -1, block);
 }
 
+/* this works for all except Block */
+ir_node *
+get_nodes_MacroBlock(const ir_node *node) {
+       assert(node->op != op_Block);
+       return get_Block_MacroBlock(get_irn_n(node, -1));
+}
+
 /* Test whether arbitrary node is frame pointer, i.e. Proj(pn_Start_P_frame_base)
  * from Start.  If so returns frame type, else Null. */
 ir_type *is_frame_pointer(ir_node *n) {
@@ -791,6 +798,7 @@ set_Block_graph_arr (ir_node *node, int pos, ir_node *value) {
        node->attr.block.graph_arr[pos+1] = value;
 }
 
+#ifdef INTERPROCEDURAL_VIEW
 void set_Block_cg_cfgpred_arr(ir_node *node, int arity, ir_node *in[]) {
        assert(node->op == op_Block);
        if (node->attr.block.in_cg == NULL || arity != ARR_LEN(node->attr.block.in_cg) - 1) {
@@ -835,6 +843,7 @@ void remove_Block_cg_cfgpred_arr(ir_node *node) {
        assert(node->op == op_Block);
        node->attr.block.in_cg = NULL;
 }
+#endif
 
 ir_node *(set_Block_dead)(ir_node *block) {
        return _set_Block_dead(block);
@@ -860,8 +869,13 @@ void set_Block_extbb(ir_node *block, ir_extblk *extblk) {
 
 /* returns the macro block header of a block. */
 ir_node *get_Block_MacroBlock(const ir_node *block) {
+       ir_node *mbh;
        assert(is_Block(block));
-       return get_irn_n(block, -1);
+       mbh = get_irn_n(block, -1);
+       /* once macro block header is respected by all optimizations,
+          this assert can be removed */
+       assert(mbh != NULL);
+       return mbh;
 }
 
 /* returns the graph of a Block. */
@@ -1608,19 +1622,9 @@ set_binop_right(ir_node *node, ir_node *right) {
        set_irn_n(node, node->op->op_index + 1, right);
 }
 
-int is_Phi(const ir_node *n) {
-       ir_op *op;
-
-       assert(n);
-       op = get_irn_op(n);
-
-       if (op == op_Filter) return get_interprocedural_view();
-
-       if (op == op_Phi)
-               return ((get_irg_phase_state(get_irn_irg(n)) !=  phase_building) ||
-                       (get_irn_arity(n) > 0));
-
-       return 0;
+int
+(is_Phi)(const ir_node *n) {
+       return _is_Phi(n);
 }
 
 int is_Phi0(const ir_node *n) {
@@ -2834,7 +2838,7 @@ int
 }
 
 int
-is_Proj(const ir_node *node) {
+(is_Proj)(const ir_node *node) {
        assert(node);
        return node->op == op_Proj ||
               (!get_interprocedural_view() && node->op == op_Filter);