aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-structalias.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2017-08-17 11:33:03 +0930
committerAlan Modra <amodra@gcc.gnu.org>2017-08-17 11:33:03 +0930
commitb263d657e1c4bc182f0f72f62402010f8a8ad3fe (patch)
tree1ccbea2a987c2a4b66260de8cd45d3235925df34 /gcc/tree-ssa-structalias.c
parent706028a50700ab9d1155b88a59b3e3eac74241e6 (diff)
downloadgcc-b263d657e1c4bc182f0f72f62402010f8a8ad3fe.zip
gcc-b263d657e1c4bc182f0f72f62402010f8a8ad3fe.tar.gz
gcc-b263d657e1c4bc182f0f72f62402010f8a8ad3fe.tar.bz2
[RS6000] PR 80938, Don't emit frame info for regs that don't need saving
It is possible when using out-of-line register saves or store multiple to save some registers unnecessarily, for example one reg in the block saved might be unused. We don't need to emit frame info for those registers as that just bloats the info, and also can result in an ICE when shrink-wrap gives multiple paths through the function saving different sets of registers. Join points need to have identical frame register save state regardless of the path taken. This patch reverts the previous fix for PR80939 "Use SAVE_MULTIPLE only if we restore what it saves (PR80938)" and instead fixes the PR by correcting the frame info. The change to rs6000_savres_strategy is an optimization, but note that it hides the underlying problem in the PR testcase. PR target/80938 * config/rs6000/rs6000.c (rs6000_savres_strategy): Revert 2017-08-09. Don't use store multiple if only one reg needs saving. (interesting_frame_related_regno): New function. (rs6000_frame_related): Don't emit frame info for regs that don't need saving. (rs6000_emit_epilogue): Likewise. From-SVN: r251140
Diffstat (limited to 'gcc/tree-ssa-structalias.c')
0 files changed, 0 insertions, 0 deletions