Andrew Pinski <[EMAIL PROTECTED]> writes:

> On Sep 5, 2005, at 6:39 PM, Richard Henderson wrote:
>
>> On Mon, Sep 05, 2005 at 02:27:54PM +0200, Andreas Krebbel wrote:
>>> (insn 31 29 49 5 (set (mem/s/j:SI (plus:SI (reg/v/f:SI 47 [ env ])
>>>                 (const_int 4 [0x4])) [0 <variable>.ex+0 S4 A32])
>>>         (mem/f:SI (plus:SI (plus:SI (reg:SI 55)
>>>                     (reg:SI 56))
>>>                 (const_int 4092 [0xffc])) [0 S4 A32]))
>>
>> Guh.
>>
>> Well, I suppose this is no different from a fp arith insn with a
>> pre-reload memory input that gets reloaded into a register.  I
>> suppose there's no invariant that I can enforce.
>>
>> If you look at the version of fixup_abnormal_edges before my patch
>> you'll see a bit that calls find_many_sub_blocks; re-add that hunk
>> and remove the assert in fixup_eh_region_note, then re-test.
>
> Well find_many_sub_blocks will not find new BBs as the EH_REGION is an
> external throw and not internal throw.
> I think the following patch should fix the problem without any effects.
> It just adds the check to make sure that we have internal throw when
> checking
> the trap_count.
>
> Andreas, could you check this patch?
>
> Richard, what do you think about this patch?
>
> It fixes jni.ii for me.
>
> -- Pinski
>
>
> Index: reload1.c
> ===================================================================
> RCS file: /cvs/gcc/gcc/gcc/reload1.c,v
> retrieving revision 1.481
> diff -u -p -r1.481 reload1.c
> --- reload1.c 1 Sep 2005 23:35:18 -0000       1.481
> +++ reload1.c 6 Sep 2005 03:31:48 -0000
> @@ -3769,6 +3769,7 @@ fixup_eh_region_note (rtx insn, rtx prev
>    rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
>    unsigned int trap_count;
>    rtx i;
> +  int internal_throw = can_throw_internal (insn);
>  
>    if (note == NULL)
>      return;
> @@ -3805,7 +3806,7 @@ fixup_eh_region_note (rtx insn, rtx prev
>  
>       Fixing all that is not in the cards for gcc 4.2, so for the nonce we
>       allow all eh insns to evaporate.  */
> -  gcc_assert (trap_count <= 1);
> +  gcc_assert (!internal_throw || trap_count <= 1);
>  }
>  
>  /* Reload pseudo-registers into hard regs around each insn as needed.

 Won't this break a disabled checking build since internal_throw will become
unused?

-- 
Thanks,
Jim

http://www.csclub.uwaterloo.ca/~ja2morri/
http://phython.blogspot.com
http://open.nit.ca/wiki/?page=jim

Reply via email to