This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Simplify a VEC_SELECT fed by its own inverse


On Mon, 2014-04-21 at 13:48 -0700, Richard Henderson wrote:
> On 04/21/2014 01:19 PM, Bill Schmidt wrote:
> > +      if (GET_CODE (trueop0) == VEC_SELECT
> > +	  && GET_MODE (XEXP (trueop0, 0)) == mode)
> > +	{
> > +	  rtx op0_subop1 = XEXP (trueop0, 1);
> > +	  gcc_assert (GET_CODE (op0_subop1) == PARALLEL);
> > +	  gcc_assert (XVECLEN (trueop1, 0) == GET_MODE_NUNITS (mode));
> > +
> > +	  /* Apply the outer ordering vector to the inner one.  (The inner
> > +	     ordering vector is expressly permitted to be of a different
> > +	     length than the outer one.)  If the result is { 0, 1, ..., n-1 }
> > +	     then the two VEC_SELECTs cancel.  */
> > +	  for (int i = 0; i < XVECLEN (trueop1, 0); ++i)
> > +	    {
> > +	      rtx x = XVECEXP (trueop1, 0, i);
> > +	      gcc_assert (CONST_INT_P (x));
> > +	      rtx y = XVECEXP (op0_subop1, 0, INTVAL (x));
> > +	      gcc_assert (CONST_INT_P (y));
> 
> In two places you're asserting that you've got a constant permutation.  Surely
> there should be a non-assertion check and graceful exit for either select to be
> a variable permutation.

Ah.  I was not aware this was even a possibility.  From rtl.def:

/* Describes an operation that selects parts of a vector.                       
   Operands 0 is the source vector, operand 1 is a PARALLEL that contains       
   a CONST_INT for each of the subparts of the result vector, giving the        
   number of the source subpart that should be stored into it.  */              
DEF_RTL_EXPR(VEC_SELECT, "vec_select", "ee", RTX_BIN_ARITH)                     

If variable permutations are possible with VEC_SELECT, then I suppose
this commentary should be updated.  The GCC internals document contains
similar text in section 13.12.

I'll rebuild the patch per your comments tomorrow.  Thanks for letting
me know about this!

Regards,
Bill

> 
> 
> r~
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]