re PR tree-optimization/50955 (IVopts incorrectly rewrite the address of a global...
authorRichard Guenther <rguenther@suse.de>
Mon, 6 Feb 2012 13:43:03 +0000 (13:43 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 6 Feb 2012 13:43:03 +0000 (13:43 +0000)
2012-02-06  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/50955
* tree-ssa-loop-ivopts.c (get_computation_cost_at): Artificially
raise cost of expressions that replace an address with an
expression based on a different pointer.

From-SVN: r183934

gcc/ChangeLog
gcc/tree-ssa-loop-ivopts.c

index 7effee6..97ceef1 100644 (file)
@@ -1,3 +1,10 @@
+2012-02-06  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/50955
+       * tree-ssa-loop-ivopts.c (get_computation_cost_at): Artificially
+       raise cost of expressions that replace an address with an
+       expression based on a different pointer.
+
 2012-02-06  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/52129
index 15a2dd7..10c9352 100644 (file)
@@ -4048,7 +4048,11 @@ get_computation_cost_at (struct ivopts_data *data,
       return infinite_cost;
     }
 
-  if (address_p)
+  if (address_p
+      || (use->iv->base_object
+         && cand->iv->base_object
+         && POINTER_TYPE_P (TREE_TYPE (use->iv->base_object))
+         && POINTER_TYPE_P (TREE_TYPE (cand->iv->base_object))))
     {
       /* Do not try to express address of an object with computation based
         on address of a different object.  This may cause problems in rtl