From patchwork Mon Jul 12 16:59:59 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [fortran] Remove gfc_conv_section_upper_bound Date: Mon, 12 Jul 2010 06:59:59 -0000 From: Mikael Morin X-Patchwork-Id: 58634 Message-Id: <4C3B4A0F.30908@sfr.fr> To: gcc-patches , "fortran@gcc.gnu.org" 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 * 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 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: