[PATCH] match.pd: Use single_use for (T)(A) + CST -> (T)(A + CST) [PR95798]

Richard Biener rguenther@suse.de
Thu Feb 25 09:13:06 GMT 2021


On Thu, 25 Feb 2021, Jakub Jelinek wrote:

> On Wed, Feb 24, 2021 at 08:56:55PM +0100, Jakub Jelinek via Gcc-patches wrote:
> > On Wed, Feb 24, 2021 at 08:52:44PM +0100, Marc Glisse wrote:
> > > On Wed, 24 Feb 2021, Jakub Jelinek via Gcc-patches wrote:
> > > 
> > > > The following patch adds single_use case which restores these testcases
> > > > but keeps the testcases the patch meant to improve as is.
> > > 
> > > Hello,
> > > 
> > > I wonder if :s would be sufficient here? I don't have an opinion on which
> > > one is better for this particular transformation (don't change the patch
> > > because of my comment), we just seem to be getting more and more uses of
> > > single_use in match.pd, maybe at some point we need to revisit the meaning
> > > of :s or introduce a stronger :S.
> > 
> > :s seems to work for these testcases too, I'm never sure about :s
> > vs. single_use.
> 
> Following passed bootstrap/regtest on x86_64-linux and i686-linux too.

OK.

Thanks,
Richard.

> 2021-02-24  Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR target/95798
> 	* match.pd ((T)(A) + CST -> (T)(A + CST)): Add :s to convert.
> 
> 	* gcc.target/i386/pr95798-1.c: New test.
> 	* gcc.target/i386/pr95798-2.c: New test.
> 
> --- gcc/match.pd.jj	2021-02-24 12:58:22.233006845 +0100
> +++ gcc/match.pd	2021-02-24 20:54:41.970241132 +0100
> @@ -2492,7 +2492,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
>  /* ((T)(A)) + CST -> (T)(A + CST)  */
>  #if GIMPLE
>    (simplify
> -   (plus (convert SSA_NAME@0) INTEGER_CST@1)
> +   (plus (convert:s SSA_NAME@0) INTEGER_CST@1)
>      (if (TREE_CODE (TREE_TYPE (@0)) == INTEGER_TYPE
>           && TREE_CODE (type) == INTEGER_TYPE
>           && TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (@0))
> --- gcc/testsuite/gcc.target/i386/pr95798-1.c.jj	2021-02-24 15:58:06.935598077 +0100
> +++ gcc/testsuite/gcc.target/i386/pr95798-1.c	2021-02-24 16:02:47.298504500 +0100
> @@ -0,0 +1,29 @@
> +/* PR target/95798 */
> +/* { dg-do compile } */
> +/* { dg-options "-O2 -masm=att" } */
> +/* { dg-final { scan-assembler "1, 8\\\(%rsp,%r\[a-z0-9]*,8\\\)" { target lp64 } } } */
> +/* { dg-final { scan-assembler "2, 16\\\(%rsp,%r\[a-z0-9]*,8\\\)" { target lp64 } } } */
> +/* { dg-final { scan-assembler "3, 24\\\(%rsp,%r\[a-z0-9]*,8\\\)" { target lp64 } } } */
> +/* { dg-final { scan-assembler "4, 32\\\(%rsp,%r\[a-z0-9]*,8\\\)" { target lp64 } } } */
> +/* { dg-final { scan-assembler "5, 40\\\(%rsp,%r\[a-z0-9]*,8\\\)" { target lp64 } } } */
> +/* { dg-final { scan-assembler "6, 48\\\(%rsp,%r\[a-z0-9]*,8\\\)" { target lp64 } } } */
> +/* { dg-final { scan-assembler "7, 56\\\(%rsp,%r\[a-z0-9]*,8\\\)" { target lp64 } } } */
> +
> +void bar (unsigned long long *, int);
> +
> +void
> +foo (int y, unsigned long long z)
> +{
> +  unsigned long long x[1024];
> +  unsigned long long i = y % 127;
> +  __builtin_memset (x, -1, sizeof (x));
> +  x[i] = 0;
> +  x[i + 1] = 1;
> +  x[i + 2] = 2;
> +  x[i + 3] = 3;
> +  x[i + 4] = 4;
> +  x[i + 5] = 5;
> +  x[i + 6] = 6;
> +  x[i + 7] = 7;
> +  bar (x, y);
> +}
> --- gcc/testsuite/gcc.target/i386/pr95798-2.c.jj	2021-02-24 16:01:39.708250302 +0100
> +++ gcc/testsuite/gcc.target/i386/pr95798-2.c	2021-02-24 16:03:57.497729907 +0100
> @@ -0,0 +1,29 @@
> +/* PR target/95798 */
> +/* { dg-do compile } */
> +/* { dg-options "-O2 -masm=att" } */
> +/* { dg-final { scan-assembler "1, 8\\\(%rsp,%r\[a-z0-9]*,8\\\)" { target lp64 } } } */
> +/* { dg-final { scan-assembler "2, 16\\\(%rsp,%r\[a-z0-9]*,8\\\)" { target lp64 } } } */
> +/* { dg-final { scan-assembler "3, 24\\\(%rsp,%r\[a-z0-9]*,8\\\)" { target lp64 } } } */
> +/* { dg-final { scan-assembler "4, 32\\\(%rsp,%r\[a-z0-9]*,8\\\)" { target lp64 } } } */
> +/* { dg-final { scan-assembler "5, 40\\\(%rsp,%r\[a-z0-9]*,8\\\)" { target lp64 } } } */
> +/* { dg-final { scan-assembler "6, 48\\\(%rsp,%r\[a-z0-9]*,8\\\)" { target lp64 } } } */
> +/* { dg-final { scan-assembler "7, 56\\\(%rsp,%r\[a-z0-9]*,8\\\)" { target lp64 } } } */
> +
> +void bar (unsigned long long *, int);
> +
> +void
> +foo (unsigned int y, unsigned long long z)
> +{
> +  unsigned long long x[1024];
> +  unsigned long long i = y % 127;
> +  __builtin_memset (x, -1, sizeof (x));
> +  x[i] = 0;
> +  x[i + 1] = 1;
> +  x[i + 2] = 2;
> +  x[i + 3] = 3;
> +  x[i + 4] = 4;
> +  x[i + 5] = 5;
> +  x[i + 6] = 6;
> +  x[i + 7] = 7;
> +  bar (x, y);
> +}
> 
> 	Jakub
> 
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)


More information about the Gcc-patches mailing list