What do do with the exceptional case of expand_case for SJLJ exceptions

Steven Bosscher stevenb.gcc@gmail.com
Sat May 12 13:56:00 GMT 2012


On Sat, May 12, 2012 at 3:49 PM, Jan Hubicka <hubicka@ucw.cz> wrote:
>> On Wed, Apr 18, 2012 at 2:44 PM, Richard Henderson <rth@redhat.com> wrote:
>> > On 04/18/2012 05:39 AM, Jan Hubicka wrote:
>> >> Well, if SJLJ lowering happens as gimple pass somewhere near the end of gimple
>> >> queue, this should not be problem at all. (and implementation would be cleaner)
>> >
>> > If you can find a clean way of separating sjlj expansion from dw2 expansion,
>> > please do.  But there's a lot of code shared between the two.  I see nothing
>> > wrong with always expanding via tablejump.
>>
>> In that case, would something like the following patch be acceptable?
>> I have verified that all targets that always set
>> TARGET_EXCEPT_UNWIND_INFO define casesi and/or tablejump.
>>
>>
>>         * toplev.c (process_options): Fail for sjlj exceptions if the
>> target machine
>>         has no casesi insn and no tablejump insn.
>
> Isn't SJLJ used by default for Ada on all targets?

Would that make a difference for whether this patch is OK or not?

I also have no problems leaving the switch expanding code in stmt.c,
and just adding new code for switch lowering as a GIMPLE pass. That
way (of least resistance) SJLJ exception dispatches can continue to be
expanded as decision trees. Just tell me what you want.

Ciao!
Steven



More information about the Gcc mailing list