diff options
author | Richard Biener <rguenther@suse.de> | 2018-06-01 10:49:54 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-06-01 10:49:54 +0000 |
commit | 47cac108ef3a44811ae56fb9c823d5a2339d751b (patch) | |
tree | 6000c29302bcd9cbda985ea8007afb1127572cf0 /gcc | |
parent | abc24d932cf028c4ba363c89aad530fd0f49d93f (diff) | |
download | gcc-47cac108ef3a44811ae56fb9c823d5a2339d751b.zip gcc-47cac108ef3a44811ae56fb9c823d5a2339d751b.tar.gz gcc-47cac108ef3a44811ae56fb9c823d5a2339d751b.tar.bz2 |
re PR tree-optimization/86017 (multiple consecutive calls to bzero/memset not merged)
2018-06-01 Richard Biener <rguenther@suse.de>
PR middle-end/86017
* gimple-fold.c (var_decl_component_p): Also allow offsetted
vars wrapped in MEM_REFs.
* gcc.dg/tree-ssa/pr86017.c: New testcase.
From-SVN: r261061
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/gimple-fold.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/pr86017.c | 29 |
4 files changed, 43 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9035e67c..8806024 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-06-01 Richard Biener <rguenther@suse.de> + + PR middle-end/86017 + * gimple-fold.c (var_decl_component_p): Also allow offsetted + vars wrapped in MEM_REFs. + 2018-06-01 Richard Sandiford <richard.sandiford@linaro.org> * config/aarch64/aarch64.c (aarch64_ira_change_pseudo_allocno_class): diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 9bbe7f1..f6d758a 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -632,7 +632,9 @@ var_decl_component_p (tree var) tree inner = var; while (handled_component_p (inner)) inner = TREE_OPERAND (inner, 0); - return SSA_VAR_P (inner); + return (DECL_P (inner) + || (TREE_CODE (inner) == MEM_REF + && TREE_CODE (TREE_OPERAND (inner, 0)) == ADDR_EXPR)); } /* If the SIZE argument representing the size of an object is in a range diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cec80a5..12ed15f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2018-06-01 Richard Biener <rguenther@suse.de> + PR middle-end/86017 + * gcc.dg/tree-ssa/pr86017.c: New testcase. + +2018-06-01 Richard Biener <rguenther@suse.de> + PR ipa/85960 * gcc.dg/ipa/ipa-pta-19.c: New testcase. diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr86017.c b/gcc/testsuite/gcc.dg/tree-ssa/pr86017.c new file mode 100644 index 0000000..f216e83 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr86017.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-store-merging" } */ + +void f (void*); + +void g (void) +{ + char a[8]; + __builtin_memset (a, 0, 8); + + f (a); +} + +void h (void) +{ + char a[8]; + __builtin_memset (a, 0, 1); + __builtin_memset (a + 1, 0, 1); + __builtin_memset (a + 2, 0, 1); + __builtin_memset (a + 3, 0, 1); + __builtin_memset (a + 4, 0, 1); + __builtin_memset (a + 5, 0, 1); + __builtin_memset (a + 6, 0, 1); + __builtin_memset (a + 7, 0, 1); + + f (a); +} + +/* { dg-final { scan-tree-dump "Merged into 1 stores" "store-merging" } } */ |