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