This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Speed-up get_identifier("main") (take 2)
Jakub Jelinek <jakub@redhat.com> writes:
> On Thu, Aug 07, 2003 at 07:38:26AM -0600, Roger Sayle wrote:
>>
>> On Wed, 6 Aug 2003, Zack Weinberg wrote:
>> > I like the general idea. I'm wondering if it makes sense to make
>> > get_identifier itself be this macro; the definition of get_identifier
>> > is functionally identical to the macro, and it would avoid having to
>> > change most of the uses of get_identifier. However, it might hurt
>> > code size. Could you experiment, please?
>>
>> Ok here's the patch I came up with. The warts this time are that we
>> have to ensure the arguments to get_identifier are free from
>> side-effects, otherwise the behaviour changes. I'm sure we could
>> do something clever to avoid re-evaluation, but I suspect it would
>> be either non-portable or defeat the purpose of getting strlen,
>> a constant string literal.
>>
>> The text size of cc1 increases from 4241925 to 4243589 (1664 bytes),
>> the size of cc1plus increases from 5173765 to 5180021 (6256 bytes)
>> and the text size of jc1 increases from 4343280 to 4347504 (4224 bytes).
>> I think I can decrease these a bit by judicious use of temporary
>> variables in a few places.
>>
>>
>> I also like the proposed __builtin_constant_p solution. Unfortunately,
>> GCC doesn't currently use __builtin_constant_p during stage1 and I'd be
>> completely unable to implement the necessary configure checks myself.
>
> Why do you need any configure checks?
> Simple
> #if GCC_VERSION >= 3000
> # define get_identifier(str) \
> (__builtin_constant_p (str) \
> ? get_identifier_with_length ((str), (unsigned) strlen (str)) \
> : get_identifier (str))
> #endif
>
> should do the job and you don't have to worry about side-effects.
In fact I believe this construct should be safe all the way back to
gcc 2.7, but I don't have convenient access to anything earlier than
2.95.
zw