On Tue, 2013-07-23 at 14:02 -0400, David Edelsohn wrote: > On Mon, Jul 22, 2013 at 9:09 PM, Bill Schmidt > <wschm...@linux.vnet.ibm.com> wrote: > > > OK, currently testing the following. OK if it passes? > > > > Index: gcc/config/rs6000/rs6000.c > > =================================================================== > > --- gcc/config/rs6000/rs6000.c (revision 201149) > > +++ gcc/config/rs6000/rs6000.c (working copy) > > @@ -28518,6 +28518,11 @@ altivec_expand_vec_perm_const (rtx operands[4]) > > enum machine_mode omode = insn_data[icode].operand[0].mode; > > enum machine_mode imode = insn_data[icode].operand[1].mode; > > > > + /* For little-endian, the two input operands must be swapped > > + (or swapped back) to ensure proper right-to-left numbering > > + from 0 to 2N-1. */ > > + if (!BYTES_BIG_ENDIAN) > > + swapped = !swapped; > > if (swapped) > > x = op0, op0 = op1, op1 = x; > > if (imode != V16QImode) > > I would prefer something like > > if (swapped ^ ! BYTES_BIG_ENDIAN) ... > > to make it more clear that the test only is affecting that specific > swapping of arguments and not the other uses of "swapped" within the > loop, i.e., not the earlier pattern comparison.
OK, makes sense. I tested with that variant and everything checks out. I went ahead and committed the fix in the form you suggested. Thanks, Bill > > Thanks, David >