Hi Mikael,

Am 07.07.24 um 10:32 schrieb Mikael Morin:
Hello,

I have found this small cleanup lying in a local branch.
Regression-tested on x86_64-linux, OK for master?

besides the minor nit below, this is a nice cleanup!

-- 8< --

No change of behaviour, this makes a variable easier to track.

gcc/fortran/ChangeLog:

        * trans-array.cc (gfc_trans_preloop_setup): Use a separate variable
        for iteration.  Use directly the value of variable I if it is known.
        Move the definition of the variable to the branch where the
        remaining uses are.
---
  gcc/fortran/trans-array.cc | 31 +++++++++++++++++--------------
  1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 510f429ef8e..c34c97257a9 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -4294,7 +4294,6 @@ gfc_trans_preloop_setup (gfc_loopinfo * loop, int dim, 
int flag,
    gfc_ss *ss, *pss;
    gfc_loopinfo *ploop;
    gfc_array_ref *ar;
-  int i;

    /* This code will be executed before entering the scalarization loop
       for this dimension.  */
@@ -4340,19 +4339,10 @@ gfc_trans_preloop_setup (gfc_loopinfo * loop, int dim, 
int flag,
          pss = ss;
        }

-      if (dim == loop->dimen - 1)
-       i = 0;
-      else
-       i = dim + 1;
-
-      /* For the time being, there is no loop reordering.  */
-      gcc_assert (i == ploop->order[i]);
-      i = ploop->order[i];
-
        if (dim == loop->dimen - 1 && loop->parent == NULL)
        {

Strictly speaking, there should now be this assert here:

          gcc_assert (0 == ploop->order[0]);

          stride = gfc_conv_array_stride (info->descriptor,
-                                         innermost_ss (ss)->dim[i]);
+                                         innermost_ss (ss)->dim[0]);

          /* Calculate the stride of the innermost loop.  Hopefully this will
             allow the backend optimizers to do their stuff more effectively.
@@ -4364,7 +4354,7 @@ gfc_trans_preloop_setup (gfc_loopinfo * loop, int dim, 
int flag,
             base offset of the array.  */
          if (info->ref)
            {
-             for (i = 0; i < ar->dimen; i++)
+             for (int i = 0; i < ar->dimen; i++)
                {
                  if (ar->dimen_type[i] != DIMEN_ELEMENT)
                    continue;
@@ -4374,8 +4364,21 @@ gfc_trans_preloop_setup (gfc_loopinfo * loop, int dim, 
int flag,
            }
        }
        else
-       /* Add the offset for the previous loop dimension.  */
-       add_array_offset (pblock, ploop, ss, ar, pss->dim[i], i);
+       {
+         int i;
+
+         if (dim == loop->dimen - 1)
+           i = 0;
+         else
+           i = dim + 1;
+
+         /* For the time being, there is no loop reordering.  */
+         gcc_assert (i == ploop->order[i]);
+         i = ploop->order[i];
+
+         /* Add the offset for the previous loop dimension.  */
+         add_array_offset (pblock, ploop, ss, ar, pss->dim[i], i);
+       }

        /* Remember this offset for the second loop.  */
        if (dim == loop->temp_dim - 1 && loop->parent == NULL)

Otherwise this is OK.

Thanks,
Harald


Reply via email to