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

--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jeff Law <l...@gcc.gnu.org>:

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

commit r15-3095-gc9377734b798d8d311dfd3a5618dc49407703b93
Author: Jeff Law <j...@ventanamicro.com>
Date:   Thu Aug 22 12:48:49 2024 -0600

    [PR rtl-optimization/116420] Fix interesting block bitmap DF dataflow

    The DF framework provides us a way to run dataflow problems on sub-graphs.
    Naturally a bitmap of interesting blocks is passed into those routines.  
At a
    confluence point, the DF framework will not mark a block for re-processing
if
    it's not in that set of interesting blocks.

    When ext-dce sets up that set of interesting blocks it's using the wrong
    counter.  ie, it's using n_basic_blocks rather than last_basic_block.  If
there
    are holes in the block indices, some number of blocks won't get marked as
    interesting.

    In this case the block needing reprocessing has an index higher than
    n_basic_blocks.  It never gets reprocessed and the newly found live chunks
    don't propagate further up the CFG -- ultimately resulting in a pseudo
    appearing to have only the low 8 bits live, when in fact the low 32 bits
are
    actually live.

    Fixed in the obvious way, by using last_basic_block instead.

    Bootstrapped and regression tested on x86_64.  Pushing to the trunk.

            PR rtl-optimization/116420
    gcc/
            * ext-dce.cc (ext_dce_init): Fix loop iteration when setting up the
            interesting block for DF to analyze.

    gcc/testsuite
            * gcc.dg/torture/pr116420.c: New test.

Reply via email to