Partially inline basic_string copy constructor in UNSTABLE
authorMartijn Vels <mvels@google.com>
Tue, 3 Mar 2020 22:47:23 +0000 (17:47 -0500)
committerMartijn Vels <mvels@google.com>
Tue, 3 Mar 2020 22:49:25 +0000 (17:49 -0500)
commit8cf76e913b867a98a9843aa1b3d782632ed5d930
treefa5642ba67ba4e49458ef20fd5c2492cf98de8cb
parent14ac84e5c56e115d57eef01373f1f97267b38ef8
Partially inline basic_string copy constructor in UNSTABLE
his change splits the copy constructor up inlining short initialization, and explicitly outlining long initialization into __init_copy_ctor_external() which is the externally instantiated slow path.

For unstable ABI, this has the following changes:

remove basic_string(const basic_string&)
remove basic_string(const basic_string&, const Allocator&)
add __init_copy_ctor_external(const value_type*, size_type)
Quick local benchmark for Copy:

Master
```
---------------------------------------------------------------
Benchmark                    Time             CPU   Iterations
---------------------------------------------------------------
BM_StringCopy_Empty       3.50 ns         3.51 ns    199326720
BM_StringCopy_Small       3.50 ns         3.51 ns    199510016
BM_StringCopy_Large       15.7 ns         15.7 ns     45230080
BM_StringCopy_Huge        1503 ns         1503 ns       464896
```

```
---------------------------------------------------------------
Benchmark                    Time             CPU   Iterations
---------------------------------------------------------------
BM_StringCopy_Empty       1.99 ns         2.00 ns    356471808
BM_StringCopy_Small       3.29 ns         3.30 ns    203425792
BM_StringCopy_Large       13.3 ns         13.3 ns     52948992
BM_StringCopy_Huge        1472 ns         1472 ns       475136
```

Author: Martijn Vels <martijn.vels@gmail.com>

Reviewers: EricWF, mclow.list

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D73223
libcxx/include/__string
libcxx/include/string
libcxx/test/libcxx/strings/basic.string/string.cons/copy_shrunk_long.pass.cpp [new file with mode: 0644]