diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2019-05-03 15:41:36 +0200 |
---|---|---|
committer | Marc Glisse <glisse@gcc.gnu.org> | 2019-05-03 13:41:36 +0000 |
commit | 051ef623d6e332a6199bbf4e6c66e53925cac825 (patch) | |
tree | d941fdac3fa148b71b8548aeb58c541a46101acb /gcc | |
parent | b119c05542a9574a1c27f9bba63efbafc12b248b (diff) | |
download | gcc-051ef623d6e332a6199bbf4e6c66e53925cac825.zip gcc-051ef623d6e332a6199bbf4e6c66e53925cac825.tar.gz gcc-051ef623d6e332a6199bbf4e6c66e53925cac825.tar.bz2 |
Let ldist ignore clobbers
2019-05-03 Marc Glisse <marc.glisse@inria.fr>
PR tree-optimization/90269
gcc/
* tree-loop-distribution.c (find_seed_stmts_for_distribution):
Ignore clobbers.
gcc/testsuite/
* g++.dg/tree-ssa/ldist-1.C: New file.
From-SVN: r270852
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/tree-ssa/ldist-1.C | 16 | ||||
-rw-r--r-- | gcc/tree-loop-distribution.c | 4 |
4 files changed, 31 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ac134c6..a1f2356 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-05-03 Marc Glisse <marc.glisse@inria.fr> + + PR tree-optimization/90269 + * tree-loop-distribution.c (find_seed_stmts_for_distribution): + Ignore clobbers. + 2019-05-03 Martin Liska <mliska@suse.cz> * hash-map.h: Add is_empty function. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7ae100f..7dbb850 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-05-03 Marc Glisse <marc.glisse@inria.fr> + + PR tree-optimization/90269 + * g++.dg/tree-ssa/ldist-1.C: New file. + 2019-05-03 Richard Biener <rguenther@suse.de> * gcc.dg/vect/slp-reduc-sad-2.c: New testcase. diff --git a/gcc/testsuite/g++.dg/tree-ssa/ldist-1.C b/gcc/testsuite/g++.dg/tree-ssa/ldist-1.C new file mode 100644 index 0000000..0fc6a61 --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/ldist-1.C @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-tree-ldist-details" } */ + +#include <new> +struct T { + int* p; + T(T const&t):p(t.p){} +}; +void f(T*__restrict a,T*__restrict b){ + for(int i=0;i<1024;++i){ + new(a+i)T(b[i]); + b[i].~T(); + } +} + +/* { dg-final { scan-tree-dump "generated memcpy" "ldist" } } */ diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c index 8959f52..3d8f13c 100644 --- a/gcc/tree-loop-distribution.c +++ b/gcc/tree-loop-distribution.c @@ -3040,6 +3040,10 @@ find_seed_stmts_for_distribution (struct loop *loop, vec<gimple *> *work_list) { gimple *stmt = gsi_stmt (gsi); + /* Ignore clobbers, they do not have true side effects. */ + if (gimple_clobber_p (stmt)) + continue; + /* If there is a stmt with side-effects bail out - we cannot and should not distribute this loop. */ if (gimple_has_side_effects (stmt)) |