On Tue, Oct 11, 2016 at 09:39:10AM -0500, Aaron Sawdey wrote: > Gcc 7 trunk was generating incorrect code for spec2k6 403.gcc due to > this constraint issue. OK for trunk after bootstrap/regtest passes? > > 2016-10-06 Aaron Sawdey <acsaw...@linux.vnet.ibm.com> > > PR target/77934 > * config/rs6000/vmx.md (vsx_concat_<mode>): The mtvsrdd instruction > needs a base register for arg 1. > > > Index: gcc/config/rs6000/vsx.md > =================================================================== > --- gcc/config/rs6000/vsx.md (revision 240994) > +++ gcc/config/rs6000/vsx.md (working copy) > @@ -1938,7 +1938,7 @@ > (define_insn "vsx_concat_<mode>" > [(set (match_operand:VSX_D 0 "gpc_reg_operand" "=<VSa>,we") > (vec_concat:VSX_D > - (match_operand:<VS_scalar> 1 "gpc_reg_operand" "<VS_64reg>,r") > + (match_operand:<VS_scalar> 1 "gpc_reg_operand" "<VS_64reg>,b") > (match_operand:<VS_scalar> 2 "gpc_reg_operand" "<VS_64reg>,r")))]
That does else if (which_alternative == 1) return (BYTES_BIG_ENDIAN ? "mtvsrdd %x0,%1,%2" : "mtvsrdd %x0,%2,%1"); so you need the same for operand 2 as well? Okay with that change. Thanks, Segher