From: Christian Bruel Date: Fri, 6 Jun 2014 07:21:02 +0000 (+0200) Subject: re PR tree-optimization/43934 (LIM should handle PHI nodes) X-Git-Tag: releases/gcc-5.1.0~7052 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d969f3c163ea9397c9b0e4a9dad2c1238f003b50;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d8ca149b2df2..e807a610d78e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-06-06 Christian Bruel + + PR tree-optimization/43934 + * tree-ssa-loop-im.c (determine_max_movement): Add PHI def constant cost. + 2014-06-06 Richard Sandiford * ira-lives.c (single_reg_class): Add missing break. Explicitly diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8e0fb801342b..98a2a053249a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-06-06 Christian Bruel + + PR tree-optimization/43934 + * gcc.dg/tree-ssa/ssa-lim-8.c: New testcase. + 2014-06-05 S. Gilles 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 000000000000..551b68ff2deb --- /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 5863127c4937..e957f9211415 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));