From f1b69188357a03dd7ffe398e0723f173552aacf8 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 26 Nov 2010 10:38:54 +0100 Subject: [PATCH] re PR middle-end/46647 (Can't inline memset with -1) 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. From-SVN: r167170 --- gcc/ChangeLog | 4 ++++ gcc/builtins.c | 4 ++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr46647.c | 29 +++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr46647.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c20209ee5cb2..ff8fc9a21b9f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2010-11-26 Jakub Jelinek + 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. + PR bootstrap/45700 * tree.h (build1_stat_loc, build2_stat_loc, build3_stat_loc, build4_stat_loc, build5_stat_loc, build6_stat_loc): New inlines. diff --git a/gcc/builtins.c b/gcc/builtins.c index a90bf2fb8f5e..5cdf480913c5 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -8345,7 +8345,7 @@ fold_builtin_memset (location_t loc, tree dest, tree c, tree len, 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, tree dest, tree c, tree len, 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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e8e33412a5ee..525f1d0aec15 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-11-26 Jakub Jelinek + + PR middle-end/46647 + * gcc.dg/pr46647.c: New test. + 2010-11-25 Janus Weil PR fortran/46581 diff --git a/gcc/testsuite/gcc.dg/pr46647.c b/gcc/testsuite/gcc.dg/pr46647.c new file mode 100644 index 000000000000..ab85e17a0811 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr46647.c @@ -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" } } */