From 0e23b2b64469af25e64428ac3d2eeffc0374b5e8 Mon Sep 17 00:00:00 2001 From: steven Date: Thu, 10 Feb 2005 22:57:30 +0000 Subject: [PATCH] PR tree-optimization/17549 * tree-outof-ssa.c (find_replaceable_in_bb): Do not allow TER to replace a DEF with its expression if the DEF and the rhs of the expression we replace into have the same root variable. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@94853 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 8 ++++++++ gcc/tree-outof-ssa.c | 19 +++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3ea3e792a90..d86daf413ab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-02-10 Steven Bosscher + + PR tree-optimization/17549 + * tree-outof-ssa.c (find_replaceable_in_bb): Do not allow + TER to replace a DEF with its expression if the DEF and the + rhs of the expression we replace into have the same root + variable. + 2005-02-10 Richard Sandiford * config/mips/mips.md: Fix the placement of the match_scratch in the diff --git a/gcc/tree-outof-ssa.c b/gcc/tree-outof-ssa.c index 65c74d310a4..c6aa812bc17 100644 --- a/gcc/tree-outof-ssa.c +++ b/gcc/tree-outof-ssa.c @@ -1659,8 +1659,23 @@ find_replaceable_in_bb (temp_expr_table_p tab, basic_block bb) { if (tab->version_info[SSA_NAME_VERSION (def)]) { - /* Mark expression as replaceable unless stmt is volatile. */ - if (!ann->has_volatile_ops) + bool same_root_var = false; + tree def2; + ssa_op_iter iter2; + + /* See if the root variables are the same. If they are, we + do not want to do the replacement to avoid problems with + code size, see PR tree-optimization/17549. */ + FOR_EACH_SSA_TREE_OPERAND (def2, stmt, iter2, SSA_OP_DEF) + if (SSA_NAME_VAR (def) == SSA_NAME_VAR (def2)) + { + same_root_var = true; + break; + } + + /* Mark expression as replaceable unless stmt is volatile + or DEF sets the same root variable as STMT. */ + if (!ann->has_volatile_ops && !same_root_var) mark_replaceable (tab, def); else finish_expr (tab, SSA_NAME_VERSION (def), false); -- 2.11.0