https://gcc.gnu.org/g:189b6afd2a993e652c8c496f8fdf7e26ad76e80e
commit 189b6afd2a993e652c8c496f8fdf7e26ad76e80e Author: Mikael Morin <mik...@gcc.gnu.org> Date: Sun Mar 30 18:16:46 2025 +0200 Réduction utilisations stride_get Diff: --- gcc/fortran/trans-decl.cc | 4 +--- gcc/fortran/trans-openmp.cc | 38 +++++++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc index 0c48f7a062d1..d88ad3655c19 100644 --- a/gcc/fortran/trans-decl.cc +++ b/gcc/fortran/trans-decl.cc @@ -7597,9 +7597,7 @@ done: tmp = gfc_conv_descriptor_extent_get (gfc_desc, idx); gfc_add_modify (&loop_body, gfc_get_cfi_dim_extent (cfi, idx), tmp); /* d->dim[n].sm = gfc->dim[i].stride * gfc->span); */ - tmp = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, - gfc_conv_descriptor_stride_get (gfc_desc, idx), - gfc_conv_descriptor_span_get (gfc_desc)); + tmp = gfc_conv_descriptor_sm_get (gfc_desc, idx); gfc_add_modify (&loop_body, gfc_get_cfi_dim_sm (cfi, idx), tmp); /* Generate loop. */ diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc index f1b50ea00b6b..0ee9898d0483 100644 --- a/gcc/fortran/trans-openmp.cc +++ b/gcc/fortran/trans-openmp.cc @@ -782,11 +782,13 @@ gfc_omp_clause_default_ctor (tree clause, tree decl, tree outer) if (GFC_TYPE_ARRAY_RANK (type) > 1) size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, size, - gfc_conv_descriptor_stride_get (decl, rank)); - tree esize = fold_convert (gfc_array_index_type, - TYPE_SIZE_UNIT (gfc_get_element_type (type))); - size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, - size, esize); + gfc_conv_descriptor_sm_get (decl, rank)); + else + { + tree esize = gfc_conv_descriptor_elem_len_get (decl); + size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, + size, esize); + } size = unshare_expr (size); size = gfc_evaluate_now (fold_convert (size_type_node, size), &cond_block); @@ -968,11 +970,14 @@ gfc_omp_clause_copy_ctor (tree clause, tree dest, tree src) if (GFC_TYPE_ARRAY_RANK (type) > 1) size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, size, - gfc_conv_descriptor_stride_get (dest, rank)); - tree esize = fold_convert (gfc_array_index_type, - TYPE_SIZE_UNIT (gfc_get_element_type (type))); - size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, - size, esize); + gfc_conv_descriptor_sm_get (dest, rank)); + else + { + tree esize = fold_convert (gfc_array_index_type, + TYPE_SIZE_UNIT (gfc_get_element_type (type))); + size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, + size, esize); + } size = unshare_expr (size); size = gfc_evaluate_now (fold_convert (size_type_node, size), &cond_block); @@ -1086,11 +1091,14 @@ gfc_omp_clause_assign_op (tree clause, tree dest, tree src) if (GFC_TYPE_ARRAY_RANK (type) > 1) size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, size, - gfc_conv_descriptor_stride_get (src, rank)); - tree esize = fold_convert (gfc_array_index_type, - TYPE_SIZE_UNIT (gfc_get_element_type (type))); - size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, - size, esize); + gfc_conv_descriptor_sm_get (src, rank)); + else + { + tree esize = fold_convert (gfc_array_index_type, + TYPE_SIZE_UNIT (gfc_get_element_type (type))); + size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, + size, esize); + } size = unshare_expr (size); size = gfc_evaluate_now (fold_convert (size_type_node, size), &cond_block);