[Bug ipa/97816] [11 Regression] ICE in good_cloning_opportunity_p, at ipa-cp.c:3266 since r11-4949-gb86aedb0cc083efe712e530a723f1237051a6b56

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Dec 7 08:35:50 GMT 2020


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

--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Martin Jambor <jamborm@gcc.gnu.org>:

https://gcc.gnu.org/g:a6a0db7d1bc7ad640bab51769e53f1cb4ad4bb88

commit r11-5811-ga6a0db7d1bc7ad640bab51769e53f1cb4ad4bb88
Author: Martin Jambor <mjambor@suse.cz>
Date:   Mon Dec 7 09:35:09 2020 +0100

    ipa-cp: Avoid unwanted multiple propagations (PR 97816)

    When looking at the testcase of PR 97816 I realized that the reason
    why we were hitting overflows in size growth estimates in IPA-CP is
    not because the chains of how lattices feed values to each other are
    so long but mainly because we add estimates in callee lattices to
    caller lattices for each value source, which roughly corresponds to a
    call graph edge, and therefore if there are multiple calls between two
    functions passing the same value in a parameter we end up doing it
    more than once, sometimes actually quite many times.

    This patch avoids it by using a has_set to remember the source values
    we have already updated and not increasing their size again.
    Furhtermore, to improve estimation of times we scale the propagated
    time benefits with edge frequencies as we accumulate them.

    This should make any overflows very unlikely but not impossible, so I
    still included checks for overflows but decided to restructure the
    code to only need it in the propagate_effects function and modified it
    so that it does not need to perform the check before each sum.

    This is because I decided to add local estimates to propagated
    estimates already in propagate_effects and not at the evaluation time.
    The function can then do the sums in a wide type and discard them in
    the unlikely case of an overflow.  I also decided to use the
    opportunity to make propagated effect stats now include stats from
    other values in the same SCCs.  In the dumps I have seen this tended
    to increase size cost a tiny bit more than the estimated time benefit
    but both increases were small.

    Martin

    gcc/ChangeLog:

    2020-11-20  Martin Jambor  <mjambor@suse.cz>

            PR ipa/97816
            * ipa-cp.c (safe_add): Removed.
            (good_cloning_opportunity_p): Remove special handling of INT_MAX.
            (value_topo_info<valtype>::propagate_effects): Take care not to
            propagate from size one value to another through more sources. 
Scale
            propagated times with edge frequencies.  Include local time and
size
            in propagates ones here.  Take care not to overflow size.
            (decide_about_value): Do not add local and propagated effects when
            passing them to good_cloning_opportunity_p.


More information about the Gcc-bugs mailing list