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

--- Comment #9 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Xiong Hu Luo <luo...@gcc.gnu.org>:

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

commit r10-7981-gf6955089db6c3aa63c276704159ffad1ef15d256
Author: Xionghu Luo <luo...@linux.ibm.com>
Date:   Sun Apr 26 20:37:27 2020 -0500

    rs6000: Don't use HARD_FRAME_POINTER_REGNUM if it's not live in
pro_and_epilogue (PR91518)

    This bug is exposed by FRE refactor of r263875.  Comparing the fre
    dump file shows no obvious change of the segment fault function proves
    it to be a target issue.
    frame_pointer_needed is set to true in reload pass setup_can_eliminate,
    but regs_ever_live[31] is false, pro_and_epilogue uses it without live
    check causing CPU2006 465.tonto segment fault of loading from invalid
    addresses due to r31 not saved/restored.  Thus, add
HARD_FRAME_POINTER_REGNUM
    live check with frame_pointer_needed_indeed when generating
pro_and_epilogue
    instructions.

    gcc/ChangeLog

    2020-04-27  Xiong Hu Luo  <luo...@linux.ibm.com>

            PR target/91518
            * config/rs6000/rs6000-logue.c (frame_pointer_needed_indeed):
            New variable.
            (rs6000_emit_prologue_components):
            Check with frame_pointer_needed_indeed.
            (rs6000_emit_epilogue_components): Likewise.
            (rs6000_emit_prologue): Likewise.
            (rs6000_emit_epilogue): Set frame_pointer_needed_indeed.

Reply via email to