- for (i = 0; i < n; ++i)
- if (get_irn_op(get_Block_cfgpred(retbl, i)) != op_Jmp)
- return 0;
-
- /* if we have 0 control flow predecessors, we cannot move :-) */
- return n > 0;
+ if (n <= 1)
+ return 0;
+ for (i = 0; i < n; ++i) {
+ ir_node *pred = get_Block_cfgpred(retbl, i);
+
+ pred = skip_Tuple(pred);
+ if (! is_Jmp(pred) && !is_Bad(pred)) {
+ /* simply place a new block here */
+ ir_graph *irg = get_irn_irg(retbl);
+ ir_node *block = new_r_Block(irg, 1, &pred);
+ ir_node *jmp = new_r_Jmp(irg, block);
+ set_Block_cfgpred(retbl, i, jmp);
+ }
+ }
+ return 1;