aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-05-02 14:08:08 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-05-02 14:08:08 +0000
commit8964432ad6f17cef74aa97c367d2975ba9458f92 (patch)
tree172994fc163031c61f48b2a00664c4de0866fd0c /gcc
parent420ee75d7dbdba35878d7feabea7d30d77b82943 (diff)
downloadgcc-8964432ad6f17cef74aa97c367d2975ba9458f92.zip
gcc-8964432ad6f17cef74aa97c367d2975ba9458f92.tar.gz
gcc-8964432ad6f17cef74aa97c367d2975ba9458f92.tar.bz2
re PR tree-optimization/89653 (Missing vectorization of loop containing std::min/std::max and temporary)
2019-05-02 Richard Biener <rguenther@suse.de> PR tree-optimization/89653 * tree-ssa-loop.c (pass_data_tree_loop_init): Execute update-address-taken before the pass. * passes.def (pass_tree_loop_init): Put comment before it. * g++.dg/vect/pr89653.cc: New testcase. From-SVN: r270800
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/passes.def2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/vect/pr89653.cc12
-rw-r--r--gcc/tree-ssa-loop.c2
5 files changed, 27 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f4f0c14..9149eaa 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2019-05-02 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/89653
+ * tree-ssa-loop.c (pass_data_tree_loop_init): Execute
+ update-address-taken before the pass.
+ * passes.def (pass_tree_loop_init): Put comment before it.
+
+2019-05-02 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/89509
* tree-ssa-structalias.c (compute_dependence_clique): Look
at the first subvar when determining whether it is restrict.
diff --git a/gcc/passes.def b/gcc/passes.def
index 99640d5..ad2efab 100644
--- a/gcc/passes.def
+++ b/gcc/passes.def
@@ -255,6 +255,8 @@ along with GCC; see the file COPYING3. If not see
NEXT_PASS (pass_fix_loops);
NEXT_PASS (pass_tree_loop);
PUSH_INSERT_PASSES_WITHIN (pass_tree_loop)
+ /* Before loop_init we rewrite no longer addressed locals into SSA
+ form if possible. */
NEXT_PASS (pass_tree_loop_init);
NEXT_PASS (pass_tree_unswitch);
NEXT_PASS (pass_scev_cprop);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3976e36..bf32f0e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2019-05-02 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/89653
+ * g++.dg/vect/pr89653.cc: New testcase.
+
+2019-05-02 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/89509
* gcc.dg/torture/restrict-8.c: New testcase.
diff --git a/gcc/testsuite/g++.dg/vect/pr89653.cc b/gcc/testsuite/g++.dg/vect/pr89653.cc
new file mode 100644
index 0000000..d38b49a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/vect/pr89653.cc
@@ -0,0 +1,12 @@
+// { dg-do compile }
+// { dg-require-effective-target vect_double }
+
+#include <algorithm>
+
+void loop1(double * const __restrict__ vec, double x, int end)
+{
+ for (int i = 0; i < end; ++i)
+ vec[i] = std::min(vec[i], vec[i]/x);
+}
+
+// { dg-final { scan-tree-dump "vectorized 1 loops" "vect" } }
diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c
index 00a0950..1ac6cee 100644
--- a/gcc/tree-ssa-loop.c
+++ b/gcc/tree-ssa-loop.c
@@ -330,7 +330,7 @@ const pass_data pass_data_tree_loop_init =
PROP_cfg, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
- 0, /* todo_flags_start */
+ TODO_update_address_taken, /* todo_flags_start */
0, /* todo_flags_finish */
};