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

Sergei Trofimovich <slyfox at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|[13 Regression] lambdas get |[13 Regression] lambdas get
                   |merged incorrectly in       |merged incorrectly in
                   |tempaltes, cause llvm-12    |tempaltes, cause llvm-12
                   |miscompilation              |miscompilation since
                   |                            |r13-3358-ge0403e95689af7

--- Comment #5 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
Bisected down to r13-3358-ge0403e95689af7 (looks very relevant):

commit e0403e95689af7d562c7d04f706e9e25115747ff
Author: Martin Jambor <mjam...@suse.cz>
Date:   Tue Oct 18 14:14:26 2022 +0200

    ipa-cp: Better representation of aggregate values we clone for

    This patch replaces linked lists of ipa_agg_replacement_value with
    vectors of similar structures called ipa_argagg_value and simplifies
    how we compute them in the first place.  Having a vector should also
    result in less overhead when allocating and because we keep it sorted,
    it leads to logarithmic searches.

    The slightly obnoxious "argagg" bit in the name can be changed into
    "agg" after the next patch removes our current ipa_agg_value type.

    The patch also introduces type ipa_argagg_value_list which serves as a
    common view into a vector of ipa_argagg_value structures regardless
    whether they are stored in GC memory (required for IPA-CP
    transformation summary because we store trees) or in an auto_vec which
    is hopefully usually only allocated on stack.

    The calculation of aggreagete costant values for a given subsert of
    callers is then rewritten to compute known constants for each
    edge (some pruning to skip obviously not needed is still employed and
    should not be really worse than what I am replacing) and these vectors
    are there intersected, which can be done linearly since they are
    sorted.  The patch also removes a lot of heap allocations of small
    lists of aggregate values and replaces them with stack based
    auto_vecs.

    As Richard Sandiford suggested, I use std::lower_bound from
    <algorithm> rather than re-implementing bsearch for array_slice.  The
    patch depends on the patch which adds the ability to construct
    array_slices from gc-allocated vectors.

Reply via email to