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