trans-array.c (gfc_conv_section_startstride): Remove coarray argument.
authorMikael Morin <mikael.morin@sfr.fr>
Fri, 7 Oct 2011 20:32:37 +0000 (22:32 +0200)
committerMikael Morin <mikael@gcc.gnu.org>
Fri, 7 Oct 2011 20:32:37 +0000 (20:32 +0000)
* trans-array.c (gfc_conv_section_startstride): Remove coarray argument.
Remove conditions on coarray.
(gfc_conv_ss_startstride): Update call to gfc_conv_section_startstride.
(gfc_conv_expr_descriptor): Ditto. Add assertions before the call.

From-SVN: r179693

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

index b72c0ebb50df1353b7f9eef67418c36a42f4689b..a4bf8a01ee9c3332345a93322e69579bbafde976 100644 (file)
@@ -1,3 +1,10 @@
+2011-10-07  Mikael Morin  <mikael.morin@sfr.fr>
+
+       * trans-array.c (gfc_conv_section_startstride): Remove coarray argument.
+       Remove conditions on coarray.
+       (gfc_conv_ss_startstride): Update call to gfc_conv_section_startstride.
+       (gfc_conv_expr_descriptor): Ditto. Add assertions before the call.
+
 2011-10-07  Mikael Morin  <mikael.morin@sfr.fr>
 
        * trans-array.c (gfc_conv_section_startstride): Remove coarray_last
index 95ebf6c235976bac6f705dc94c67bc523c839cfc..a034886f534826f770de2c2b02056f1a0b902744 100644 (file)
@@ -3200,8 +3200,7 @@ evaluate_bound (stmtblock_t *block, tree *bounds, gfc_expr ** values,
 /* Calculate the lower bound of an array section.  */
 
 static void
-gfc_conv_section_startstride (gfc_loopinfo * loop, gfc_ss * ss, int dim,
-                             bool coarray)
+gfc_conv_section_startstride (gfc_loopinfo * loop, gfc_ss * ss, int dim)
 {
   gfc_expr *stride = NULL;
   tree desc;
@@ -3219,16 +3218,14 @@ gfc_conv_section_startstride (gfc_loopinfo * loop, gfc_ss * ss, int dim,
       /* We use a zero-based index to access the vector.  */
       info->start[dim] = gfc_index_zero_node;
       info->end[dim] = NULL;
-      if (!coarray)
-       info->stride[dim] = gfc_index_one_node;
+      info->stride[dim] = gfc_index_one_node;
       return;
     }
 
   gcc_assert (ar->dimen_type[dim] == DIMEN_RANGE
              || ar->dimen_type[dim] == DIMEN_THIS_IMAGE);
   desc = info->descriptor;
-  if (!coarray)
-    stride = ar->stride[dim];
+  stride = ar->stride[dim];
 
   /* Calculate the start of the range.  For vector subscripts this will
      be the range of the vector.  */
@@ -3240,9 +3237,9 @@ gfc_conv_section_startstride (gfc_loopinfo * loop, gfc_ss * ss, int dim,
   evaluate_bound (&loop->pre, info->end, ar->end, desc, dim, false);
 
   /* Calculate the stride.  */
-  if (!coarray && stride == NULL)
+  if (stride == NULL)
     info->stride[dim] = gfc_index_one_node;
-  else if (!coarray)
+  else
     {
       gfc_init_se (&se, NULL);
       gfc_conv_expr_type (&se, stride, gfc_array_index_type);
@@ -3319,8 +3316,7 @@ done:
          gfc_conv_ss_descriptor (&loop->pre, ss, !loop->array_parameter);
 
          for (n = 0; n < ss->data.info.dimen; n++)
-           gfc_conv_section_startstride (loop, ss, ss->data.info.dim[n],
-                                         false);
+           gfc_conv_section_startstride (loop, ss, ss->data.info.dim[n]);
          break;
 
        case GFC_SS_INTRINSIC:
@@ -5975,7 +5971,14 @@ gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss)
          for (n = ss->data.info.dimen; n < ss->data.info.dimen + codim - 1;
               n++)
            {
-             gfc_conv_section_startstride (&loop, ss, n, true);
+             /* Make sure we are not lost somehow.  */
+             gcc_assert (info->ref->u.ar.dimen_type[n] == DIMEN_THIS_IMAGE);
+
+             /* Make sure the call to gfc_conv_section_startstride won't 
+                generate unnecessary code to calculate stride.  */
+             gcc_assert (info->ref->u.ar.stride[n] == NULL);
+
+             gfc_conv_section_startstride (&loop, ss, n);
              loop.from[n] = info->start[n];
              loop.to[n]   = info->end[n];
            }