https://gcc.gnu.org/g:8233d206f00d0063ef81406e58db6169f2d7315c

commit 8233d206f00d0063ef81406e58db6169f2d7315c
Author: Mikael Morin <[email protected]>
Date:   Sat Jul 4 13:21:51 2026 +0200

    Suppression conversions inutiles

Diff:
---
 gcc/fortran/trans-array.cc     |  5 ++---
 gcc/fortran/trans-decl.cc      | 18 +++++++-----------
 gcc/fortran/trans-expr.cc      | 20 ++++++++------------
 gcc/fortran/trans-intrinsic.cc | 42 +++++++++++++-----------------------------
 gcc/fortran/trans-openmp.cc    |  7 +++----
 5 files changed, 33 insertions(+), 59 deletions(-)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index a4f3d3060b43..b734424979ff 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -8677,10 +8677,9 @@ gfc_tree_array_size (stmtblock_t *block, tree desc, 
gfc_expr *expr, tree dim)
   gcc_assert (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc)));
   enum gfc_array_kind akind = GFC_TYPE_ARRAY_AKIND (TREE_TYPE (desc));
   if (expr == NULL || expr->rank < 0)
-    rank = fold_convert (gfc_array_dim_rank_type,
-                        gfc_conv_descriptor_rank (desc));
+    rank = gfc_conv_descriptor_rank (desc);
   else
