[Fortran-dev, patch] Use only lbound/extent/sm in the array descriptor
Tobias Burnus
burnus@net-b.de
Sun Mar 11 18:45:00 GMT 2012
Thomas Koenig wrote:
>> There are still 227 test-suite failures ("FAIL" lines) affecting 27
>> test-suite files. That's slightly down from the 269 lines the branch
>> currently has. (Some issues can be fixed by modifying the tree dump
>> patterns, but most seem to be "real" problems.)
>>
>> Build and regtested on x86-64-linux.
>> OK for the branch?
>
> The library parts look OK to me.
I have now commit it (Rev. 185199) - thanks for looking at the library part.
>
> There is just one point of efficiency.
> +#define GFC_DESCRIPTOR_STRIDE(desc,i) \
> + (GFC_DESCRIPTOR_SM(desc,i) / GFC_DESCRIPTOR_SIZE(desc))
>
> In most generated files, GFC_DESCRIPTOR_SIZE is a constant known
> at compile-time (and usually a power of two), which means that the
> division can be done in a simple shift. If we get the size from the
> descriptor, we actually have to divide, which is expensive.
I think one should also go through all the files and check whether one
can replace _STRIDE by _SM. In some cases, the code actually does this:
It calls _STRIDE and later multiplies by the byte size. I tried to avoid
_STRIDE at some places, but I only looked at it in the context of
setting the descriptor. Similarly, but less critical: One should check
whether EXTENT can replace UBOUND.
Side note: c_f_pointer0 (which is called for array with shape) is
currently broken as "dtype" is not set before the call - and thus the
size is not known, which is required for setting the "sm". I think the
best would be to replace it by inline code. (That's the reason behind 5
of the 24 failing test-case files.)
> I would commit the patch now, adding
>>
>> TODO:
>> - Fixing the regressions.
>> - Cleanup of the library and the front end
>> - Switching also from ubound -> extent for nondescriptor arrays?
>> - Properly implement subpointers
> - Avoid division for GFC_DESCRIPTOR_STRIDE where possible.
Well, that's what I meant by cleanup: Trying to update the usage such
that one avoids ubound/stride when extent/sm are required - and doing
other optimizations like that one. Maybe one can also get rid of some of
the macros if they are unused.
In any case, I would be happy if you could have a look.
I think the real fun will start when we have to implement the other
parts (esp. lower_bound semantic, elem_len and in particular the type
system of TS29113).
Tobias
More information about the Gcc-patches
mailing list