This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: help with PR78809 - inline strcmp for small constant strings


Richard Henderson wrote:    
> On 08/04/2017 05:59 AM, Prathamesh Kulkarni wrote:

> > For i386, it seems strcmp is expanded inline via cmpstr optab by 
> > expand_builtin_strcmp if one of the strings is constant. Could we similarly
> > define cmpstr pattern for AArch64?
> 
> Certainly that's possible.

I'd suggest to do it as a target independent way, this is not a target specific
optimization and shouldn't be done in the target unless there are special
strcmp instructions.

> For constant strings of small length (upto 3?), I was wondering if it'd be a
> good idea to manually unroll strcmp loop, similar to __strcmp_* macros in
> bits/string.h?>
> For eg in gimple-fold, transform
> x = __builtin_strcmp(s, "ab")
> to
> x = s[0] - 'a';
> if (x == 0)
> {
>   x = s[1] - 'b';
>   if (x == 0)
>     x = s[2];
> }

If there is already code that does something similar (see comment #1 in PR78809),
it could be easily adapted to handle more cases.

>  if (memcmp(s, "ab", 3) != 0)
>
> to be implemented with cmp+ccmp+ccmp and one branch.

Even better would be wider loads if you either know the alignment of s or it's max size
(although given the overhead of creating the return value that works best for equality).

Wilco

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]