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

Reply via email to