remove #if 0 around arch_get_irn_ops, no idea why it was there...
[libfirm] / ir / be / beblocksched.c
index 507fc07..69422b5 100644 (file)
@@ -147,8 +147,10 @@ static void collect_egde_frequency(ir_node *block, void *data)
        arity = get_Block_n_cfgpreds(block);
 
        if (arity == 0) {
-               assert(block == get_irg_start_block(env->irg));
-               /* must be the start block, nothing to do here */
+               assert(block == get_irg_start_block(env->irg)
+                               || block == get_irg_end_block(env->irg));
+               /* must be the start block (or end-block for endless loops), nothing to
+                * do here */
                return;
        } else if (arity == 1) {
                edge.block            = block;
@@ -201,18 +203,19 @@ static void coalesce_blocks(blocksched_env_t *env)
        for (i = 0; i < edge_count; ++i) {
                const edge_t *edge  = &env->edges[i];
                ir_node      *block = edge->block;
+               int           pos   = edge->pos;
                ir_node      *pred_block;
                blocksched_entry_t *entry, *pred_entry;
 
-               /* the block might have been removed already... */
-               if (is_Bad(get_Block_cfgpred(block, 0)))
-                       continue;
-
                /* only check edge with highest frequency */
                if (! edge->highest_execfreq)
                        continue;
 
-               pred_block = get_Block_cfgpred_block(block, edge->pos);
+               /* the block might have been removed already... */
+               if (is_Bad(get_Block_cfgpred(block, 0)))
+                       continue;
+
+               pred_block = get_Block_cfgpred_block(block, pos);
                entry      = get_irn_link(block);
                pred_entry = get_irn_link(pred_block);
 
@@ -242,8 +245,8 @@ static void coalesce_blocks(blocksched_env_t *env)
                if (is_Bad(get_Block_cfgpred(block, 0)))
                        continue;
 
-               /* we can't fallthroughs in backedges */
-               if (is_backedge(block, edge->pos))
+               /* we can't do fallthroughs in backedges */
+               if (is_backedge(block, pos))
                        continue;
 
                pred_block = get_Block_cfgpred_block(block, pos);