diff options
author | Christian Bruel <christian.bruel@st.com> | 2014-06-06 09:21:02 +0200 |
---|---|---|
committer | Christian Bruel <chrbr@gcc.gnu.org> | 2014-06-06 09:21:02 +0200 |
commit | d969f3c163ea9397c9b0e4a9dad2c1238f003b50 (patch) | |
tree | e8aeff7f4e0f8ff2ca895abc3ea5f4e11f53171a /gcc | |
parent | 4a450ea0d103b9d10a5dd293af5c984ca07f094d (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-8.c | 20 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-im.c | 8 |
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)); |