[gcc(refs/users/mikael/heads/refactor_descriptor_v08)] Retour en arrière partiel eoshift0.c
Mikael Morin
mikael@gcc.gnu.org
Sun Sep 14 16:38:30 GMT 2025
https://gcc.gnu.org/g:c08d5420cfdaa60c23a91b2bb2915277a7bb6918
commit c08d5420cfdaa60c23a91b2bb2915277a7bb6918
Author: Mikael Morin <mikael@gcc.gnu.org>
Date: Sat Sep 13 21:07:09 2025 +0200
Retour en arrière partiel eoshift0.c
Diff:
---
libgfortran/intrinsics/eoshift0.c | 33 ++++++++++++++++-----------------
1 file changed, 16 insertions(+), 17 deletions(-)
diff --git a/libgfortran/intrinsics/eoshift0.c b/libgfortran/intrinsics/eoshift0.c
index 00f75f9a4b1a..3baa966398cb 100644
--- a/libgfortran/intrinsics/eoshift0.c
+++ b/libgfortran/intrinsics/eoshift0.c
@@ -63,21 +63,24 @@ eoshift0 (gfc_array_char * ret, const gfc_array_char * array,
if (ret->base_addr == NULL)
{
- index_type cnt;
int i;
ret->offset = 0;
GFC_DTYPE_COPY(ret,array);
- cnt = 1;
for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++)
{
- index_type ub;
+ index_type ub, str;
ub = GFC_DESCRIPTOR_EXTENT(array,i) - 1;
- GFC_DESCRIPTOR_DIMENSION_SET(ret, i, 0, ub, cnt);
+ if (i == 0)
+ str = 1;
+ else
+ str = GFC_DESCRIPTOR_EXTENT(ret,i-1)
+ * GFC_DESCRIPTOR_STRIDE(ret,i-1);
+
+ GFC_DESCRIPTOR_DIMENSION_SET(ret, i, 0, ub, str);
- cnt = cnt * GFC_DESCRIPTOR_EXTENT(ret,i);
}
/* xmallocarray allocates a single byte for zero size. */
@@ -99,36 +102,31 @@ eoshift0 (gfc_array_char * ret, const gfc_array_char * array,
sstride[0] = -1;
rstride[0] = -1;
- index_type contiguous_extent;
if (which > 0)
{
/* Test if both ret and array are contiguous. */
index_type r_ex, a_ex;
- r_ex = GFC_DESCRIPTOR_SIZE (ret);
- a_ex = GFC_DESCRIPTOR_SIZE (array);
+ r_ex = 1;
+ a_ex = 1;
do_blocked = true;
- contiguous_extent = 1;
dim = GFC_DESCRIPTOR_RANK (array);
for (n = 0; n < dim; n ++)
{
index_type rs, as;
- rs = GFC_DESCRIPTOR_STRIDE_BYTES (ret, n);
+ rs = GFC_DESCRIPTOR_STRIDE (ret, n);
if (rs != r_ex)
{
do_blocked = false;
break;
}
- as = GFC_DESCRIPTOR_STRIDE_BYTES (array, n);
+ as = GFC_DESCRIPTOR_STRIDE (array, n);
if (as != a_ex)
{
do_blocked = false;
break;
}
r_ex *= GFC_DESCRIPTOR_EXTENT (ret, n);
-
- index_type extent = GFC_DESCRIPTOR_EXTENT (array, n);
- a_ex *= extent;
- contiguous_extent *= extent;
+ a_ex *= GFC_DESCRIPTOR_EXTENT (array, n);
}
}
else
@@ -149,8 +147,9 @@ eoshift0 (gfc_array_char * ret, const gfc_array_char * array,
bn = eoshift(a,sh*n1*n2,1)
so a block move can be used for dim>1. */
- len = contiguous_extent * GFC_DESCRIPTOR_EXTENT(array, which);
- shift *= contiguous_extent;
+ index_type count_low = GFC_DESCRIPTOR_STRIDE(array, which);
+ len = count_low * GFC_DESCRIPTOR_EXTENT(array, which);
+ shift *= count_low;
roffset = size;
soffset = size;
for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++)
More information about the Gcc-cvs
mailing list