diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2015-09-25 21:06:08 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2015-09-25 21:06:08 +0000 |
commit | c9561e7bea50a42a75959db72a2c584c6a482e32 (patch) | |
tree | 05d88ee472de16186c599f76618fb953959d3e3b /gcc | |
parent | d24a1f53db4fc4dcaec148b5a2310921c48e2ff7 (diff) | |
download | gcc-c9561e7bea50a42a75959db72a2c584c6a482e32.zip gcc-c9561e7bea50a42a75959db72a2c584c6a482e32.tar.gz gcc-c9561e7bea50a42a75959db72a2c584c6a482e32.tar.bz2 |
re PR target/61578 (Code size increase for ARM thumb compared to 4.8.x when compiling with -Os)
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/lra-constraints.c | 6 |
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f102313..56206f4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index fc8e43d..c6afa7a 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -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, "")); |