re PR target/61578 (Code size increase for ARM thumb compared to 4.8.x when compiling...
authorVladimir Makarov <vmakarov@redhat.com>
Fri, 25 Sep 2015 21:06:08 +0000 (21:06 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Fri, 25 Sep 2015 21:06:08 +0000 (21:06 +0000)
2015-09-25  Vladimir Makarov  <vmakarov@redhat.com>

PR target/61578
* lra-constarints.c (match_reload): Check presence of the input pseudo
in the output pseudo.

From-SVN: r228153

gcc/ChangeLog
gcc/lra-constraints.c

index f102313372ef9975acccf5ac723cccf29ce3f590..56206f468b34a8fee208d84109f443dd269640f7 100644 (file)
@@ -1,3 +1,9 @@
+2015-09-25  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR target/61578
+       * lra-constarints.c (match_reload): Check presence of the input pseudo
+       in the output pseudo.
+
 2015-09-25  Tobias Burnus  <burnus@net-b.de>
 
        * doc/invoke.texi (-fsanitize): Minor wording tweak.
index fc8e43d66d98ee998f8fac68fd5f98a52d780265..c6afa7a94f5e4db6045b2efc4463fc0ac4c67526 100644 (file)
@@ -945,6 +945,12 @@ match_reload (signed char out, signed char *ins, enum reg_class goal_class,
        = (ins[1] < 0 && REG_P (in_rtx)
           && (int) REGNO (in_rtx) < lra_new_regno_start
           && find_regno_note (curr_insn, REG_DEAD, REGNO (in_rtx))
+          /* We can not use the same value if the pseudo is mentioned
+             in the output, e.g. as an address part in memory,
+             becuase output reload will actually extend the pseudo
+             liveness.  We don't care about eliminable hard regs here
+             as we are interesting only in pseudos.  */
+          && (out < 0 || regno_use_in (REGNO (in_rtx), out_rtx) == NULL_RTX)
           ? lra_create_new_reg (inmode, in_rtx, goal_class, "")
           : lra_create_new_reg_with_unique_value (outmode, out_rtx,
                                                   goal_class, ""));