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);

Reply via email to