[PATCH] D52697: Bug 39129: Speeding up partition_point/lower_bound/upper_bound by using unsigned difference_type when possible.

Marshall Clow via Phabricator reviews at reviews.llvm.org
Sat Sep 29 16:17:01 PDT 2018


mclow.lists added a comment.

In general, this is the kind of optimization that I would rather see the compiler do (everywhere, automatically) than libc++ (here and there, manually).



================
Comment at: benchmarks/algorithms.bench.cpp:90
+BENCHMARK_CAPTURE(BM_LowerBound, random_int32,
+    getRandomIntegerInputs<int32_t>)->Arg(TestNumInputs);
 
----------------
Seems like we need more than 32-bit ints here.



================
Comment at: include/algorithm:4162
+
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
+    bool operator()(_Reference __u)
----------------
Why constexpr after C++11?


================
Comment at: test/std/algorithms/alg.modifying.operations/alg.partitions/partition_point.pass.cpp:92
+    {
+        typedef typename std::__difference_type_to_size_t_cast<int>::__type cast_int;
+        static_assert(std::is_same<cast_int, size_t>::value, "");
----------------
You can't test the functionality of `__difference_type_to_size_t_cast` (a libc++-specific type) in the `test/std` hierarchy. 

That's what `test/libc++` tests are for.



================
Comment at: test/std/algorithms/alg.modifying.operations/alg.partitions/partition_point.pass.cpp:102
+
+        typedef typename std::__difference_type_to_size_t_cast<__int128_t>::__type cast_int128_t;
+        static_assert(std::is_same<cast_int128_t, __int128_t>::value, "");
----------------
This needs to be wrapped in a conditional checking to see if we have `__int128_t`


Repository:
  rCXX libc++

https://reviews.llvm.org/D52697





More information about the libcxx-commits mailing list