-    rank = build_int_cst (gfc_array_dim_rank_type, expr->rank);
+    rank = gfc_rank_cst[expr->rank];
 
   if (dim || (expr && expr->rank == 1))
     {
diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc
index fd9e9570eeb0..03acab5c6c9d 100644
--- a/gcc/fortran/trans-decl.cc
+++ b/gcc/fortran/trans-decl.cc
@@ -7611,7 +7611,7 @@ gfc_conv_cfi_to_gfc (stmtblock_t *init, stmtblock_t 
*finally,
     rank = fold_convert_loc (input_location, gfc_array_dim_rank_type,
                             gfc_get_cfi_desc_rank (cfi));
   else
-    rank = build_int_cst (gfc_array_dim_rank_type, sym->as->rank);
+    rank = gfc_rank_cst[sym->as->rank];
 
   /* With bind(C), the standard requires that both Fortran callers and callees
      handle noncontiguous arrays passed to an dummy with 'contiguous' attribute
@@ -7741,9 +7741,8 @@ gfc_conv_cfi_to_gfc (stmtblock_t *init, stmtblock_t 
*finally,
       gfc_add_modify (&inner_loop, tmpidx,
                      fold_build2_loc (input_location, TRUNC_DIV_EXPR,
                                       size_type_node, tmpidx, tmp));
-      gfc_simple_for_loop (&loop_body, dim, build_zero_cst (TREE_TYPE (dim)),
-                          rank, LT_EXPR, build_int_cst (TREE_TYPE (dim), 1),
-                          gfc_finish_block (&inner_loop));
+      gfc_simple_for_loop (&loop_body, dim, gfc_rank_cst[0], rank, LT_EXPR,
+                          gfc_rank_cst[1], gfc_finish_block (&inner_loop));
       /* Assign.  */
       tmp = fold_convert (pchar_type_node, gfc_get_cfi_desc_base_addr (cfi));
       tmp = fold_build2 (POINTER_PLUS_EXPR, pchar_type_node, tmp, shift);
@@ -7981,10 +7980,8 @@ done:
          gfc_add_modify (&inner_loop, tmpidx,
                          fold_build2_loc (input_location, TRUNC_DIV_EXPR,
                                           size_type_node, tmpidx, tmp));
-         gfc_simple_for_loop (&loop_body, dim,
-                              build_zero_cst (TREE_TYPE (dim)), rank, LT_EXPR,
-                              build_int_cst (TREE_TYPE (dim), 1),
-                              gfc_finish_block (&inner_loop));
+         gfc_simple_for_loop (&loop_body, dim, gfc_rank_cst[0], rank, LT_EXPR,
+                              gfc_rank_cst[1], gfc_finish_block (&inner_loop));
          /* Assign.  */
          tree rhs;
          tmp = fold_convert (pchar_type_node,
@@ -8072,9 +8069,8 @@ done:
   gfc_add_modify (&loop_body, gfc_get_cfi_dim_sm (cfi, idx), tmp);
 
   /* Generate loop.  */
-  gfc_simple_for_loop (&block2, idx, build_zero_cst (TREE_TYPE (idx)),
-                      rank, LT_EXPR, build_int_cst (TREE_TYPE (idx), 1),
-                      gfc_finish_block (&loop_body));
+  gfc_simple_for_loop (&block2, idx, gfc_rank_cst[0], rank, LT_EXPR,
+                      gfc_rank_cst[1], gfc_finish_block (&loop_body));
   /* if (gfc->data != NULL) { block2 }.  */
   tmp = gfc_get_cfi_desc_base_addr (cfi),
   tmp = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index fa53d903aac5..8a96d6e13949 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -3408,8 +3408,7 @@ gfc_conv_variable (gfc_se * se, gfc_expr * expr)
       dim = fold_convert (gfc_array_dim_rank_type,
                          gfc_conv_descriptor_rank (se->expr));
       dim = fold_build2_loc (input_location, MINUS_EXPR,
-                            gfc_array_dim_rank_type, dim,
-                            build_one_cst (gfc_array_dim_rank_type));
+                            gfc_array_dim_rank_type, dim, gfc_rank_cst[1]);
       lower = gfc_conv_descriptor_lbound_get (se->expr, dim);
       upper = gfc_conv_descriptor_ubound_get (se->expr, dim);
 
@@ -6278,10 +6277,9 @@ gfc_conv_gfc_desc_to_cfi_desc (gfc_se *parmse, gfc_expr 
*e, gfc_symbol *fsym)
   gfc_add_modify (&block, tmp,
                  build_int_cst (TREE_TYPE (tmp), CFI_VERSION));
   if (e->rank < 0)
-    rank = fold_convert (gfc_array_dim_rank_type,
-                        gfc_conv_descriptor_rank (gfc));
+    rank = gfc_conv_descriptor_rank (gfc);
   else
-    rank = build_int_cst (gfc_array_dim_rank_type, e->rank);
+    rank = gfc_rank_cst[e->rank];
   tmp = gfc_get_cfi_desc_rank (cfi);
   gfc_add_modify (&block, tmp,
                  fold_convert (TREE_TYPE (tmp), rank));
@@ -6519,9 +6517,8 @@ gfc_conv_gfc_desc_to_cfi_desc (gfc_se *parmse, gfc_expr 
*e, gfc_symbol *fsym)
       gfc_add_modify (&loop_body, gfc_get_cfi_dim_sm (cfi, idx), tmp);
 
       /* Generate loop.  */
-      gfc_simple_for_loop (&block2, idx, build_int_cst (TREE_TYPE (idx), 0),
-                          rank, LT_EXPR, build_int_cst (TREE_TYPE (idx), 1),
-                          gfc_finish_block (&loop_body));
+      gfc_simple_for_loop (&block2, idx, gfc_rank_cst[0], rank, LT_EXPR,
+                          gfc_rank_cst[1], gfc_finish_block (&loop_body));
 
       if (e->expr_type == EXPR_VARIABLE
          && e->ref
@@ -6635,9 +6632,8 @@ done:
                             gfc_conv_descriptor_offset_get (gfc), tmp);
       gfc_conv_descriptor_offset_set (&loop_body, gfc, tmp);
       /* Generate loop.  */
-      gfc_simple_for_loop (&block2, idx, build_int_cst (TREE_TYPE (idx), 0),
-                          rank, LT_EXPR, build_int_cst (TREE_TYPE (idx), 1),
-                          gfc_finish_block (&loop_body));
+      gfc_simple_for_loop (&block2, idx, gfc_rank_cst[0], rank, LT_EXPR,
+                          gfc_rank_cst[1], gfc_finish_block (&loop_body));
     }
 
   if (e->ts.type == BT_CHARACTER && !e->ts.u.cl->length)
@@ -10475,7 +10471,7 @@ gfc_trans_structure_assign (tree dest, gfc_expr * expr, 
bool init, bool coarray)
              size = build_zero_cst (size_type_node);
              desc = field;
              gfc_add_modify (&block, gfc_conv_descriptor_rank (desc),
-                             build_int_cst (gfc_array_dim_rank_type, rank));
+                             gfc_rank_cst[rank]);
            }
          else
            {
diff --git a/gcc/fortran/trans-intrinsic.cc b/gcc/fortran/trans-intrinsic.cc
index dbd906f80230..57ab266fbb42 100644
--- a/gcc/fortran/trans-intrinsic.cc
+++ b/gcc/fortran/trans-intrinsic.cc
@@ -1907,13 +1907,10 @@ trans_this_image (gfc_se * se, gfc_expr *expr)
        {
          dim_arg = gfc_evaluate_now (dim_arg, &se->pre);
          cond = fold_build2_loc (input_location, LT_EXPR, logical_type_node,
-                                 dim_arg,
-                                 build_int_cst (TREE_TYPE (dim_arg), 1));
+                                 dim_arg, gfc_rank_cst[1]);
          tmp = gfc_rank_cst[GFC_TYPE_ARRAY_CORANK (TREE_TYPE (desc))];
          tmp = fold_build2_loc (input_location, GT_EXPR, logical_type_node,
-                                dim_arg,
-                                fold_convert_loc (input_location,
-                                                  TREE_TYPE (dim_arg), tmp));
+                                dim_arg, tmp);
          cond = fold_build2_loc (input_location, TRUTH_ORIF_EXPR,
                                  logical_type_node, cond, tmp);
          gfc_trans_runtime_check (true, false, cond, &se->pre, &expr->where,
@@ -1979,12 +1976,11 @@ trans_this_image (gfc_se * se, gfc_expr *expr)
                         build_int_cst (signed_char_type_node, rank - 1));
   tmp = fold_convert_loc (input_location, gfc_array_dim_rank_type, tmp);
   tmp = fold_build2_loc (input_location, MIN_EXPR, gfc_array_dim_rank_type,
-                        build_int_cst (gfc_array_dim_rank_type, rank + corank 
- 2),
-                        tmp);
+                        gfc_rank_cst[rank + corank - 2], tmp);
   gfc_add_modify (&se->pre, min_var, tmp);
 
   /* i = rank.  */
