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