Roman Zippel wrote: > 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) > so how are you coming with the 68k?
kenny