On Tue, 20 Dec 2016 16:40:13 +0100 Jakub Jelinek <ja...@redhat.com> wrote:
> On Tue, Dec 20, 2016 at 04:29:07PM +0100, Andre Vehreschild wrote: > > > The first one is GCC internal type for representing sizes, the latter is > > > the C size_t (usually they have the same precision, they always have the > > > same signedness (unsigned)). > > > In the past sizetype actually has been a signed type with very special > > > behavior. > > > > I am still wondering if it does not make sense to have something like > > gfc_size_t_zero_node to prevent us from repeating build_zero_cst > > (size_type_node) all the time. I had to use it 16 times, i.e., 16 times the > > code for building a zero size type node is generated instead of a reference > > to a "constant". And I don't want to know how often size_zero_node is used > > in the wrong location. > > built_int_cst (size_type_node, 0) is actually faster than build_zero_cst, > one fewer level of indirection. > The 0 constant is cached in the type itself, so it actually in the end > is basically just: > return TREE_VEC_ELT (TYPE_CACHED_VALUES (type), 1); > > Adding a variable to hold gfc_size_t_zero_node would mean you'd need to add > a GC root to hold it. > > Note, sizetype should be still what is usually used, only if you in the ABI > have something declared as C size_t, then size_type_node should be used. Well, then how about: #define gfc_size_t_zero_node build_int_cst (size_type_node, 0) We can't get any faster and for new and old gfortran-hackers one identifier's meaning is faster to grasp than two's. - Andre -- Andre Vehreschild * Email: vehre ad gmx dot de