aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorChristian Bruel <christian.bruel@st.com>2014-06-06 09:21:02 +0200
committerChristian Bruel <chrbr@gcc.gnu.org>2014-06-06 09:21:02 +0200
commitd969f3c163ea9397c9b0e4a9dad2c1238f003b50 (patch)
treee8aeff7f4e0f8ff2ca895abc3ea5f4e11f53171a /gcc
parent4a450ea0d103b9d10a5dd293af5c984ca07f094d (diff)
downloadgcc-d969f3c163ea9397c9b0e4a9dad2c1238f003b50.zip
gcc-d969f3c163ea9397c9b0e4a9dad2c1238f003b50.tar.gz
gcc-d969f3c163ea9397c9b0e4a9dad2c1238f003b50.tar.bz2
re PR tree-optimization/43934 (LIM should handle PHI nodes)
PR tree-optimization/43934 * tree-ssa-loop-im.c (determine_max_movement): Add PHI def constant cost. From-SVN: r211302
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-8.c20
-rw-r--r--gcc/tree-ssa-loop-im.c8
4 files changed, 37 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d8ca149..e807a61 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2014-06-06 Christian Bruel <christian.bruel@st.com>
+
+ PR tree-optimization/43934
+ * tree-ssa-loop-im.c (determine_max_movement): Add PHI def constant cost.
+
2014-06-06 Richard Sandiford <rdsandiford@googlemail.com>
* ira-lives.c (single_reg_class): Add missing break. Explicitly
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8e0fb80..98a2a05 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-06-06 Christian Bruel <christian.bruel@st.com>
+
+ PR tree-optimization/43934
+ * gcc.dg/tree-ssa/ssa-lim-8.c: New testcase.
+
2014-06-05 S. Gilles <sgilles@terpmail.umd.edu>
PR c/53119
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-8.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-8.c
new file mode 100644
index 0000000..551b68f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-8.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-lim1-details" } */
+
+void bar (int);
+void foo (int n, int m)
+{
+ unsigned i;
+ for (i = 0; i < n; ++i)
+ {
+ int x;
+ if (m < 0)
+ x = 1;
+ else
+ x = m;
+ bar (x);
+ }
+}
+
+/* { dg-final { scan-tree-dump-times "Moving PHI node" 1 "lim1" } } */
+/* { dg-final { cleanup-tree-dump "lim1" } } */
diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c
index 5863127..e957f92 100644
--- a/gcc/tree-ssa-loop-im.c
+++ b/gcc/tree-ssa-loop-im.c
@@ -719,8 +719,14 @@ determine_max_movement (gimple stmt, bool must_preserve_exec)
FOR_EACH_PHI_ARG (use_p, stmt, iter, SSA_OP_USE)
{
val = USE_FROM_PTR (use_p);
+
if (TREE_CODE (val) != SSA_NAME)
- continue;
+ {
+ /* Assign const 1 to constants. */
+ min_cost = MIN (min_cost, 1);
+ total_cost += 1;
+ continue;
+ }
if (!add_dependency (val, lim_data, loop, false))
return false;
def_data = get_lim_data (SSA_NAME_DEF_STMT (val));