]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR other/47167 (Performance regression in numerical code)
authorRichard Guenther <rguenther@suse.de>
Thu, 20 Jan 2011 10:36:29 +0000 (10:36 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 20 Jan 2011 10:36:29 +0000 (10:36 +0000)
2011-01-20  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/47167
* tree-ssa-copyrename.c (copy_rename_partition_coalesce):
Revert previous change, only avoid enumeral type changes.

From-SVN: r169051

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

index 7dc8d42d549f1a58b472621c0fdaf67c9007ddd3..00d949d7c7c89023aa262a4e105fe557287268e9 100644 (file)
@@ -1,3 +1,9 @@
+2011-01-20  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/47167
+       * tree-ssa-copyrename.c (copy_rename_partition_coalesce):
+       Revert previous change, only avoid enumeral type changes.
+
 2011-01-17  H.J. Lu  <hongjiu.lu@intel.com>
 
        Backport from mainline
index 8baef94a204e650ec2cd58017ef8bdcd41f03eae..4eb6a38011e87dfd758e5af6a1af45fff4f6f637 100644 (file)
@@ -225,11 +225,16 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
       ign2 = false;
     }
 
-  /* Don't coalesce if the two variables are not of the same type.  */
-  if (TREE_TYPE (root1) != TREE_TYPE (root2))
+  /* 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
+         VRP, avoid coalescing enum types with different bounds.  */
+      || ((TREE_CODE (TREE_TYPE (root1)) == ENUMERAL_TYPE
+          || TREE_CODE (TREE_TYPE (root2)) == ENUMERAL_TYPE)
+         && TREE_TYPE (root1) != TREE_TYPE (root2)))
     {
       if (debug)
-       fprintf (debug, " : Different types.  No coalesce.\n");
+       fprintf (debug, " : Incompatible types.  No coalesce.\n");
       return false;
     }