[gcc(refs/users/mikael/heads/refactor_descriptor_v291 .01)] Déroulement boucle set_gfc_from_cfi

Mikael Morin via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:291c1873dc35f822f76cd432a2ffb80b2a8e2013

commit 291c1873dc35f822f76cd432a2ffb80b2a8e2013
Author: Mikael Morin <[email protected]>
Date:   Fri Aug 15 15:42:37 2025 +0200

    Déroulement boucle set_gfc_from_cfi

Diff:
---
 gcc/fortran/trans-descriptor.cc | 78 ++++++++++++++++++++++-------------------
 1 file changed, 42 insertions(+), 36 deletions(-)

diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index db2a0cca6afb..50171f2d3046 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -2228,26 +2228,6 @@ gfc_set_gfc_from_cfi (stmtblock_t *block, stmtblock_t *block2, tree gfc_desc,
   tree offset = gfc_create_var (gfc_array_index_type, "offset");
   gfc_add_modify (block2, offset, gfc_index_zero_node);
 
-  if (sym->as->rank > 0 && !sym->attr.pointer && !sym->attr.allocatable)
-    for (int i = 0; i < sym->as->rank; ++i)
-      {
-	gfc_se se;
-	gfc_init_se (&se, NULL );
-	if (sym->as->lower[i])
-	  {
-	    gfc_conv_expr (&se, sym->as->lower[i]);
-	    tmp = se.expr;
-	  }
-	else
-	  tmp = gfc_index_one_node;
-	gfc_add_block_to_block (block2, &se.pre);
-	gfc_conv_descriptor_lbound_set (block2, gfc_desc, gfc_rank_cst[i], tmp);
-	gfc_add_block_to_block (block2, &se.post);
-      }
-
-  /* Loop: for (i = 0; i < rank; ++i).  */
-  tree idx = gfc_create_var (gfc_array_dim_rank_type, "idx");
-
   /* Stride  */
   tree stride;
   if (do_copy_inout)
@@ -2255,25 +2235,51 @@ gfc_set_gfc_from_cfi (stmtblock_t *block, stmtblock_t *block2, tree gfc_desc,
   else
     stride = NULL_TREE;
 
-  /* Loop body.  */
-  stmtblock_t loop_body;
-  gfc_init_block (&loop_body);
-  /* gfc->dim[i].lbound = ... */
-  tree lbound;
-  if (sym->attr.pointer || sym->attr.allocatable)
-    lbound = gfc_get_cfi_dim_lbound (cfi, idx);
-  else if (sym->as->rank < 0)
-    lbound = gfc_index_one_node;
+  if (sym->as->rank > 0 && !sym->attr.pointer && !sym->attr.allocatable)
+    {
+      for (int i = 0; i < sym->as->rank; ++i)
+	{
+	  gfc_se se;
+	  gfc_init_se (&se, NULL );
+	  if (sym->as->lower[i])
+	    {
+	      gfc_conv_expr (&se, sym->as->lower[i]);
+	      tmp = se.expr;
+	    }
+	  else
+	    tmp = gfc_index_one_node;
+	  gfc_add_block_to_block (block2, &se.pre);
+	  tree lbound = gfc_evaluate_now (tmp, block2);
+	  gfc_add_block_to_block (block2, &se.post);
+	  set_gfc_dimension_from_cfi (block2, gfc_desc, cfi, gfc_rank_cst[i],
+				      lbound, offset, stride, do_copy_inout);
+	}
+    }
   else
-    lbound = gfc_conv_descriptor_lbound_get (gfc_desc, idx);
+    {
+      /* Loop: for (i = 0; i < rank; ++i).  */
+      tree idx = gfc_create_var (TREE_TYPE (rank), "idx");
 
-  set_gfc_dimension_from_cfi (&loop_body, gfc_desc, cfi, idx, lbound, offset,
-			      stride, do_copy_inout);
+      /* Loop body.  */
+      stmtblock_t loop_body;
+      gfc_init_block (&loop_body);
+      /* gfc->dim[i].lbound = ... */
+      tree lbound;
+      if (sym->attr.pointer || sym->attr.allocatable)
+	lbound = gfc_get_cfi_dim_lbound (cfi, idx);
+      else if (sym->as->rank < 0)
+	lbound = gfc_index_one_node;
+      else
+	gcc_unreachable ();
+
+      set_gfc_dimension_from_cfi (&loop_body, gfc_desc, cfi, idx, lbound, offset,
+				  stride, do_copy_inout);
 
-  /* 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));
+      /* 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_conv_descriptor_offset_set (block2, gfc_desc, offset);
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.