[PATCH] Add inline bsearch expansion

Andreas Jaeger aj@suse.com
Sun Jan 6 19:28:00 GMT 2013


On 01/05/2013 04:26 PM, Ondřej Bílka wrote:
> On Sat, Jan 05, 2013 at 02:19:37PM +0100, Jakub Jelinek wrote:
>> On Sat, Jan 05, 2013 at 01:51:30PM +0100, Ondřej Bílka wrote:
>>> I looked into qsort/bsearch functions. Here I
>>> added inline version of bsearch.
>>>
>>> It saves multiplications instructions as size is
>>> most of time known in advance.
>>> When compiled with gcc-4.7.1 and icc 12.1.4 with -O2
>>> it can inline ccmp functions from example below.
>>> gcc-4.5.3 does not inline ccmp.
>>
>> I don't comment on whether it is a good idea or not etc.,
>> just nits that you should guard it with
>> #ifdef __USE_EXTERN_INLINES
>> and use
>> __extern_inline
>> instead of extern inline.
> OK
>>
>> 	Jakub
>
> I also added gcc-4.7 requirement as element size can be probably
> better handled separately. When I profiled my system bsearch was
> mostly used by firefox. There element sizes were from 90% 8,16,32
> and  10% 40,56.
>
> ---
>   stdlib/stdlib.h |   33 +++++++++++++++++++++++++++++++++
>   1 files changed, 33 insertions(+), 0 deletions(-)
>
> diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
> index fc83f4e..bcb504e 100644
> --- a/stdlib/stdlib.h
> +++ b/stdlib/stdlib.h
> @@ -755,6 +755,39 @@ extern void *bsearch (const void *__key, const void *__base,
>   		      size_t __nmemb, size_t __size, __compar_fn_t __compar)
>        __nonnull ((1, 2, 5)) __wur;
>
> +
> +#ifdef __USE_EXTERN_INLINES
> +/* From gcc-4.7 we can inline __compar function.  */
> +#if __GNUC_PREREQ (4, 7)

What exactly is the dependency on GCC 4.7? Just that 4.7 inlines this 
and previous versions not?

What about other compilers that inline it?

I guess we can drop the dependency on 4.7, can't we?

Andreas
-- 
  Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
   SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
    GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
     GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126



More information about the Libc-alpha mailing list