combine: More make_more_copies
authorSegher Boessenkool <segher@kernel.crashing.org>
Sat, 10 Nov 2018 23:12:48 +0000 (00:12 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Sat, 10 Nov 2018 23:12:48 +0000 (00:12 +0100)
This makes make_more_copies do what its documentation says, that is,
only make an intermediate pseudo if copying to a pseudo.

This regressed generated code quality when we didn't keep the original
notes that were on the copy, but since r265582 we do, and only allowing
pseudos now is a win.  It also simplifies the code.

* combine.c (make_more_copies): Only make an intermediate copy if the
dest of a move is a pseudo.

From-SVN: r266004

gcc/ChangeLog
gcc/combine.c

index 6b30ada08d5b6f70835afd3a446309ef7edd3cb5..51c7e42c81055e51059940202df96738583e2cc0 100644 (file)
@@ -1,3 +1,8 @@
+2018-11-10  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       * combine.c (make_more_copies): Only make an intermediate copy if the
+       dest of a move is a pseudo.
+
 2018-11-09  Maya Rashish  <coypu@sdf.org>
 
        PR target/87221
index 93bd3da26d7bc2f642357fc24bb15cdf90acfde0..945eca3da5acf8b950f32b132cbba69f657b9afc 100644 (file)
@@ -14956,12 +14956,11 @@ make_more_copies (void)
          rtx set = single_set (insn);
          if (!set)
            continue;
+
          rtx dest = SET_DEST (set);
-         if (dest == pc_rtx)
-           continue;
-         /* See PR87871.  */
-         if (dest == frame_pointer_rtx)
-           continue;
+         if (!(REG_P (dest) && !HARD_REGISTER_P (dest)))
+             continue;
+
          rtx src = SET_SRC (set);
          if (!(REG_P (src) && HARD_REGISTER_P (src)))
            continue;