Hi, On Wed, 20 Jun 2007, I wrote:
> Index: gcc/df-problems.c > =================================================================== > --- gcc/df-problems.c (revision 125811) > +++ gcc/df-problems.c (working copy) > @@ -1574,7 +1574,7 @@ > /* Call-clobbered registers die across exception and call edges. */ > /* ??? Abnormal call edges ignored for the moment, as this gets > confused by sibling call edges, which crashes reg-stack. */ > - if (e->flags & EDGE_EH) > + if ((e->flags & EDGE_EH) || (e->flags & EDGE_SIBCALL)) > bitmap_ior_and_compl_into (op1, op2, df_invalidated_by_call); > else > bitmap_ior_into (op1, op2); Adding the patch below seems to make reg-stack happy, so this may be a way to fix the edge information. bye, Roman Index: gcc/gcc/reg-stack.c =================================================================== --- gcc.orig/gcc/reg-stack.c +++ gcc/gcc/reg-stack.c @@ -2316,6 +2316,12 @@ subst_stack_regs (rtx insn, stack regsta if (NOTE_P (insn) || INSN_DELETED_P (insn)) return control_flow_insn_deleted; + if (SIBLING_CALL_P (insn)) + { + CLEAR_HARD_REG_SET (regstack->reg_set); + return control_flow_insn_deleted; + } + /* If this a noreturn call, we can't insert pop insns after it. Instead, reset the stack state to empty. */ if (CALL_P (insn)