On Tue, Dec 17, 2019 at 12:02:46PM -0600, Segher Boessenkool wrote:
> >  ;; Variable V2DI/V2DF extract
> >  (define_insn_and_split "vsx_extract_<mode>_var"
> > -  [(set (match_operand:<VS_scalar> 0 "gpc_reg_operand" "=v,wa,r")
> > -   (unspec:<VS_scalar> [(match_operand:VSX_D 1 "input_operand" "v,m,m")
> > -                        (match_operand:DI 2 "gpc_reg_operand" "r,r,r")]
> > -                       UNSPEC_VSX_EXTRACT))
> > -   (clobber (match_scratch:DI 3 "=r,&b,&b"))
> > -   (clobber (match_scratch:V2DI 4 "=&v,X,X"))]
> > +  [(set (match_operand:<VS_scalar> 0 "gpc_reg_operand" "=v,wa,r,wa,r")
> > +   (unspec:<VS_scalar>
> > +    [(match_operand:VSX_D 1 "input_operand" "v,em,em,ep,ep")
> > +     (match_operand:DI 2 "gpc_reg_operand" "r,r,r,r,r")]
> > +    UNSPEC_VSX_EXTRACT))
> > +   (clobber (match_scratch:DI 3 "=r,&b,&b,&b,&b"))
> > +   (clobber (match_scratch:V2DI 4 "=&v,X,X,X,X"))
> > +   (clobber (match_scratch:DI 5 "=X,X,X,&b,&b"))]
> >    "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_DIRECT_MOVE_64BIT"
> >    "#"
> >    "&& reload_completed"
> >    [(const_int 0)]
> >  {
> >    rs6000_split_vec_extract_var (operands[0], operands[1], operands[2],
> > -                           operands[3], operands[4]);
> > +                           operands[3], operands[4], operands[5]);
> 
> This writes to operands[2], which does not match its constraint.
> 
> Same in the other splitters.

Right.  Good catch.

-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meiss...@linux.ibm.com, phone: +1 (978) 899-4797

Reply via email to