From b3c6902344c99f12d740e218c0a1e1a273b7c54b Mon Sep 17 00:00:00 2001 From: segher Date: Mon, 5 Nov 2018 21:18:22 +0000 Subject: [PATCH] combine: Don't make an intermediate reg for assigning to sfp (PR87871) The code with an intermediate register is perfectly fine, but LRA apparently cannot handle the resulting code, or perhaps something else is wrong. In either case, making an extra temporary will not likely help here, so let's just skip it. PR rtl-optimization/87871 * combine.c (make_more_copies): Skip if dest is frame_pointer_rtx. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@265821 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/combine.c | 3 +++ 2 files changed, 8 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 00273e5fc397..0e4794ce36f9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-11-05 Segher Boessenkool + + PR rtl-optimization/87871 + * combine.c (make_more_copies): Skip if dest is frame_pointer_rtx. + 2018-11-05 Paul Koning * doc/sourcebuild.texi (target attributes): Document new "inf" diff --git a/gcc/combine.c b/gcc/combine.c index 3e2042886d59..93bd3da26d7b 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -14959,6 +14959,9 @@ make_more_copies (void) rtx dest = SET_DEST (set); if (dest == pc_rtx) continue; + /* See PR87871. */ + if (dest == frame_pointer_rtx) + continue; rtx src = SET_SRC (set); if (!(REG_P (src) && HARD_REGISTER_P (src))) continue; -- 2.39.2