diff options
author | Eric Fiselier <eric@efcs.ca> | 2020-01-15 17:27:10 -0500 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2020-01-15 17:27:10 -0500 |
commit | 58c7fa5adeb218737f10ffeaeed0d9eb21f4a2f0 (patch) | |
tree | 55b1309fbf3d24a3bcc255fe067d155c2f7fefa7 /llvm/lib/IR/Module.cpp | |
parent | 5aeb6798f268f74dc8b0bf5bb75b9c57ec938548 (diff) | |
download | llvm-58c7fa5adeb218737f10ffeaeed0d9eb21f4a2f0.zip llvm-58c7fa5adeb218737f10ffeaeed0d9eb21f4a2f0.tar.gz llvm-58c7fa5adeb218737f10ffeaeed0d9eb21f4a2f0.tar.bz2 |
[libc++] Optimize basic_string::operator=(const basic_string&) for SSO assignments
This change optimizes the operator=() assignment for short strings by direcly
copying the raw data from the source into the current instance. This creates an
optimized / inlined mempcy up to over 2X faster for short string assignments.
With inlining enabled for operator=, performance is up to 6X faster.
Benchmarks 'as is':
name old time/op new time/op delta
BM_StringAssignStr_Empty_Opaque 6.05ns ± 2% 3.59ns ± 0% -40.67%
BM_StringAssignStr_Empty_Transparent 5.15ns ± 0% 3.08ns ± 0% -40.12%
BM_StringAssignStr_Small_Opaque 7.71ns ± 0% 3.59ns ± 0% -53.45%
BM_StringAssignStr_Small_Transparent 7.66ns ± 0% 3.09ns ± 0% -59.66%
BM_StringAssignStr_Large_Opaque 24.1ns ± 0% 24.9ns ± 0% +3.22%
BM_StringAssignStr_Large_Transparent 22.2ns ± 0% 22.8ns ± 0% +2.77%
BM_StringAssignStr_Huge_Opaque 315ns ± 6% 320ns ± 5% ~
BM_StringAssignStr_Huge_Transparent 318ns ± 5% 321ns ± 4% ~
Benchmarks with partial inlining operator=():
name old time/op new time/op delta
BM_StringAssignStr_Empty_Opaque 5.94ns ± 2% 1.95ns ± 0% -67.21%
BM_StringAssignStr_Empty_Transparent 5.14ns ± 0% 1.04ns ± 1% -79.73%
BM_StringAssignStr_Small_Opaque 7.69ns ± 0% 1.96ns ± 0% -74.48%
BM_StringAssignStr_Small_Transparent 7.65ns ± 0% 1.04ns ± 0% -86.40%
BM_StringAssignStr_Large_Opaque 24.1ns ± 0% 24.5ns ± 0% +1.61%
BM_StringAssignStr_Large_Transparent 22.2ns ± 0% 21.1ns ± 0% -4.70%
BM_StringAssignStr_Huge_Opaque 317ns ± 5% 323ns ± 4% ~
BM_StringAssignStr_Huge_Transparent 318ns ± 5% 320ns ± 5% ~
Patch by Martijn Vels (mvels@google.com)
Reviewed as https://reviews.llvm.org/D72704
Diffstat (limited to 'llvm/lib/IR/Module.cpp')
0 files changed, 0 insertions, 0 deletions