On Mon, Sep 30, 2013 at 10:04 PM, Bill Schmidt <[email protected]> wrote: > This patch implements support for VSX vector loads and stores in little > endian mode. VSX loads and stores permute the register image with > respect to storage in a unique manner that is not truly little endian. > This can cause problems (for example, when a vector appears in a union > with a different type). This patch adds an explicit permute to each VSX > load and store instruction so that the register image is true little > endian. > > It is desirable to remove redundant pairs of permutes where legal to do > so. This work is delayed to a later patch. > > This patch currently has no effect on generated code because -mvsx is > disabled in little endian mode, pending fixes of additional problems > with little endian code generation. > > I tested this by enabling -mvsx in little endian mode and running the > regression bucket. Using a GCC code base from August 5, I observed that > this patch corrected 187 failures and exposed a new regression. > Investigation showed that the regression is not directly related to the > patch. > > Unfortunately the results are not as good on current trunk. It appears > we have introduced some more problems for little endian code generation > since August 5th, which hides the effectiveness of the patch; most of > the VSX vector tests still fail with the patch applied to current trunk. > There are a handful of additional regressions, which again are not > directly related to the patch. I feel that the patch is well-tested by > the August 5 results, and would like to commit it before continuing to > investigate the recently introduced problems. > > I also bootstrapped and tested the patch on a big-endian machine > (powerpc64-unknown-linux-gnu) to verify that I introduced no regressions > in that environment. > > Ok for trunk? > > Thanks, > Bill > > > gcc: > > 2013-09-30 Bill Schmidt <[email protected]> > > * config/rs6000/vector.md (mov<mode>): Emit permuted move > sequences for LE VSX loads and stores at expand time. > * config/rs6000/rs6000-protos.h (rs6000_emit_le_vsx_move): New > prototype. > * config/rs6000/rs6000.c (rs6000_const_vec): New. > (rs6000_gen_le_vsx_permute): New. > (rs6000_gen_le_vsx_load): New. > (rs6000_gen_le_vsx_store): New. > (rs6000_gen_le_vsx_move): New. > * config/rs6000/vsx.md (*vsx_le_perm_load_v2di): New. > (*vsx_le_perm_load_v4si): New. > (*vsx_le_perm_load_v8hi): New. > (*vsx_le_perm_load_v16qi): New. > (*vsx_le_perm_store_v2di): New. > (*vsx_le_perm_store_v4si): New. > (*vsx_le_perm_store_v8hi): New. > (*vsx_le_perm_store_v16qi): New. > (*vsx_xxpermdi2_le_<mode>): New. > (*vsx_xxpermdi4_le_<mode>): New. > (*vsx_xxpermdi8_le_V8HI): New. > (*vsx_xxpermdi16_le_V16QI): New. > (*vsx_lxvd2x2_le_<mode>): New. > (*vsx_lxvd2x4_le_<mode>): New. > (*vsx_lxvd2x8_le_V8HI): New. > (*vsx_lxvd2x16_le_V16QI): New. > (*vsx_stxvd2x2_le_<mode>): New. > (*vsx_stxvd2x4_le_<mode>): New. > (*vsx_stxvd2x8_le_V8HI): New. > (*vsx_stxvd2x16_le_V16QI): New. > > gcc/testsuite: > > 2013-09-30 Bill Schmidt <[email protected]> > > * gcc.target/powerpc/pr43154.c: Skip for ppc64 little endian. > * gcc.target/powerpc/fusion.c: Likewise.
Okay. Thanks, David
