[PATCH] Use pointer sized array indices.

Janne Blomqvist blomqvist.janne@gmail.com
Fri Dec 29 18:28:00 GMT 2017


On Fri, Dec 29, 2017 at 7:17 PM, Thomas Koenig <tkoenig@netcologne.de> wrote:
> Hi Janne,
>
>> 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.
>
>
> Unless I have missed something, all the examples are for cases where
> the array is of maximum size GFC_MAX_DIMENSIONS.

Many, but not all.

> This is why they
> were left as int in the first place (because it is unlikely we will have
> arrays of more than 2^31-1 dimensions soon :-).
>
> Do you really think this change is necessary? If not, I'd rather avoid
> such a change.

I'm not planning on supporting > 2**31-1 dimensions, no. :)

But even if we know that the maximum value is always going to be
smaller, by using pointer-sized variables the compiler can generate
slightly more efficient code.

See e.g. https://godbolt.org/g/oAvw5L ; in the functions with a loop,
the ones which use pointer-sized indices have shorter preambles as
well as loop bodies. And for the simple functions that just index an
array, by using pointer-sized indices there is no need to zero the
upper half of the registers.

I mean, it's not a huge improvement, but it might be a tiny one in some cases.

Also, by moving the induction variable from the beginning of the
function into the loop header, it makes it easier for both readers and
the compiler to see the scope of the variable.

-- 
Janne Blomqvist



More information about the Gcc-patches mailing list