This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Gcc builtin review: strchr, strrchr, strchrnul
- From: OndÅej BÃlka <neleai at seznam dot cz>
- To: libc-alpha at sourceware dot org
- Cc: Andrew Pinski <pinskia at gmail dot com>
- Date: Mon, 25 May 2015 19:52:19 +0200
- Subject: Re: Gcc builtin review: strchr, strrchr, strchrnul
- Authentication-results: sourceware.org; auth=none
- References: <20150525101505 dot GA11233 at domone> <20150525114545 dot GC11233 at domone> <20150525121634 dot GF11233 at domone>
On Mon, May 25, 2015 at 02:16:34PM +0200, OndÅej BÃlka wrote:
> Then we have strchr, strrchr, strchrnul.
>
> Aside from suggestion of replacing every strchr with strchrnul there are
> missed optimizations of strchr(x,0) and strchrnul(x,0).
>
> A strrchr(x,0) expands just to strchr(x,0) which is not enough as it
> should do full expansion to x+strlen(x).
>
> Then you miss case when x is constant as in wordexp.
Second problem is that you want builtin to evaluate constant strings
arguments. So why gcc could optimize away
int foo(){
return strchr("foo", 'y');
}
but not when strchr is replaced by rawmemchr and strchrnul?
Also as for effectivity a correct primitive is strchrnul and strchr
should be expanded into it this is problem.