diff options
author | Janne Blomqvist <jb@gcc.gnu.org> | 2018-01-31 16:16:22 +0200 |
---|---|---|
committer | Janne Blomqvist <jb@gcc.gnu.org> | 2018-01-31 16:16:22 +0200 |
commit | 7a157266876058eee921323240e4bfd7e5a84fba (patch) | |
tree | e8ba29378820ddd29c4b97a197217560ac1a8f19 /libgfortran/m4 | |
parent | 9f3dcd14146c29ca01507051ae9729a0f5569173 (diff) | |
download | gcc-7a157266876058eee921323240e4bfd7e5a84fba.zip gcc-7a157266876058eee921323240e4bfd7e5a84fba.tar.gz gcc-7a157266876058eee921323240e4bfd7e5a84fba.tar.bz2 |
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.m4 | 4 | ||||
-rw-r--r-- | libgfortran/m4/eoshift1.m4 | 4 | ||||
-rw-r--r-- | libgfortran/m4/eoshift3.m4 | 4 | ||||
-rw-r--r-- | libgfortran/m4/in_pack.m4 | 5 | ||||
-rw-r--r-- | libgfortran/m4/in_unpack.m4 | 5 | ||||
-rw-r--r-- | libgfortran/m4/reshape.m4 | 27 | ||||
-rw-r--r-- | libgfortran/m4/shape.m4 | 6 | ||||
-rw-r--r-- | libgfortran/m4/spread.m4 | 6 |
8 files changed, 24 insertions, 37 deletions
diff --git a/libgfortran/m4/cshift1.m4 b/libgfortran/m4/cshift1.m4 index bf1c747..504d4d0 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 aab46fd..ab3f6ce 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 a807749..504cc7b 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 5da0a87..2dce24b 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 776bbbf..b6ca9b2 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 79cbca3..1089116 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 c355ca1..ac0b880 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 e8c52aa..b5a0b4e 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; |