]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
combine: Don't make an intermediate reg for assigning to sfp (PR87871)
authorsegher <segher@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 5 Nov 2018 21:18:22 +0000 (21:18 +0000)
committersegher <segher@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 5 Nov 2018 21:18:22 +0000 (21:18 +0000)
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
gcc/combine.c

index 00273e5fc397d11608c655bc62347fee6d7444c6..0e4794ce36f9a0e8875c45944ba2253ce804b217 100644 (file)
@@ -1,3 +1,8 @@
+2018-11-05  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       PR rtl-optimization/87871
+       * combine.c (make_more_copies): Skip if dest is frame_pointer_rtx.
+
 2018-11-05  Paul Koning  <ni1d@arrl.net>
 
        * doc/sourcebuild.texi (target attributes): Document new "inf"
index 3e2042886d59816476c9f83a825aa2e907416cf5..93bd3da26d7bc2f642357fc24bb15cdf90acfde0 100644 (file)
@@ -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;