This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
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
Attachment:
move_add_case_node_logic_to_gimplify.diff.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |