- ir_node *pred = get_Block_cfgpred_block(block, i);
- block_info_t *pred_info = get_block_info(pred);
+ ir_node *pred = get_Block_cfgpred_block(block, i);
+ block_info_t *pred_info = get_block_info(pred);
+ ir_node *need_state = block_info->start_state;
+
+ if(need_state == NULL)
+ continue;
+
+ if(is_Phi(need_state) && get_nodes_block(need_state) == block) {
+ need_state = get_irn_n(need_state, i);
+ }
+
+ DBG((dbg, LEVEL_3, " Pred %+F (ends in %+F, we need %+F)\n", pred,
+ pred_info->end_state, need_state));