https://gcc.gnu.org/g:3ec891001cf9326ed332f0b8b5c9c467d95ed81e
commit 3ec891001cf9326ed332f0b8b5c9c467d95ed81e Author: Mikael Morin <mik...@gcc.gnu.org> Date: Sat Aug 16 16:28:37 2025 +0200 Refactoring set_dimension_fields Diff: --- gcc/fortran/trans-descriptor.cc | 46 ++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc index f100410be18d..d0df79e4fed1 100644 --- a/gcc/fortran/trans-descriptor.cc +++ b/gcc/fortran/trans-descriptor.cc @@ -1017,6 +1017,25 @@ set_dimension_bounds (stmtblock_t * block, tree descr, tree dim, } +static void +set_dimension_fields (stmtblock_t * block, tree descr, tree dim, + tree lbound, tree ubound, tree stride, tree *offset) +{ + stride = gfc_evaluate_now (stride, block); + set_dimension_bounds (block, descr, dim, lbound, ubound, stride, offset); + gfc_conv_descriptor_stride_set (block, descr, dim, stride); +} + + +static void +set_dimension_fields (stmtblock_t * block, tree descr, tree dim, + tree lbound, tree ubound, tree stride, tree offset_var) +{ + stride = gfc_evaluate_now (stride, block); + set_dimension_bounds (block, descr, dim, lbound, ubound, stride, offset_var); + gfc_conv_descriptor_stride_set (block, descr, dim, stride); +} + static void shift_dimension_bounds (stmtblock_t * block, tree descr, tree dim, tree new_lbound, tree orig_lbound, tree orig_ubound, @@ -1496,22 +1515,13 @@ gfc_conv_remap_descriptor (stmtblock_t *block, tree dest, int dest_rank, gfc_add_block_to_block (block, &lower_se.post); gfc_add_block_to_block (block, &upper_se.post); - /* Set bounds in descriptor. */ - gfc_conv_descriptor_lbound_set (block, dest, gfc_rank_cst[dim], lbound); - gfc_conv_descriptor_ubound_set (block, dest, gfc_rank_cst[dim], ubound); - - /* Set stride. */ stride = gfc_evaluate_now (stride, block); - gfc_conv_descriptor_stride_set (block, dest, gfc_rank_cst[dim], stride); - /* Update offset. */ - tree tmp = fold_build2_loc (input_location, MULT_EXPR, - gfc_array_index_type, lbound, stride); - offset = fold_build2_loc (input_location, MINUS_EXPR, - gfc_array_index_type, offset, tmp); + set_dimension_fields (block, dest, gfc_rank_cst[dim], + lbound, ubound, stride, &offset); /* Update stride. */ - tmp = gfc_conv_array_extent_dim (lbound, ubound, NULL); + tree tmp = gfc_conv_array_extent_dim (lbound, ubound, NULL); stride = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, stride, tmp); } @@ -1819,15 +1829,13 @@ set_gfc_dimension_from_cfi (stmtblock_t *block, tree gfc, tree cfi, tree idx, { /* gfc->dim[i].stride = cfi->dim[i].sm / cfi>elem_len */ tmp = gfc_get_cfi_dim_sm (cfi, idx); - tmp = fold_build2_loc (input_location, TRUNC_DIV_EXPR, - gfc_array_index_type, tmp, - fold_convert (gfc_array_index_type, - gfc_get_cfi_desc_elem_len (cfi))); - stride = gfc_evaluate_now (tmp, block); + stride = fold_build2_loc (input_location, TRUNC_DIV_EXPR, + gfc_array_index_type, tmp, + fold_convert (gfc_array_index_type, + gfc_get_cfi_desc_elem_len (cfi))); } - set_dimension_bounds (block, gfc, idx, lbound, ubound, stride, offset_var); - gfc_conv_descriptor_stride_set (block, gfc, idx, stride); + set_dimension_fields (block, gfc, idx, lbound, ubound, stride, offset_var); }