summaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-copyrename.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2011-01-25 12:01:54 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2011-01-25 12:01:54 +0000
commit3e101e60e82e93c37e9cfe83d4a15d9df45e710c (patch)
treeaefd73a972043ecfa734d44e4273ecdb145d0020 /gcc/tree-ssa-copyrename.c
parente26e8db94fbb92a0f6b41f82bec5f65a6fcb606b (diff)
downloadgcc-3e101e60e82e93c37e9cfe83d4a15d9df45e710c.tar.gz
PR tree-optimization/47427
PR tree-optimization/47428 * tree-ssa-copyrename.c (copy_rename_partition_coalesce): Don't coalesce if the new root var would be TREE_READONLY. * gcc.c-torture/compile/pr47427.c: New test. * gcc.c-torture/compile/pr47428.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@169226 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-copyrename.c')
-rw-r--r--gcc/tree-ssa-copyrename.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/gcc/tree-ssa-copyrename.c b/gcc/tree-ssa-copyrename.c
index 9c51d118384..dfc0b4edbbe 100644
--- a/gcc/tree-ssa-copyrename.c
+++ b/gcc/tree-ssa-copyrename.c
@@ -1,5 +1,5 @@
/* Rename SSA copies.
- Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010
+ Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
Contributed by Andrew MacLeod <amacleod@redhat.com>
@@ -170,7 +170,7 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
return false;
}
- /* Never attempt to coalesce 2 difference parameters. */
+ /* Never attempt to coalesce 2 different parameters. */
if (TREE_CODE (root1) == PARM_DECL && TREE_CODE (root2) == PARM_DECL)
{
if (debug)
@@ -226,6 +226,18 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
ign2 = false;
}
+ /* Don't coalesce if the new chosen root variable would be read-only.
+ If both ign1 && ign2, then the root var of the larger partition
+ wins, so reject in that case if any of the root vars is TREE_READONLY.
+ Otherwise reject only if the root var, on which replace_ssa_name_symbol
+ will be called below, is readonly. */
+ if ((TREE_READONLY (root1) && ign2) || (TREE_READONLY (root2) && ign1))
+ {
+ if (debug)
+ fprintf (debug, " : Readonly variable. No coalesce.\n");
+ return false;
+ }
+
/* Don't coalesce if the two variables aren't type compatible . */
if (!types_compatible_p (TREE_TYPE (root1), TREE_TYPE (root2))
/* There is a disconnect between the middle-end type-system and