aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2019-05-03 15:41:36 +0200
committerMarc Glisse <glisse@gcc.gnu.org>2019-05-03 13:41:36 +0000
commit051ef623d6e332a6199bbf4e6c66e53925cac825 (patch)
treed941fdac3fa148b71b8548aeb58c541a46101acb /gcc
parentb119c05542a9574a1c27f9bba63efbafc12b248b (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/ldist-1.C16
-rw-r--r--gcc/tree-loop-distribution.c4
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))