On Fri, Jun 21, 2013 at 10:37 PM, Cesar Philippidis <cesar_philippi...@mentor.com> wrote: > Here is an updated version of Tom's if-to-switch conversion pass that > was originally posted here: > > <http://gcc.gnu.org/ml/gcc-patches/2013-01/msg01210.html>. > > I corrected a build problem with ARM by including "tm_p.h" and an ICE > caused by NULL_TREE argument being passed to fold_binary () inside > refine_range_plus (). Also, TODO_ggc_collect has been removed in the > gimple_opt_pass struct. > > I bootstrapped and regression tested on x86_64-unknown-linux-gnu and > arm-none-linux-gnueabi. OK for trunk?
As we are doing switch-to-if conversion in the pass after this it looks like as if we can save us intermediate code generation if the two passes were unified? That is, have a analysis phase that populates an internal representation of the switch / cascaded if and peforms transforms based on a single analysis of that representation. I also dislike the two passes being in early optimizations - that way they do not see the effects of IPA inlining / LTO IPA-CP transforms. I'd rather move it way down towards RTL expansion (though eventually some may say that switch-conversion may enable vectorization opportunities for example). That wasn't a patch review of course. Richard. > Cesar > > > 2013-06-21 Tom de Vries <t...@codesourcery.com> > Cesar Philippidis <ce...@codesourcery.com> > > * tree-if-switch-conversion.c: New pass. > * tree-pass.h (pass_if_to_switch): Declare. > * common.opt (ftree-if-to-switch-conversion): New switch. > * opts.c (default_options_table): Set > flag_tree_if_to_switch_conversion > at -O2 and higher. > * passes.c (init_optimization_passes): Use new pass. > * doc/invoke.texi (-ftree-if-to-switch-conversion): New item. > (Optimization Options, option -O2): Add > -ftree-if-to-switch-conversion. > * Makefile.in (OBJS): Add tree-if-switch-conversion.o. > (tree-if-switch-conversion.o): New rule. > * tree.h (expand_switch_using_bit_tests_p): Declare as extern. > * tree-switch-conversion.c (expand_switch_using_bit_tests_p): Remove > static from definition. > > * gcc.dg/if-to-switch.c: New test. > * gcc.dg/if-to-switch.c-2: Same. > * gcc.dg/if-to-switch.c-3: Same. > * gcc.dg/tree-ssa/vrp33.c: Run with -fno-tree-if-to-switch-conversion. > * gcc.dg/tree-ssa/vrp63.c: Same. > * gcc.dg/tree-ssa/vrp64.c: Same. > * gcc.dg/pr21643.c: Same.