[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