reuse is_switch_Cond function
[libfirm] / ir / ana / irouts.c
index cb32aa9..d2ff583 100644 (file)
@@ -68,7 +68,7 @@ int get_irn_n_outs(const ir_node *node)
 {
        assert(node && node->kind == k_ir_node);
 #ifdef DEBUG_libfirm
-       /* assert(node->out_valid); */
+       assert(node->out_valid);
 #endif /* defined DEBUG_libfirm */
        /* we misuse the first for the size info of the out array */
        return node->out[0].pos;
@@ -79,7 +79,7 @@ ir_node *get_irn_out(const ir_node *def, int pos)
 {
        assert(pos >= 0 && pos < get_irn_n_outs(def));
 #ifdef DEBUG_libfirm
-       /* assert(def->out_valid); */
+       assert(def->out_valid);
 #endif /* defined DEBUG_libfirm */
        return def->out[pos+1].use;
 }
@@ -89,7 +89,7 @@ ir_node *get_irn_out_ex(const ir_node *def, int pos, int *in_pos)
 {
        assert(pos >= 0 && pos < get_irn_n_outs(def));
 #ifdef DEBUG_libfirm
-       /* assert(def->out_valid); */
+       assert(def->out_valid);
 #endif /* defined DEBUG_libfirm */
        *in_pos = def->out[pos+1].pos;
        return def->out[pos+1].use;
@@ -100,7 +100,7 @@ void set_irn_out(ir_node *def, int pos, ir_node *use, int in_pos)
        assert(def && use);
        assert(pos >= 0 && pos < get_irn_n_outs(def));
 #ifdef DEBUG_libfirm
-       def->out_valid = 1;          /* assume that this function is used correctly */
+       assert(def->out_valid);
 #endif /* defined DEBUG_libfirm */
        def->out[pos+1].use = use;
        def->out[pos+1].pos = in_pos;
@@ -116,7 +116,7 @@ int get_Block_n_cfg_outs(const ir_node *bl)
 #endif /* defined DEBUG_libfirm */
        for (i = 1; i <= bl->out[0].pos; ++i) {
                ir_node *succ = bl->out[i].use;
-               if (get_irn_mode(succ) == mode_X && !is_End(succ))
+               if (get_irn_mode(succ) == mode_X && !is_End(succ) && !is_Bad(succ))
                        n_cfg_outs += succ->out[0].pos;
        }
        return n_cfg_outs;
@@ -133,7 +133,8 @@ int get_Block_n_cfg_outs_ka(const ir_node *bl)
        for (i = 1; i <= bl->out[0].pos; ++i) {
                ir_node *succ = bl->out[i].use;
                if (get_irn_mode(succ) == mode_X) {
-
+                       if (is_Bad(succ))
+                               continue;
                        if (is_End(succ)) {
                                /* ignore End if we are in the Endblock */
                                if (get_nodes_block(succ) == bl)
@@ -157,7 +158,7 @@ ir_node *get_Block_cfg_out(const ir_node *bl, int pos)
 #endif /* defined DEBUG_libfirm */
        for (i = 1; i <= bl->out[0].pos; ++i) {
                ir_node *succ = bl->out[i].use;
-               if (get_irn_mode(succ) == mode_X && !is_End(succ)) {
+               if (get_irn_mode(succ) == mode_X && !is_End(succ) && !is_Bad(succ)) {
                        int n_outs = succ->out[0].pos;
                        if (pos < n_outs)
                                return succ->out[pos + 1].use;
@@ -179,6 +180,8 @@ ir_node *get_Block_cfg_out_ka(const ir_node *bl, int pos)
        for (i = 1; i <= bl->out[0].pos; ++i) {
                ir_node *succ = bl->out[i].use;
                if (get_irn_mode(succ) == mode_X) {
+                       if (is_Bad(succ))
+                               continue;
                        if (is_End(succ)) {
                                ir_node *end_bl = get_nodes_block(succ);
                                if (end_bl == bl) {