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
> 

Reply via email to