[PATCH, rs6000] Add handling for UNSPEC_VSPLT_DIRECT to analyze_swaps

David Edelsohn dje.gcc@gmail.com
Mon Sep 8 18:05:00 GMT 2014

On Sat, Sep 6, 2014 at 1:50 PM, Bill Schmidt
<wschmidt@linux.vnet.ibm.com> wrote:
> Hi,
> Here's one more case of special handling that allows us to optimize more
> vectorized loops in analyze_swaps.  UNSPEC_VSPLT_DIRECT is used in some
> cases to avoid the possibility of an endian fixup.  We can still handle
> this by swapping the lane chosen as the source of the splat.
> While implementing this I realized that I had had a thinko with the
> adjust_extract changes in the last related patch.  When swapping
> doublewords, the right change is to add or subtract n_elts/2, not to
> subtract from n_elts-1.  I've corrected that issue herein as well.
> I've added a new test to demonstrate the UNSPEC_VSPLT_DIRECT case.
> Bootstrapped and tested on powerpc64le-unknown-linux-gnu with no
> regressions.  Ok for trunk?
> Thanks,
> Bill
> [gcc]
> 2014-09-06  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
>         * config/rs6000/rs6000.c (special_handling_values):  Add SH_SPLAT.
>         (rtx_is_swappable_p): Convert UNSPEC cascading ||s to a switch
>         statement; allow optimization of UNSPEC_VSPLT_DIRECT with special
>         handling SH_SPLAT.
>         (adjust_extract): Fix test for VEC_DUPLICATE case; fix adjustment
>         of extracted lane.
>         (adjust_splat): New function.
>         (handle_special_swappables): Call adjust_splat for SH_SPLAT.
>         (dump_swap_insn_table): Add case for SH_SPLAT.
> [gcc/testsuite]
> 2014-09-06  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
>         * gcc.target/powerpc/swaps-p8-16.c: New test.


thanks, David

More information about the Gcc-patches mailing list