Bad,Unknown are no cfopcdes
authorMatthias Braun <matze@braunis.de>
Wed, 25 May 2011 12:00:00 +0000 (14:00 +0200)
committerMatthias Braun <matze@braunis.de>
Wed, 25 May 2011 12:05:25 +0000 (14:05 +0200)
ir/ir/irverify.c
scripts/ir_spec.py

index 3173a5c..b1169a4 100644 (file)
@@ -757,10 +757,11 @@ static int verify_node_Block(ir_node *n, ir_graph *irg)
        int i;
 
        for (i = get_Block_n_cfgpreds(n) - 1; i >= 0; --i) {
-               ir_node *pred = get_Block_cfgpred(n, i);
+               ir_node *pred         = get_Block_cfgpred(n, i);
+               ir_node *skipped_pred = skip_Proj(skip_Tuple(pred));
                ASSERT_AND_RET(get_irn_mode(pred) == mode_X,
                        "Block node must have a mode_X predecessor", 0);
-               ASSERT_AND_RET(is_cfop(skip_Proj(skip_Tuple(pred))), "Block predecessor must be a cfop", 0);
+               ASSERT_AND_RET(is_cfop(skipped_pred) || is_Bad(skipped_pred), "Block predecessor must be a cfop (or Bad)", 0);
        }
 
        if (n == get_irg_start_block(irg)) {
index e4b0a5d..5e47b09 100755 (executable)
@@ -146,7 +146,7 @@ class Bad(Op):
        they are set to Bad, and the actual removal is left to the control flow
        optimisation phase. Block, Phi, Tuple with only Bad inputs however are
        replaced by Bad right away."""
-       flags         = [ "cfopcode", "start_block", "dump_noblock" ]
+       flags         = [ "start_block", "dump_noblock" ]
        pinned        = "yes"
        knownBlock    = True
        block         = "get_irg_start_block(irg)"
@@ -926,7 +926,7 @@ class Unknown(Op):
        knownBlock = True
        pinned     = "yes"
        block      = "get_irg_start_block(irg)"
-       flags      = [ "cfopcode", "start_block", "constlike", "dump_noblock" ]
+       flags      = [ "start_block", "constlike", "dump_noblock" ]
 
 # Prepare node list