https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103827

--- Comment #19 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jan Hubicka <hubi...@gcc.gnu.org>:

https://gcc.gnu.org/g:9c5505a35d9d71705464f9254f55407192d31ec3

commit r15-9047-g9c5505a35d9d71705464f9254f55407192d31ec3
Author: Jan Hubicka <hubi...@ucw.cz>
Date:   Sun Mar 30 23:49:49 2025 +0200

    Optimize string constructor

    this patch improves code generation on string constructors.  We currently
have
    _M_construct which takes as a parameter two iterators (begin/end pointers
to
    other string) and produces new string.  This patch adds special case of
    constructor where instead of begining/end pointers we readily know the
string
    size and also special case when we know that source is 0 terminated.  This
    happens commonly when producing stirng copies. Moreover currently ipa-prop
is
    not able to propagate information that beg-end is known constant (copied
string
    size) which makes it impossible for inliner to spot the common case where
    string size is known to be shorter than 15 bytes and fits in local buffer.

    Finally I made new constructor inline. Because it is explicitely
instantiated
    without C++20 constexpr we do not produce implicit instantiation (as
required
    by standard) which prevents inlining, ipa-modref and any other IPA analysis
to
    happen.  I think we need to make many of the other functions inline, since
    optimization accross string manipulation is quite important. There is
PR94960
    to track this issue.

    Bootstrapped/regtested x86_64-linux, OK?

    libstdc++-v3/ChangeLog:

            PR tree-optimization/103827
            PR tree-optimization/80331
            PR tree-optimization/87502

            * config/abi/pre/gnu.ver: Add version for _M_construct<bool>
            * include/bits/basic_string.h: (basic_string::_M_construct<bool>):
Declare.
            (basic_string constructors): Use it.
            * include/bits/basic_string.tcc:
(basic_string::_M_construct<bool>): New template.
            * src/c++11/string-inst.cc: Instantated S::_M_construct<bool>.

    gcc/testsuite/ChangeLog:

            * g++.dg/tree-ssa/pr80331.C: New test.
            * g++.dg/tree-ssa/pr87502.C: New test.
  • [Bug c++/103827] function which... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to