This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: m68k bootstrap problem


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)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]