diff options
author | Xionghu Luo <luoxhu@linux.ibm.com> | 2020-04-26 20:37:27 -0500 |
---|---|---|
committer | Xionghu Luo <luoxhu@linux.ibm.com> | 2020-04-26 20:41:38 -0500 |
commit | f6955089db6c3aa63c276704159ffad1ef15d256 (patch) | |
tree | 0433341f8d43b3c95276846b1130cb88eb5e535b /gcc/fortran/interface.c | |
parent | bfdea9ae81f924ecdcc6be9bd64b6c9084881088 (diff) | |
download | gcc-f6955089db6c3aa63c276704159ffad1ef15d256.zip gcc-f6955089db6c3aa63c276704159ffad1ef15d256.tar.gz gcc-f6955089db6c3aa63c276704159ffad1ef15d256.tar.bz2 |
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 <luoxhu@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.
Diffstat (limited to 'gcc/fortran/interface.c')
0 files changed, 0 insertions, 0 deletions