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

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Richard Sandiford <rsand...@gcc.gnu.org>:

https://gcc.gnu.org/g:150760dd6dd1899705790183d646fa5fc004554e

commit r10-6246-g150760dd6dd1899705790183d646fa5fc004554e
Author: Richard Sandiford <richard.sandif...@arm.com>
Date:   Sat Jan 18 10:59:10 2020 +0000

    cselib: Fix handling of multireg values for call insns [PR93170]

    g:3bd2918594dae34ae84f mishandled the case in which only the
    tail end of a multireg hard register is invalidated by the call.
    Walking all the entries should be both safer and more precise.

    Avoiding cselib_invalidate_regno also means that we no longer
    walk the same list multiple times (which is something we did
    before g:3bd2918594dae34ae84f too).

    2020-01-27  Richard Sandiford  <richard.sandif...@arm.com>

    gcc/
        PR rtl-optimization/93170
        * cselib.c (cselib_invalidate_regno_val): New function, split out
        from...
        (cselib_invalidate_regno): ...here.
        (cselib_invalidated_by_call_p): New function.
        (cselib_process_insn): Iterate over all the hard-register entries in
        REG_VALUES and invalidate any that cross call-clobbered registers.

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

Reply via email to