- ir_node *block = new_Block(n_exc, cf_pred);
- set_cur_block(block);
-
- set_Tuple_pred(call, pn_Call_X_except, new_Jmp());
- /* The Phi for the memories with the exception objects */
- n_exc = 0;
- for (i = 0; i < arity; i++) {
- ir_node *ret;
- ret = skip_Proj(get_Block_cfgpred(end_bl, i));
- if (is_Call(ret)) {
- cf_pred[n_exc] = new_r_Proj(get_nodes_block(ret), ret, mode_M, 3);
- n_exc++;
- } else if (is_fragile_op(ret)) {
- /* We rely that all cfops have the memory output at the same position. */
- cf_pred[n_exc] = new_r_Proj(get_nodes_block(ret), ret, mode_M, 0);
- n_exc++;
- } else if (is_Raise(ret)) {
- cf_pred[n_exc] = new_r_Proj(get_nodes_block(ret), ret, mode_M, 1);
- n_exc++;
- }
+ if (n_exc == 1) {
+ /* simple fix */
+ set_Tuple_pred(call, pn_Call_X_except, cf_pred[0]);
+ } else {
+ ir_node *block = new_Block(n_exc, cf_pred);
+ set_cur_block(block);
+ set_Tuple_pred(call, pn_Call_X_except, new_Jmp());