tree-ssa-loop-ivopts.c (add_iv_value_candidates): Also add the candidate with the...
authorRichard Guenther <rguenther@suse.de>
Mon, 4 Aug 2008 18:35:20 +0000 (18:35 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 4 Aug 2008 18:35:20 +0000 (18:35 +0000)
2008-08-04  Richard Guenther  <rguenther@suse.de>

* tree-ssa-loop-ivopts.c (add_iv_value_candidates): Also add
the candidate with the stripped base if that base is different
from the original base even for offset zero.

From-SVN: r138647

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

index 224764e..02ca433 100644 (file)
@@ -1,5 +1,11 @@
 2008-08-04  Richard Guenther  <rguenther@suse.de>
 
+       * tree-ssa-loop-ivopts.c (add_iv_value_candidates): Also add
+       the candidate with the stripped base if that base is different
+       from the original base even for offset zero.
+
+2008-08-04  Richard Guenther  <rguenther@suse.de>
+
        PR middle-end/36691
        * tree-ssa-loop-niter.c (number_of_iterations_lt_to_ne): Correctly
        check for no_overflow.
index c314da4..1a1e58b 100644 (file)
@@ -2275,9 +2275,11 @@ add_iv_value_candidates (struct ivopts_data *data,
   add_candidate (data, build_int_cst (basetype, 0),
                 iv->step, true, use);
 
-  /* Third, try removing the constant offset.  */
+  /* Third, try removing the constant offset.  Make sure to even
+     add a candidate for &a[0] vs. (T *)&a.  */
   base = strip_offset (iv->base, &offset);
-  if (offset)
+  if (offset
+      || base != iv->base)
     add_candidate (data, base, iv->step, false, use);
 }