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)) {
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)"
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