This is an archive of the discontinued LLVM Phabricator instance.

Optimize basic_string::assign(s [, n]) for compile time known short strings.
AbandonedPublic

Authored by mvels on Jan 3 2020, 1:24 PM.

Details

Reviewers
mclow.lists
Summary

This change dispatches assignments of strings which length is known at compile time and smaller than min_cap to an inlined assign_in_place() method. This allows the compiler to fully optimize the assignment, removing outline memcpy calls, resulting in up to 6X speed ups for small string assignments.

BM_StringAssignAsciiz_Empty_Transparent 7.30ns ± 0% 1.01ns ± 0% -86.19% (p=0.008 n=5+5)
BM_StringAssignAsciiz_Small_Opaque 10.9ns ± 0% 9.9ns ± 0% -9.06% (p=0.008 n=5+5)
BM_StringAssignAsciiz_Small_Transparent 9.92ns ± 0% 1.33ns ± 0% -86.61% (p=0.008 n=5+5)
BM_StringAssignAsciiz_Large_Opaque 33.7ns ± 0% 30.2ns ± 1% -10.21% (p=0.008 n=5+5)
BM_StringAssignAsciiz_Large_Transparent 30.8ns ± 0% 27.2ns ± 0% -11.53% (p=0.008 n=5+5)
BM_StringAssignAsciiz_Huge_Opaque 388ns ± 4% 391ns ± 3% ~ (p=1.000 n=5+5)
BM_StringAssignAsciiz_Huge_Transparent 385ns ± 4% 388ns ± 3% ~ (p=1.000 n=5+5)
BM_StringAssignAsciizMix_Opaque 15.9ns ± 0% 14.1ns ± 0% -11.62% (p=0.008 n=5+5)
BM_StringAssignAsciizMix_Transparent 15.4ns ± 0% 7.5ns ± 1% -50.97% (p=0.008 n=5+5)

Event Timeline

mvels created this revision.Jan 3 2020, 1:24 PM
Herald added a project: Restricted Project. · View Herald TranscriptJan 3 2020, 1:24 PM
mvels abandoned this revision.Jan 6 2020, 8:42 AM