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. 2021-02-24 Jakub Jelinek <ja...@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