re PR tree-optimization/17400 (out of SSA corruption)
authorAndrew MacLeod <amacleod@redhat.com>
Mon, 13 Sep 2004 19:12:14 +0000 (19:12 +0000)
committerAndrew Macleod <amacleod@gcc.gnu.org>
Mon, 13 Sep 2004 19:12:14 +0000 (19:12 +0000)
2004-09-13  Andrew MacLeod  <amacleod@redhat.com>

PR tree-optimization/17400
* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Don't
coalesce partitions when one occurs in an abnormal PHI.

From-SVN: r87443

gcc/ChangeLog
gcc/tree-ssa-copyrename.c

index 20a989aa76b59dfa37a1703dbb66c88cb0120089..fdb55745f32eb8a6a2a7e4136714eed3301aa07a 100644 (file)
@@ -1,3 +1,9 @@
+2004-09-13  Andrew MacLeod  <amacleod@redhat.com>
+
+       PR tree-optimization/17400
+       * tree-ssa-copyrename.c (copy_rename_partition_coalesce): Don't
+       coalesce partitions when one occurs in an abnormal PHI.
+                                                             
 2004-09-13  Andrew Pinski  <apinski@apple.com>
 
        * config/rs6000/darwin.h (ASM_OUTPUT_COMMON): Change variable size's
index 4f95d20e56965d1f4ec8b6fdfc604201e6dcd4b3..494e3a57dd59ae01788ca68f2ea749a6555899f9 100644 (file)
@@ -116,8 +116,9 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
 {
   int p1, p2, p3;
   tree root1, root2;
+  tree rep1, rep2;
   var_ann_t ann1, ann2, ann3;
-  bool ign1, ign2;
+  bool ign1, ign2, abnorm;
 
   gcc_assert (TREE_CODE (var1) == SSA_NAME);
   gcc_assert (TREE_CODE (var2) == SSA_NAME);
@@ -140,8 +141,10 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
   gcc_assert (p1 != NO_PARTITION);
   gcc_assert (p2 != NO_PARTITION);
 
-  root1 = SSA_NAME_VAR (partition_to_var (map, p1));
-  root2 = SSA_NAME_VAR (partition_to_var (map, p2));
+  rep1 = partition_to_var (map, p1);
+  rep2 = partition_to_var (map, p2);
+  root1 = SSA_NAME_VAR (rep1);
+  root2 = SSA_NAME_VAR (rep2);
 
   if (DECL_HARD_REGISTER (root1) || DECL_HARD_REGISTER (root2))
     {
@@ -248,6 +251,16 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
       return;
     }
 
+  /* Don't coalesce if one of the variables occurs in an abnormal PHI.  */
+  abnorm = (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rep1)
+           || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rep2));
+  if (abnorm)
+    {
+      if (debug)
+       fprintf (debug, " : Abnormal PHI barrier.  No coalesce.\n");
+      return;
+    }
+
   /* Merge the two partitions.  */
   p3 = partition_union (map->var_partition, p1, p2);