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