[cfe-dev] [llvm-dev] Improvements to std::find and std::count

Eric Fiselier via cfe-dev cfe-dev at lists.llvm.org
Thu May 4 02:27:46 PDT 2017


On Mon, May 1, 2017 at 10:15 AM, Craig Topper via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> Adding cfe-dev. Removing llvm-dev.  Frontend and libary discussions are
> better represented on that list.
>
> ~Craig
>
> On Sat, Apr 29, 2017 at 7:13 AM, Daniel Cooke via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
>> Hi,
>>
>> I recently posted a question on StackOverflow regarding the performance
>> of std::find and std::count when provided with char* input:
>> http://stackoverflow.com/questions/43483378/why-arent
>> -stdcount-and-stdfind-optimised-to-use-memchr.
>>
>> I would propose adding overloads of these functions for char* and const
>> char* inputs that delegate to memchr, something like:
>>
>> inline const char* find(const char* first, const char* const last, const
>> char value)
>> {
>> const auto result = std::memchr(first, value, last - first);
>> return result != nullptr ? static_cast<const char*>(result) : last;
>> }
>>
>> inline typename std::iterator_traits<const char*>::difference_type
>> count(const char* first, const char* const last, const char value)
>> {
>> typename std::iterator_traits<const char*>::difference_type result {0};
>> while (first && first != last) {
>> if ((first = static_cast<const char*>(std::memchr(first, value, last -
>> first)))) {
>> ++result;
>> ++first;
>> }
>> }
>> return result;
>> }
>>
>> I’ve never contributed to LLVM, so I’m not sure how to proceed, if this
>> is a change that is likely to be accepted?
>>
>
If the change *measurably* improves performance while maintaining
correctness then yes, it is very likely to be accepted.

The first step would be to write a benchmark that demonstrates the
performance difference by adding a test in
`libcxx/benchmarks/algorithms.bench.cpp`.
Personally I would write two different benchmarks, one that uses
`std::find` and another that uses `std::memchr` on the same set of input.

/Eric


>> Best,
>> Dan
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170504/dd36e070/attachment.html>


More information about the cfe-dev mailing list