Revert "Prevent SSA construction from running into endless loops."
authorSebastian Buchwald <Sebastian.Buchwald@kit.edu>
Tue, 11 Sep 2012 17:00:40 +0000 (19:00 +0200)
committerSebastian Buchwald <Sebastian.Buchwald@kit.edu>
Wed, 12 Sep 2012 07:05:56 +0000 (09:05 +0200)
This reverts commit 2a018b8111bd0596816c1d00c38a0024857753f7.

Unreachable loops always have a loop entry edge and thus a Phi node.

ir/ir/ircons.c

index cd3864f..852774a 100644 (file)
@@ -230,8 +230,6 @@ static ir_node *set_phi_arguments(ir_node *phi, int pos)
                if (is_Bad(cfgpred)) {
                        value = new_r_Bad(irg, mode);
                } else {
-                       inc_irg_visited(irg);
-
                        value = get_r_value_internal(cfgpred, pos, mode);
                }
                in[i] = value;
@@ -268,12 +266,6 @@ static ir_node *get_r_value_internal(ir_node *block, int pos, ir_mode *mode)
        if (res != NULL)
                return res;
 
-       /* We ran into a cycle. This may happen in unreachable loops. */
-       if (irn_visited_else_mark(block)) {
-               /* Since the loop is unreachable, return a Bad. */
-               return new_r_Bad(irg, mode);
-       }
-
        /* in a matured block we can immediately determine the phi arguments */
        if (get_Block_matured(block)) {
                int arity = get_irn_arity(block);
@@ -523,7 +515,6 @@ ir_node *get_r_value(ir_graph *irg, int pos, ir_mode *mode)
 {
        assert(get_irg_phase_state(irg) == phase_building);
        assert(pos >= 0);
-       inc_irg_visited(irg);
 
        return get_r_value_internal(irg->current_block, pos + 1, mode);
 }
@@ -604,7 +595,6 @@ void set_value(int pos, ir_node *value)
 ir_node *get_r_store(ir_graph *irg)
 {
        assert(get_irg_phase_state(irg) == phase_building);
-       inc_irg_visited(irg);
        return get_r_value_internal(irg->current_block, 0, mode_M);
 }