Patchwork [fortran] Remove gfc_conv_section_upper_bound

login
register
mail settings
Submitter Mikael Morin
Date July 12, 2010, 4:59 p.m.
Message ID <4C3B4A0F.30908@sfr.fr>
Download mbox | patch
Permalink /patch/58634/
State New
Headers show

Comments

Mikael Morin - July 12, 2010, 4:59 p.m.
Hello,

gfc_conv_section_upper_bound is the same code as the upper bound parts 
of gfc_conv_section_startstride, with the difference that it returns a 
NULL value in the vector subscript case, instead of a gfc_index_zero_node.
The attached patch moves that difference into 
gfc_conv_section_startstride and removes gfc_conv_section_upper_bound.

No testsuite regression on x86_64-unknown-freebsd8.0. OK for trunk ?

Mikael
2010-07-12  Mikael Morin  <mikael@gcc.gnu.org>

	* trans-array.c (gfc_conv_section_upper_bound): Remove
	(gfc_conv_section_startstride): Don't set the upper bound in the 
	vector subscript case. 
	(gfc_conv_loop_setup): Don't use gfc_conv_section_upper_bound
Paul Richard Thomas - July 12, 2010, 8:55 p.m.
Dear Mikael,

That looks good to me.  OK for trunk.

Thanks for the patch.

Paul

On Mon, Jul 12, 2010 at 6:59 PM, Mikael Morin <mikael.morin@sfr.fr> wrote:
> Hello,
>
> gfc_conv_section_upper_bound is the same code as the upper bound parts of
> gfc_conv_section_startstride, with the difference that it returns a NULL
> value in the vector subscript case, instead of a gfc_index_zero_node.
> The attached patch moves that difference into gfc_conv_section_startstride
> and removes gfc_conv_section_upper_bound.
>
> No testsuite regression on x86_64-unknown-freebsd8.0. OK for trunk ?
>
> Mikael
>
Mikael Morin - July 14, 2010, 7:22 p.m.
Le 12.07.2010 22:55, Paul Richard Thomas a écrit :
>
> Dear Mikael,
>
> That looks good to me.  OK for trunk.
>
> Thanks for the patch.
>
On trunk at revision 162191, thanks.

Patch

diff --git a/trans-array.c b/trans-array.c
index bc26835..c43f641 100644
--- a/trans-array.c
+++ b/trans-array.c
@@ -2964,50 +2964,6 @@  gfc_trans_scalarized_loop_boundary (gfc_loopinfo * loop, stmtblock_t * body)
 }
 
 
-/* Calculate the upper bound of an array section.  */
-
-static tree
-gfc_conv_section_upper_bound (gfc_ss * ss, int n, stmtblock_t * pblock)
-{
-  int dim;
-  gfc_expr *end;
-  tree desc;
-  tree bound;
-  gfc_se se;
-  gfc_ss_info *info;
-
-  gcc_assert (ss->type == GFC_SS_SECTION);
-
-  info = &ss->data.info;
-  dim = info->dim[n];
-
-  if (info->ref->u.ar.dimen_type[dim] == DIMEN_VECTOR)
-    /* We'll calculate the upper bound once we have access to the
-       vector's descriptor.  */
-    return NULL;
-
-  gcc_assert (info->ref->u.ar.dimen_type[dim] == DIMEN_RANGE);
-  desc = info->descriptor;
-  end = info->ref->u.ar.end[dim];
-
-  if (end)
-    {
-      /* The upper bound was specified.  */
-      gfc_init_se (&se, NULL);
-      gfc_conv_expr_type (&se, end, gfc_array_index_type);
-      gfc_add_block_to_block (pblock, &se.pre);
-      bound = se.expr;
-    }
-  else
-    {
-      /* No upper bound was specified, so use the bound of the array.  */
-      bound = gfc_conv_array_ubound (desc, dim);
-    }
-
-  return bound;
-}
-
-
 /* Calculate the lower bound of an array section.  */
 
 static void
@@ -3030,8 +2986,8 @@  gfc_conv_section_startstride (gfc_loopinfo * loop, gfc_ss * ss, int n)
     {
       /* We use a zero-based index to access the vector.  */
       info->start[n] = gfc_index_zero_node;
-      info->end[n] = gfc_index_zero_node;
       info->stride[n] = gfc_index_one_node;
+      info->end[n] = NULL;
       return;
     }
 
@@ -3688,11 +3644,7 @@  gfc_conv_loop_setup (gfc_loopinfo * loop, locus * where)
 	    case GFC_SS_SECTION:
 	      /* Use the end expression if it exists and is not constant,
 		 so that it is only evaluated once.  */
-	      if (info->end[n] && !INTEGER_CST_P (info->end[n]))
-		loop->to[n] = info->end[n];
-	      else
-		loop->to[n] = gfc_conv_section_upper_bound (loopspec[n], n,
-							    &loop->pre);
+	      loop->to[n] = info->end[n];
 	      break;
 
             case GFC_SS_FUNCTION: