]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
trans-array.c (set_loop_bounds): Remove useless dimension check.
authorMikael Morin <mikael@gcc.gnu.org>
Thu, 2 Aug 2012 19:37:00 +0000 (19:37 +0000)
committerMikael Morin <mikael@gcc.gnu.org>
Thu, 2 Aug 2012 19:37:00 +0000 (19:37 +0000)
* trans-array.c (set_loop_bounds): Remove useless dimension check.
Don't update loopspec if it would loose the wanted stride criterion.

From-SVN: r190096

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c

index 036e973bcf132c9d9f38633fd8f7d06cae54a837..5f3038a97975d375cc268348368de2289915fdd1 100644 (file)
@@ -1,3 +1,8 @@
+2012-08-02  Mikael Morin  <mikael@gcc.gnu.org>
+
+       * trans-array.c (set_loop_bounds): Remove useless dimension check.
+       Don't update loopspec if it would loose the wanted stride criterion.
+
 2012-08-02  Mikael Morin  <mikael@gcc.gnu.org>
 
        * trans-array.h (gfc_conv_descriptor_rank): New prototype.
index abdb9eabd4fb132be316eaa9bb14ff84ce1a4b1e..feb35df9c3ffe294924407765509033f53f65543 100644 (file)
@@ -4469,8 +4469,7 @@ set_loop_bounds (gfc_loopinfo *loop)
             known lower bound
             known upper bound
           */
-         else if ((loopspec[n]->info->type == GFC_SS_CONSTRUCTOR && dynamic[n])
-                  || n >= loop->dimen)
+         else if (loopspec[n]->info->type == GFC_SS_CONSTRUCTOR && dynamic[n])
            loopspec[n] = ss;
          else if (integer_onep (info->stride[dim])
                   && !integer_onep (specinfo->stride[spec_dim]))
@@ -4479,7 +4478,11 @@ set_loop_bounds (gfc_loopinfo *loop)
                   && !INTEGER_CST_P (specinfo->stride[spec_dim]))
            loopspec[n] = ss;
          else if (INTEGER_CST_P (info->start[dim])
-                  && !INTEGER_CST_P (specinfo->start[spec_dim]))
+                  && !INTEGER_CST_P (specinfo->start[spec_dim])
+                  && integer_onep (info->stride[dim])
+                     == integer_onep (specinfo->stride[dim])
+                  && INTEGER_CST_P (info->stride[dim])
+                     == INTEGER_CST_P (specinfo->stride[dim]))
            loopspec[n] = ss;
          /* We don't work out the upper bound.
             else if (INTEGER_CST_P (info->finish[n])