[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:52b25d9357cf021da2e294fe7b8e7b69957a0171

commit 52b25d9357cf021da2e294fe7b8e7b69957a0171
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.