-  tmp = build_int_cst (TREE_TYPE (loop_var), rank);
+  tmp = gfc_rank_cst[rank];
   gfc_add_modify (&se->pre, loop_var, tmp);
 
   exit_label = gfc_build_label_decl (NULL_TREE);
@@ -2018,8 +2014,7 @@ trans_this_image (gfc_se * se, gfc_expr *expr)
   /* Increment loop variable: i++.  */
   gfc_add_modify (&loop, loop_var,
                   fold_build2_loc (input_location, PLUS_EXPR, TREE_TYPE 
(loop_var),
-                                  loop_var,
-                                  build_one_cst (TREE_TYPE (loop_var))));
+                                  loop_var, gfc_rank_cst[1]));
 
   /* Making the loop... actually loop!  */
   tmp = gfc_finish_block (&loop);
@@ -2489,15 +2484,13 @@ gfc_conv_intrinsic_bound (gfc_se * se, gfc_expr * expr, 
enum gfc_isym_id op)
         {
           bound = gfc_evaluate_now (bound, &se->pre);
           cond = fold_build2_loc (input_location, LT_EXPR, logical_type_node,
-                                 bound, build_int_cst (TREE_TYPE (bound), 0));
+                                 bound, gfc_rank_cst[0]);
          if (as && as->type == AS_ASSUMED_RANK)
            tmp = gfc_conv_descriptor_rank (desc);
          else
            tmp = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (TREE_TYPE (desc))];
           tmp = fold_build2_loc (input_location, GE_EXPR, logical_type_node,
-                                bound,
-                                fold_convert_loc (input_location,
-                                                  TREE_TYPE (bound), tmp));
+                                bound, tmp);
           cond = fold_build2_loc (input_location, TRUTH_ORIF_EXPR,
                                  logical_type_node, cond, tmp);
           gfc_trans_runtime_check (true, false, cond, &se->pre, &expr->where,
@@ -2587,8 +2580,7 @@ gfc_conv_intrinsic_bound (gfc_se * se, gfc_expr * expr, 
enum gfc_isym_id op)
       if (op != GFC_ISYM_LBOUND && assumed_rank_lb_one)
        {
          tree minus_one = build_int_cst (gfc_array_index_type, -1);
-         tree rank = fold_convert (gfc_array_dim_rank_type,
-                                   gfc_conv_descriptor_rank (desc));
+         tree rank = gfc_conv_descriptor_rank (desc);
          rank = fold_build2_loc (input_location, MINUS_EXPR,
                                  gfc_array_dim_rank_type, rank,
                                  gfc_rank_cst[1]);
@@ -2670,9 +2662,7 @@ conv_intrinsic_cobound (gfc_se * se, gfc_expr * expr)
                                se->loop->loopvar[0]);
       tree rank = gfc_rank_cst[arg->expr->rank];
       bound = fold_build2_loc (input_location, PLUS_EXPR,
-                              gfc_array_dim_rank_type, bound,
-                              fold_convert_loc (input_location,
-                                                TREE_TYPE (bound), rank));
+                              gfc_array_dim_rank_type, bound, rank);
       gfc_advance_se_ss_chain (se);
     }
   else if (expr->value.function.isym->id == GFC_ISYM_COSHAPE)
