Hi!

On Tue, Jul 13, 2021 at 09:30:43PM +0200, Jakub Jelinek wrote:
>       PR target/101384
>       * config/rs6000/rs6000-protos.h (easy_altivec_constant): Change return
>       type from bool to int.
>       * config/rs6000/rs6000.c (vspltis_constant): Fix up handling the
>       EASY_VECTOR_MSB case if either step or copies is not 1.
>       (vspltis_shifted): Fix comment typo.
>       (easy_altivec_constant): Change return type from bool to int, instead
>       of returning true return byte size of the element mode that should be
>       used to synthetize the constant.
>       * config/rs6000/predicates.md (easy_vector_constant_msb): Require
>       that vspltis_shifted is 0, handle the case where easy_altivec_constant
>       assumes using different vector mode from CONST_VECTOR's mode.
>       * config/rs6000/altivec.md (easy_vector_constant_msb splitter): Use
>       easy_altivec_constant to determine mode in which -1 >> -1 should be
>       performed, use rs6000_expand_vector_init instead of gen_vec_initv4sisi.
> 
>       * gcc.dg/pr101384.c: New test.
>       * gcc.target/powerpc/pr101384-1.c: New test.
>       * gcc.target/powerpc/pr101384-2.c: New test.

> -  if (mode == V4SFmode)
> +  switch (easy_altivec_constant (operands[1], <MODE>mode))
>      {
> -      mode = V4SImode;
> -      dest = gen_lowpart (V4SImode, dest);
> +    case 1: mode = V16QImode; break;
> +    case 2: mode = V8HImode; break;
> +    case 4: mode = V4SImode; break;
> +    default: gcc_unreachable ();
>      }

    case 1:
      mode = V16QImode;
      break;
etc. (and/or make a convenience function for it).

> --- gcc/testsuite/gcc.dg/pr101384.c.jj        2021-07-13 13:45:42.971992584 
> +0200
> +++ gcc/testsuite/gcc.dg/pr101384.c   2021-07-13 13:45:32.427135184 +0200
> @@ -0,0 +1,39 @@
> +/* PR target/101384 */
> +/* { dg-do run } */
> +/* { dg-options "-O2 -Wno-psabi -w" } */

If you have -w anyway, do you / why do you still need -Wno-psabi?

> --- gcc/testsuite/gcc.target/powerpc/pr101384-1.c.jj  2021-07-13 
> 14:02:57.003030314 +0200
> +++ gcc/testsuite/gcc.target/powerpc/pr101384-1.c     2021-07-13 
> 14:02:40.868247714 +0200
> @@ -0,0 +1,79 @@
> +/* PR target/101384 */
> +/* { dg-do compile { target le } } */
> +/* { dg-options "-O2 -maltivec" } */
> +/* { dg-require-effective-target powerpc_altivec_ok } */
> +/* { dg-final { scan-assembler-times {\mvspltis[whb] [^\n\r]*,-1\M} 9 } } */

If you put (?p) at the front of your regex it gets "partial newline-
sensitive matching", which means that . will not match newlines.  See
https://www.tcl.tk/man/tcl/TclCmd/re_syntax.html#M95 for details.  Here,
you could also use
/* { dg-final { scan-assembler-times {\mvspltis[whb] [^,]*,-1\M} 9 } } */
(but that (more traditional) approach quickly becomes clumsy).

Okay for trunk with or without those improvements (with the switch
formatting fix though).  Thanks!


Segher

Reply via email to