diff options
author | Jakub Jelinek <jakub@redhat.com> | 2022-09-12 11:31:11 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2022-09-12 11:36:58 +0200 |
commit | 723ef5a937dbab5e7a35761fd7f0ff0c76849340 (patch) | |
tree | 622b7ac694b7254a40656c7f87a6a2b352d4eca2 /gcc | |
parent | 994ea892bd02dd8a1c04875ad3553c57939c3abf (diff) | |
download | gcc-723ef5a937dbab5e7a35761fd7f0ff0c76849340.zip gcc-723ef5a937dbab5e7a35761fd7f0ff0c76849340.tar.gz gcc-723ef5a937dbab5e7a35761fd7f0ff0c76849340.tar.bz2 |
libstdc++: Outline the overlapping case of string _M_replace into a separate function [PR105329]
The following patch is partially a workaround for bogus warnings
when the compiler isn't able to fold _M_disjunct call into constant
false, but also an optimization attempt - assuming _M_disjunct (__s)
is rare, the patch should shrink code size for the common case and
use library or for non-standard instantiations an out of line
function to handle the rare case.
2022-09-12 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/105329
* acinclude.m4 (libtool_VERSION): Change to 6:31:0.
* config/abi/pre/gnu.ver (GLIBCXX_3.4.21): Don't export
std::basic_string methods with name length of 15.
(GLIBCXX_3.4.31): Export std::basic_string::_M_replace_cold.
* testsuite/util/testsuite_abi.cc (check_version): Handle
GLIBCXX_3.4.31.
* include/bits/basic_string.h (std::basic_string::_M_replace_cold):
Declare.
* include/bits/basic_string.tcc (std::basic_string::_M_replace_cold):
Define and export even for C++20.
(std::basic_string::_M_replace): Use __builtin_expect, outline
the overlapping case to _M_replace_cold.
* configure: Regenerated.
Diffstat (limited to 'gcc')
0 files changed, 0 insertions, 0 deletions