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


On 08/04/2017 01:38 PM, Wilco Dijkstra wrote:
>> 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.

There's emit_block_cmp_hints and compare_by_pieces.
There is not anything at present that will do the above
such that we avoid extra loads.

> 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).

It looks like compare_by_pieces does that.


r~


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