@@ -2698,12 +2688,10 @@ conv_intrinsic_cobound (gfc_se * se, gfc_expr * expr)
         {
          bound = gfc_evaluate_now (bound, &se->pre);
          cond = fold_build2_loc (input_location, LT_EXPR, logical_type_node,
-                                 bound, build_int_cst (TREE_TYPE (bound), 1));
+                                 bound, gfc_rank_cst[1]);
          tree rank = gfc_rank_cst[GFC_TYPE_ARRAY_CORANK (TREE_TYPE (desc))];
          tmp = fold_build2_loc (input_location, GT_EXPR, logical_type_node,
-                                bound,
-                                fold_convert_loc (input_location,
-                                                  TREE_TYPE (bound), rank));
+                                bound, rank);
          cond = fold_build2_loc (input_location, TRUTH_ORIF_EXPR,
                                  logical_type_node, cond, tmp);
          gfc_trans_runtime_check (true, false, cond, &se->pre, &expr->where,
@@ -2724,10 +2712,7 @@ conv_intrinsic_cobound (gfc_se * se, gfc_expr * expr)
          {
            tree rank = gfc_rank_cst[arg->expr->rank - 1];
            bound = fold_build2_loc (input_location, PLUS_EXPR,
-                                    gfc_array_dim_rank_type, bound,
-                                    fold_convert_loc (input_location,
-                                                      TREE_TYPE (bound),
-                                                      rank));
+                                    gfc_array_dim_rank_type, bound, rank);
          }
        }
     }
@@ -8500,8 +8485,7 @@ gfc_conv_intrinsic_sizeof (gfc_se *se, gfc_expr *expr)
          tree cond, loop_var, exit_label;
           stmtblock_t body;
 
-         tmp = fold_convert (gfc_array_dim_rank_type,
-                             gfc_conv_descriptor_rank (argse.expr));
+         tmp = gfc_conv_descriptor_rank (argse.expr);
          loop_var = gfc_create_var (gfc_array_dim_rank_type, "i");
          gfc_add_modify (&argse.pre, loop_var, gfc_rank_cst[0]);
           exit_label = gfc_build_label_decl (NULL_TREE);
diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc
index 0d726b488133..7243301cae0b 100644
--- a/gcc/fortran/trans-openmp.cc
+++ b/gcc/fortran/trans-openmp.cc
@@ -2125,15 +2125,14 @@ gfc_omp_get_array_size (location_t loc, tree desc, 
gimple_seq *seq)
   tree idx = build_decl (loc, VAR_DECL, create_tmp_var_name ("idx"),
                         gfc_array_dim_rank_type);
 
-  tree begin = build_zero_cst (gfc_array_dim_rank_type);
+  tree begin = gfc_rank_cst[0];
   tree end;
   if (GFC_TYPE_ARRAY_AKIND (TREE_TYPE (desc)) == GFC_ARRAY_ASSUMED_SHAPE_CONT
       || GFC_TYPE_ARRAY_AKIND (TREE_TYPE (desc)) == GFC_ARRAY_ASSUMED_SHAPE)
     end = gfc_conv_descriptor_rank (desc);
   else
-    end = build_int_cst (gfc_array_dim_rank_type,
-                        GFC_TYPE_ARRAY_RANK (TREE_TYPE (desc)));
-  tree step = build_int_cst (gfc_array_dim_rank_type, 1);
+    end = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (TREE_TYPE (desc))];
+  tree step = gfc_rank_cst[1];
 
   /* size = 0
      for (idx = 0; idx < rank; idx++)

Reply via email to