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

--- Comment #13 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:ad642d2c950657539777ea436b787e7fff4ec09e

commit r15-2212-gad642d2c950657539777ea436b787e7fff4ec09e
Author: Jeff Law <j...@ventanamicro.com>
Date:   Mon Jul 22 21:48:28 2024 -0600

    [5/n][PR rtl-optimization/115877] Fix handling of input/output operands

    So in this patch we're correcting a failure to mark objects live in
scenarios
    like

    (set (dest) (plus (dest) (src))

    When handling set pseudos, we transfer the liveness information from
LIVENOW
    into LIVE_TMP.  LIVE_TMP is subsequently used to narrow what bit groups are
    live for the inputs.

    The first time we process the block we may not have DEST in the LIVENOW set
(it
    may be live across the loop, but not live after the loop).  Thus we can
totally
    miss making certain objects live, resulting in incorrect code.

    The fix is pretty simple.  If LIVE_TMP is empty, then we should go ahead
and
    mark all the bit groups for the set object in LIVE_TMP.  This also removes
an
    invalid gcc_assert on the state of the liveness bitmaps.

    This showed up on pru, rl78 and/or msp430 in the testsuite.  So no new
test.

    Bootstrapped and regression tested on x86_64 and also run through my tester
on
    all the cross platforms.

    Pushing to the trunk.

            PR rtl-optimization/115877
    gcc/
            * ext-dce.cc (ext_dce_process_sets): Reasonably handle input/output
            operands.
            (ext_dce_rd_transfer_n): Drop bogus assertion.

Reply via email to