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

Reply via email to