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

--- Comment #10 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tamar Christina <tnfch...@gcc.gnu.org>:

https://gcc.gnu.org/g:0014a858a14b825818d6b557c3d5193f85790bde

commit r15-6655-g0014a858a14b825818d6b557c3d5193f85790bde
Author: Andrew Pinski <quic_apin...@quicinc.com>
Date:   Fri Nov 15 20:22:03 2024 -0800

    cfgexpand: Rewrite add_scope_conflicts_2 to use cache and look back further
[PR111422]

    After fixing loop-im to do the correct overflow rewriting
    for pointer types too. We end up with code like:
    ```
    _9 = (unsigned long) &g;
    _84 = _9 + 18446744073709551615;
    _11 = _42 + _84;
    _44 = (signed char *) _11;
    ...
    *_44 = 10;
    g ={v} {CLOBBER(eos)};
    ...
    n[0] = &f;
    *_44 = 8;
    g ={v} {CLOBBER(eos)};
    ```

    Which was not being recongized by the scope conflicts code.
    This was because it only handled one level walk backs rather than multiple
ones.
    This fixes the issue by having a cache which records all references to
addresses
    of stack variables.

    Unlike the previous patch, this only records and looks at addresses of
stack variables.
    The cache uses a bitmap and uses the index as the bit to look at.

            PR middle-end/117426
            PR middle-end/111422
    gcc/ChangeLog:

            * cfgexpand.cc (struct vars_ssa_cache): New class.
            (vars_ssa_cache::vars_ssa_cache): New constructor.
            (vars_ssa_cache::~vars_ssa_cache): New deconstructor.
            (vars_ssa_cache::create): New method.
            (vars_ssa_cache::exists): New method.
            (vars_ssa_cache::add_one): New method.
            (vars_ssa_cache::update): New method.
            (vars_ssa_cache::dump): New method.
            (add_scope_conflicts_2): Factor mostly out to
            vars_ssa_cache::operator(). New cache argument.
            Walk the bitmap cache for the stack variables addresses.
            (vars_ssa_cache::operator()): New method factored out from
            add_scope_conflicts_2. Rewrite to be a full walk of all operands
            and use a worklist.
            (add_scope_conflicts_1): Add cache new argument for the addr cache.
            Just call add_scope_conflicts_2 for the phi result instead of
calling
            for the uses and don't call walk_stmt_load_store_addr_ops for phis.
            Update call to add_scope_conflicts_2 to add cache argument.
            (add_scope_conflicts): Add cache argument and update calls to
            add_scope_conflicts_1.

    gcc/testsuite/ChangeLog:

            * gcc.dg/torture/pr117426-1.c: New test.

    Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>

Reply via email to