aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/m4
diff options
context:
space:
mode:
authorJanne Blomqvist <jb@gcc.gnu.org>2018-01-31 16:16:22 +0200
committerJanne Blomqvist <jb@gcc.gnu.org>2018-01-31 16:16:22 +0200
commit7a157266876058eee921323240e4bfd7e5a84fba (patch)
treee8ba29378820ddd29c4b97a197217560ac1a8f19 /libgfortran/m4
parent9f3dcd14146c29ca01507051ae9729a0f5569173 (diff)
Use pointer sized array indices.
Using pointer sized variables (e.g. size_t / ptrdiff_t) when the variables are used as array indices allows accessing larger arrays, and can be a slight performance improvement due to no need for sign or zero extending, or masking. Regtested on x86_64-pc-linux-gnu. libgfortran/ChangeLog: 2018-01-31 Janne Blomqvist <jb@gcc.gnu.org> * generated/cshift1_16.c (cshift1): Regenerated. * generated/cshift1_4.c (cshift1): Regenerated. * generated/cshift1_8.c (cshift1): Regenerated. * generated/eoshift1_16.c (eoshift1): Regenerated. * generated/eoshift1_4.c (eoshift1): Regenerated. * generated/eoshift1_8.c (eoshift1): Regenerated. * generated/eoshift3_16.c (eoshift3): Regenerated. * generated/eoshift3_4.c (eoshift3): Regenerated. * generated/eoshift3_8.c (eoshift3): Regenerated. * generated/in_pack_c10.c (internal_pack_c10): Regenerated. * generated/in_pack_c16.c (internal_pack_c16): Regenerated. * generated/in_pack_c4.c (internal_pack_c4): Regenerated. * generated/in_pack_c8.c (internal_pack_c8): Regenerated. * generated/in_pack_i1.c (internal_pack_1): Regenerated. * generated/in_pack_i16.c (internal_pack_16): Regenerated. * generated/in_pack_i2.c (internal_pack_2): Regenerated. * generated/in_pack_i4.c (internal_pack_4): Regenerated. * generated/in_pack_i8.c (internal_pack_8): Regenerated. * generated/in_pack_r10.c (internal_pack_r10): Regenerated. * generated/in_pack_r16.c (internal_pack_r16): Regenerated. * generated/in_pack_r4.c (internal_pack_r4): Regenerated. * generated/in_pack_r8.c (internal_pack_r8): Regenerated. * generated/in_unpack_c10.c (internal_unpack_c10): Regenerated. * generated/in_unpack_c16.c (internal_unpack_c16): Regenerated. * generated/in_unpack_c4.c (internal_unpack_c4): Regenerated. * generated/in_unpack_c8.c (internal_unpack_c8): Regenerated. * generated/in_unpack_i1.c (internal_unpack_1): Regenerated. * generated/in_unpack_i16.c (internal_unpack_16): Regenerated. * generated/in_unpack_i2.c (internal_unpack_2): Regenerated. * generated/in_unpack_i4.c (internal_unpack_4): Regenerated. * generated/in_unpack_i8.c (internal_unpack_8): Regenerated. * generated/in_unpack_r10.c (internal_unpack_r10): Regenerated. * generated/in_unpack_r16.c (internal_unpack_r16): Regenerated. * generated/in_unpack_r4.c (internal_unpack_r4): Regenerated. * generated/in_unpack_r8.c (internal_unpack_r8): Regenerated. * generated/reshape_c10.c (reshape_c10): Regenerated. * generated/reshape_c16.c (reshape_c16): Regenerated. * generated/reshape_c4.c (reshape_c4): Regenerated. * generated/reshape_c8.c (reshape_c8): Regenerated. * generated/reshape_i16.c (reshape_16): Regenerated. * generated/reshape_i4.c (reshape_4): Regenerated. * generated/reshape_i8.c (reshape_8): Regenerated. * generated/reshape_r10.c (reshape_r10): Regenerated. * generated/reshape_r16.c (reshape_r16): Regenerated. * generated/reshape_r4.c (reshape_r4): Regenerated. * generated/reshape_r8.c (reshape_r8): Regenerated. * generated/shape_i1.c (shape_1): Regenerated. * generated/shape_i16.c (shape_16): Regenerated. * generated/shape_i2.c (shape_2): Regenerated. * generated/shape_i4.c (shape_4): Regenerated. * generated/shape_i8.c (shape_8): Regenerated. * generated/spread_c10.c (spread_scalar_c10): Regenerated. * generated/spread_c16.c (spread_scalar_c16): Regenerated. * generated/spread_c4.c (spread_scalar_c4): Regenerated. * generated/spread_c8.c (spread_scalar_c8): Regenerated. * generated/spread_i1.c (spread_scalar_i1): Regenerated. * generated/spread_i16.c (spread_scalar_i16): Regenerated. * generated/spread_i2.c (spread_scalar_i2): Regenerated. * generated/spread_i4.c (spread_scalar_i4): Regenerated. * generated/spread_i8.c (spread_scalar_i8): Regenerated. * generated/spread_r10.c (spread_scalar_r10): Regenerated. * generated/spread_r16.c (spread_scalar_r16): Regenerated. * generated/spread_r4.c (spread_scalar_r4): Regenerated. * generated/spread_r8.c (spread_scalar_r8): Regenerated. * intrinsics/random.c (jump): Use size_t for array index in loop. (getosrandom): Likewise. (arandom_r4): Make n an index_type. (arandom_r8): Likewise. (arandom_r10): Likewise. (arandom_r16): Likewise. (scramble_seed): Use size_t for array index in loop. * m4/cshift1.m4: Make i an index_type. * m4/eoshift1.m4: Likewise. * m4/eoshift3.m4: Likewise. * m4/in_pack.m4: Make n an index_type. * m4/in_unpack.m4: Likewise. * m4/reshape.m4: Make n and dim index_type's. * m4/shape.m4: Make n an index_type. * m4/spread.m4: Likewise, use index_type argument rather than copying to int. * runtime/bounds.c (bounds_ifunction_return): Make n an index_type. * runtime/in_pack_generic.c (internal_pack): Likewise. * runtime/in_unpack_generic.c (internal_unpack): Make n and size index_type's. From-SVN: r257234
Diffstat (limited to 'libgfortran/m4')
-rw-r--r--libgfortran/m4/cshift1.m44
-rw-r--r--libgfortran/m4/eoshift1.m44
-rw-r--r--libgfortran/m4/eoshift3.m44
-rw-r--r--libgfortran/m4/in_pack.m45
-rw-r--r--libgfortran/m4/in_unpack.m45
-rw-r--r--libgfortran/m4/reshape.m427
-rw-r--r--libgfortran/m4/shape.m46
-rw-r--r--libgfortran/m4/spread.m46
8 files changed, 24 insertions, 37 deletions
diff --git a/libgfortran/m4/cshift1.m4 b/libgfortran/m4/cshift1.m4
index bf1c7478404..504d4d00bc7 100644
--- a/libgfortran/m4/cshift1.m4
+++ b/libgfortran/m4/cshift1.m4
@@ -78,12 +78,10 @@ cshift1 (gfc_array_char * const restrict ret,
if (ret->base_addr == NULL)
{
- int i;
-
ret->base_addr = xmallocarray (arraysize, size);
ret->offset = 0;
GFC_DTYPE_COPY(ret,array);
- for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++)
+ for (index_type i = 0; i < GFC_DESCRIPTOR_RANK (array); i++)
{
index_type ub, str;
diff --git a/libgfortran/m4/eoshift1.m4 b/libgfortran/m4/eoshift1.m4
index aab46fd08a5..ab3f6ce6a19 100644
--- a/libgfortran/m4/eoshift1.m4
+++ b/libgfortran/m4/eoshift1.m4
@@ -85,11 +85,9 @@ eoshift1 (gfc_array_char * const restrict ret,
arraysize = size0 ((array_t *) array);
if (ret->base_addr == NULL)
{
- int i;
-
ret->offset = 0;
GFC_DTYPE_COPY(ret,array);
- for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++)
+ for (index_type i = 0; i < GFC_DESCRIPTOR_RANK (array); i++)
{
index_type ub, str;
diff --git a/libgfortran/m4/eoshift3.m4 b/libgfortran/m4/eoshift3.m4
index a8077496760..504cc7ba93a 100644
--- a/libgfortran/m4/eoshift3.m4
+++ b/libgfortran/m4/eoshift3.m4
@@ -86,12 +86,10 @@ eoshift3 (gfc_array_char * const restrict ret,
if (ret->base_addr == NULL)
{
- int i;
-
ret->base_addr = xmallocarray (arraysize, size);
ret->offset = 0;
GFC_DTYPE_COPY(ret,array);
- for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++)
+ for (index_type i = 0; i < GFC_DESCRIPTOR_RANK (array); i++)
{
index_type ub, str;
diff --git a/libgfortran/m4/in_pack.m4 b/libgfortran/m4/in_pack.m4
index 5da0a87a571..2dce24bc03f 100644
--- a/libgfortran/m4/in_pack.m4
+++ b/libgfortran/m4/in_pack.m4
@@ -46,7 +46,6 @@ internal_pack_'rtype_ccode` ('rtype` * source)
const 'rtype_name` *src;
'rtype_name` * restrict dest;
'rtype_name` *destptr;
- int n;
int packed;
/* TODO: Investigate how we can figure out if this is a temporary
@@ -55,7 +54,7 @@ internal_pack_'rtype_ccode` ('rtype` * source)
dim = GFC_DESCRIPTOR_RANK (source);
ssize = 1;
packed = 1;
- for (n = 0; n < dim; n++)
+ for (index_type n = 0; n < dim; n++)
{
count[n] = 0;
stride[n] = GFC_DESCRIPTOR_STRIDE(source,n);
@@ -91,7 +90,7 @@ internal_pack_'rtype_ccode` ('rtype` * source)
src += stride0;
count[0]++;
/* Advance to the next source element. */
- n = 0;
+ index_type n = 0;
while (count[n] == extent[n])
{
/* When we get to the end of a dimension, reset it and increment
diff --git a/libgfortran/m4/in_unpack.m4 b/libgfortran/m4/in_unpack.m4
index 776bbbf886e..b6ca9b242fe 100644
--- a/libgfortran/m4/in_unpack.m4
+++ b/libgfortran/m4/in_unpack.m4
@@ -42,7 +42,6 @@ internal_unpack_'rtype_ccode` ('rtype` * d, const 'rtype_name` * src)
index_type dim;
index_type dsize;
'rtype_name` * restrict dest;
- int n;
dest = d->base_addr;
if (src == dest || !src)
@@ -50,7 +49,7 @@ internal_unpack_'rtype_ccode` ('rtype` * d, const 'rtype_name` * src)
dim = GFC_DESCRIPTOR_RANK (d);
dsize = 1;
- for (n = 0; n < dim; n++)
+ for (index_type n = 0; n < dim; n++)
{
count[n] = 0;
stride[n] = GFC_DESCRIPTOR_STRIDE(d,n);
@@ -80,7 +79,7 @@ internal_unpack_'rtype_ccode` ('rtype` * d, const 'rtype_name` * src)
dest += stride0;
count[0]++;
/* Advance to the next source element. */
- n = 0;
+ index_type n = 0;
while (count[n] == extent[n])
{
/* When we get to the end of a dimension, reset it and increment
diff --git a/libgfortran/m4/reshape.m4 b/libgfortran/m4/reshape.m4
index 79cbca3feed..108911685de 100644
--- a/libgfortran/m4/reshape.m4
+++ b/libgfortran/m4/reshape.m4
@@ -76,8 +76,6 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
const 'rtype_name` *pptr;
const 'rtype_name` *src;
- int n;
- int dim;
int sempty, pempty, shape_empty;
index_type shape_data[GFC_MAX_DIMENSIONS];
@@ -91,7 +89,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
shape_empty = 0;
- for (n = 0; n < rdim; n++)
+ for (index_type n = 0; n < rdim; n++)
{
shape_data[n] = shape->base_addr[n * GFC_DESCRIPTOR_STRIDE(shape,0)];
if (shape_data[n] <= 0)
@@ -106,7 +104,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
index_type alloc_size;
rs = 1;
- for (n = 0; n < rdim; n++)
+ for (index_type n = 0; n < rdim; n++)
{
rex = shape_data[n];
@@ -133,7 +131,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
pdim = GFC_DESCRIPTOR_RANK (pad);
psize = 1;
pempty = 0;
- for (n = 0; n < pdim; n++)
+ for (index_type n = 0; n < pdim; n++)
{
pcount[n] = 0;
pstride[n] = GFC_DESCRIPTOR_STRIDE(pad,n);
@@ -164,7 +162,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
index_type ret_extent, source_extent;
rs = 1;
- for (n = 0; n < rdim; n++)
+ for (index_type n = 0; n < rdim; n++)
{
rs *= shape_data[n];
ret_extent = GFC_DESCRIPTOR_EXTENT(ret,n);
@@ -177,7 +175,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
source_extent = 1;
sdim = GFC_DESCRIPTOR_RANK (source);
- for (n = 0; n < sdim; n++)
+ for (index_type n = 0; n < sdim; n++)
{
index_type se;
se = GFC_DESCRIPTOR_EXTENT(source,n);
@@ -194,10 +192,10 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
int seen[GFC_MAX_DIMENSIONS];
index_type v;
- for (n = 0; n < rdim; n++)
+ for (index_type n = 0; n < rdim; n++)
seen[n] = 0;
- for (n = 0; n < rdim; n++)
+ for (index_type n = 0; n < rdim; n++)
{
v = order->base_addr[n * GFC_DESCRIPTOR_STRIDE(order,0)] - 1;
@@ -215,8 +213,9 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
}
rsize = 1;
- for (n = 0; n < rdim; n++)
+ for (index_type n = 0; n < rdim; n++)
{
+ index_type dim;
if (order)
dim = order->base_addr[n * GFC_DESCRIPTOR_STRIDE(order,0)] - 1;
else
@@ -247,7 +246,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
ssize = 1;
sempty = 0;
- for (n = 0; n < sdim; n++)
+ for (index_type n = 0; n < sdim; n++)
{
scount[n] = 0;
sstride[n] = GFC_DESCRIPTOR_STRIDE(source,n);
@@ -287,7 +286,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
src = pptr;
sptr = pptr;
sdim = pdim;
- for (dim = 0; dim < pdim; dim++)
+ for (index_type dim = 0; dim < pdim; dim++)
{
scount[dim] = pcount[dim];
sextent[dim] = pextent[dim];
@@ -307,7 +306,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
scount[0]++;
/* Advance to the next destination element. */
- n = 0;
+ index_type n = 0;
while (rcount[n] == rextent[n])
{
/* When we get to the end of a dimension, reset it and increment
@@ -347,7 +346,7 @@ reshape_'rtype_ccode` ('rtype` * const restrict ret,
/* Switch to the pad array. */
sptr = NULL;
sdim = pdim;
- for (dim = 0; dim < pdim; dim++)
+ for (index_type dim = 0; dim < pdim; dim++)
{
scount[dim] = pcount[dim];
sextent[dim] = pextent[dim];
diff --git a/libgfortran/m4/shape.m4 b/libgfortran/m4/shape.m4
index c355ca131d9..ac0b88038a3 100644
--- a/libgfortran/m4/shape.m4
+++ b/libgfortran/m4/shape.m4
@@ -37,12 +37,10 @@ void
shape_'rtype_kind` ('rtype` * const restrict ret,
const array_t * const restrict array)
{
- int n;
index_type stride;
index_type extent;
- int rank;
- rank = GFC_DESCRIPTOR_RANK (array);
+ int rank = GFC_DESCRIPTOR_RANK (array);
if (ret->base_addr == NULL)
{
@@ -56,7 +54,7 @@ shape_'rtype_kind` ('rtype` * const restrict ret,
if (GFC_DESCRIPTOR_EXTENT(ret,0) < 1)
return;
- for (n = 0; n < rank; n++)
+ for (index_type n = 0; n < rank; n++)
{
extent = GFC_DESCRIPTOR_EXTENT(array,n);
ret->base_addr[n * stride] = extent > 0 ? extent : 0 ;
diff --git a/libgfortran/m4/spread.m4 b/libgfortran/m4/spread.m4
index e8c52aad144..b5a0b4ed363 100644
--- a/libgfortran/m4/spread.m4
+++ b/libgfortran/m4/spread.m4
@@ -228,10 +228,8 @@ spread_'rtype_code` ('rtype` *ret, const 'rtype` *source,
void
spread_scalar_'rtype_code` ('rtype` *ret, const 'rtype_name` *source,
- const index_type along, const index_type pncopies)
+ const index_type along, const index_type ncopies)
{
- int n;
- int ncopies = pncopies;
'rtype_name` * restrict dest;
index_type stride;
@@ -257,7 +255,7 @@ spread_scalar_'rtype_code` ('rtype` *ret, const 'rtype_name` *source,
dest = ret->base_addr;
stride = GFC_DESCRIPTOR_STRIDE(ret,0);
- for (n = 0; n < ncopies; n++)
+ for (index_type n = 0; n < ncopies; n++)
{
*dest = *source;
dest += stride;