This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]