[patch] Move add_case_node logic from stmt.c to gimplify.c

H.J. Lu hjl.tools@gmail.com
Sat Apr 28 15:21:00 GMT 2012


On Tue, Apr 17, 2012 at 3:11 PM, Steven Bosscher <stevenb.gcc@gmail.com> wrote:
> On Wed, Apr 18, 2012 at 12:04 AM, Steven Bosscher <stevenb.gcc@gmail.com> wrote:
>> Hello,
>>
>> This is another step towards moving GIMPLE_SWITCH expansion to an
>> earlier point in the pipeline.
>>
>> With the attached patch, some of the logic from stmt.c:add_case_node()
>> is moved to gimplify.c:gimplify_switch_expr(). This includes:
>>
>> * Code to drop case labels that are out of range for the switch index
>> expression. (Actually, I suspect this code hasn't worked properly
>> since gimplification was introduced, because the switch index
>> expression can be promoted by language specific gimplification, so
>> expand_case never actually sees the proper type with the current
>> implementation in stmt.c.)
>>
>> * Code to fold_convert case label values to the right type. I've opted
>> to go for folding to the original type of the SWITCH_EXPR, rather than
>> to the post-gimplification switch index type.
>>
>> * Code to canonicalize CASE_LABEL's subnodes, CASE_LOW and CASE_HIGH.
>> I've chosen to impose strict requirements that CASE_HIGH > CASE_LOW if
>> CASE_HIGH is non-zero. This is different from what add_case_node does,
>> but I think it makes sense to go for the minimal representation here:
>> The case labels in stmt.c never lived very long (only during expand)
>> but GIMPLE_SWITCH statements stay around for much of the compilation
>> process and can also be streamed out, etc.
>>
>> Bootstrapped and tested on powerpc-unknown-linux-gnu. OK for trunk?
>>
>> Ciao!
>> Steven
>
> And this time with the right subject and the right patch attached.
> Sorry for the inconvenience!

This caused:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53153


-- 
H.J.



More information about the Gcc-patches mailing list