[PATCH] Another builtin memset fix (PR middle-end/46647)

Richard Guenther richard.guenther@gmail.com
Fri Nov 26 12:21:00 GMT 2010


On Fri, Nov 26, 2010 at 9:57 AM, Jakub Jelinek <jakub@redhat.com> wrote:
> Hi!
>
> While H.J's patch fixed memset expansion with regard to negative
> second argument, this patch does the same for memset folding.
> We don't really care about any upper bits, only the low 8 bits matter.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

Ok.

Thanks,
Richard.

> 2010-11-26  Jakub Jelinek  <jakub@redhat.com>
>
>        PR middle-end/46647
>        * builtins.c (fold_builtin_memset): Check c is INTEGER_CST instead
>        of host_integerp check.  Use TREE_INT_CST_LOW instead of tree_low_cst.
>
>        * gcc.dg/pr46647.c: New test.
>
> --- gcc/builtins.c.jj   2010-11-19 20:56:54.000000000 +0100
> +++ gcc/builtins.c      2010-11-24 22:23:41.000000000 +0100
> @@ -8345,7 +8345,7 @@ fold_builtin_memset (location_t loc, tre
>   if (integer_zerop (len))
>     return omit_one_operand_loc (loc, type, dest, c);
>
> -  if (! host_integerp (c, 1) || TREE_SIDE_EFFECTS (dest))
> +  if (TREE_CODE (c) != INTEGER_CST || TREE_SIDE_EFFECTS (dest))
>     return NULL_TREE;
>
>   var = dest;
> @@ -8384,7 +8384,7 @@ fold_builtin_memset (location_t loc, tre
>       if (CHAR_BIT != 8 || BITS_PER_UNIT != 8 || HOST_BITS_PER_WIDE_INT > 64)
>        return NULL_TREE;
>
> -      cval = tree_low_cst (c, 1);
> +      cval = TREE_INT_CST_LOW (c);
>       cval &= 0xff;
>       cval |= cval << 8;
>       cval |= cval << 16;
> --- gcc/testsuite/gcc.dg/pr46647.c.jj   2010-11-25 21:28:03.000000000 +0100
> +++ gcc/testsuite/gcc.dg/pr46647.c      2010-11-25 21:29:57.000000000 +0100
> @@ -0,0 +1,29 @@
> +/* PR middle-end/46647 */
> +/* { dg-do compile } */
> +/* { dg-options "-O2 -fdump-tree-optimized" } */
> +
> +int a;
> +
> +int
> +func1 (void)
> +{
> +  __builtin_memset (&a, -1, sizeof (a));
> +  return 0;
> +}
> +
> +int
> +func2 (void)
> +{
> +  __builtin_memset (&a, 123, sizeof (a));
> +  return 0;
> +}
> +
> +int
> +func3 (void)
> +{
> +  __builtin_memset (&a, 0, sizeof (a));
> +  return 0;
> +}
> +
> +/* { dg-final { scan-tree-dump-not "memset" "optimized" } } */
> +/* { dg-final { cleanup-tree-dump "optimized" } } */
>
>        Jakub
>



More information about the Gcc-patches mailing list