On Wed, 2015-03-25 at 17:56 -0400, David Edelsohn wrote: > On Wed, Mar 25, 2015 at 12:42 PM, Bill Schmidt > <wschm...@linux.vnet.ibm.com> wrote: > > Hi, > > > > The POWER-specific little-endian swap optimization pass has been burning > > in on mainline since last August. Since then there have been a few > > improvements and bug fixes, but the code is very stable. I've had some > > recent requests to get this code backported to 4.9, as it provides > > important performance benefits for vector computation. > > > > Most of the work is target-specific, but there are some > > target-independent changes to convert web.c to use a class structure so > > that this pass can inherit it. This has caused no problems and was not > > controversial when added to trunk. > > > > The rest of the patch is straightforward backporting of the > > target-specific pieces and test cases. There have been a few > > infrastructural changes to adjust to, but nothing major. > > > > After this goes in, I'll work on taking it back to 4.8 as well. OK for > > 4.9? > > > > Thanks, > > Bill > > > > > > gcc: > > > > 2015-03-25 Bill Schmidt <wschm...@linux.vnet.ibm.com> > > > > Backport of r214242, r214254, and bug fix patches from mainline > > * config/rs6000/rs6000.c (context.h): New #include. > > (tree-pass.h): Likewise. > > (make_pass_analyze_swaps): New declaration. > > (rs6000_option_override): Register swap-optimization pass. > > (swap_web_entry): New class. > > (special_handling_values): New enum. > > (union_defs): New function. > > (union_uses): Likewise. > > (insn_is_load_p): Likewise. > > (insn_is_store_p): Likewise. > > (insn_is_swap_p): Likewise. > > (rtx_is_swappable_p): Likewise. > > (insn_is_swappable_p): Likewise. > > (chain_purpose): New enum. > > (chain_contains_only_swaps): New function. > > (mark_swaps_for_removal): Likewise. > > (swap_const_vector_halves): Likewise. > > (adjust_subreg_index): Likewise. > > (permute_load): Likewise. > > (permute_store): Likewise. > > (adjust_extract): Likewise. > > (adjust_splat): Likewise. > > (handle_special_swappables): Likewise. > > (replace_swap_with_copy): Likewise. > > (dump_swap_insn_table): Likewise. > > (rs6000_analyze_swaps): Likewise. > > (pass_data_analyze_swaps): New pass_data. > > (pass_analyze_swaps): New class. > > (pass_analyze_swaps::gate): New method. > > (pass_analyze_swaps::execute): New method. > > (make_pass_analyze_swaps): New function. > > * config/rs6000/rs6000.opt (moptimize-swaps): New option. > > * df.h (web_entry_base): New class, replacing struct web_entry. > > (web_entry_base::pred): New method. > > (web_entry_base::set_pred): Likewise. > > (web_entry_base::unionfind_root): Likewise. > > (web_entry_base::unionfind_union): Likewise. > > (unionfind_root): Delete external reference. > > (unionfind_union): Likewise. > > (union_defs): Likewise. > > * web.c (web_entry_base::unionfind_root): Convert to method. > > (web_entry_base::unionfind_union): Likewise. > > (web_entry): New class. > > (union_match_dups): Convert to use class structure. > > (union_defs): Likewise. > > (entry_register): Likewise. > > (web_main): Likewise. > > > > [testsuite] > > > > 2015-03-25 Bill Schmidt <wschm...@linux.vnet.ibm.com> > > > > Backport r214254 and related tests from mainline > > * gcc.target/powerpc/swaps-p8-1.c: New test. > > * gcc.target/powerpc/swaps-p8-2.c: New test. > > * gcc.target/powerpc/swaps-p8-3.c: New test. > > * gcc.target/powerpc/swaps-p8-4.c: New test. > > * gcc.target/powerpc/swaps-p8-5.c: New test. > > * gcc.target/powerpc/swaps-p8-6.c: New test. > > * gcc.target/powerpc/swaps-p8-7.c: New test. > > * gcc.target/powerpc/swaps-p8-8.c: New test. > > * gcc.target/powerpc/swaps-p8-9.c: New test. > > * gcc.target/powerpc/swaps-p8-10.c: New test. > > * gcc.target/powerpc/swaps-p8-11.c: New test. > > * gcc.target/powerpc/swaps-p8-12.c: New test. > > * gcc.target/powerpc/swaps-p8-13.c: New test. > > * gcc.target/powerpc/swaps-p8-14.c: New test. > > * gcc.target/powerpc/swaps-p8-15.c: New test. > > * gcc.target/powerpc/swaps-p8-16.c: New test. > > * gcc.target/powerpc/swaps-p8-17.c: New test. > > Okay. > > However, I was hoping to perform the backport of both this piece and > your newer swapping patches together, but those patches cannot go in > until GCC 5 is released and trunk is re-opened for non-bug fix > patches. Once some of the optimizations are applied, users complain > about other extraneous swaps addressed by your next set of patches.
Thanks, David. I agree, and that was my original plan until we had some customer requests. Hopefully things will stay on track with GCC 5 and I'll be able to get those patches in fairly soon afterwards. Meanwhile, please route any complaints my way and I'll be happy to explain the situation! Bill > > Thanks, David >