diff options
author | J"orn Rennecke <amylaar@cygnus.co.uk> | 1998-09-24 13:58:43 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 1998-09-24 14:58:43 +0100 |
commit | b29514ee9d0889f3bf368d03db290d36f05f9922 (patch) | |
tree | 16b3b4606cc4c408ef87c448b94886678964d256 | |
parent | 5adf6da0eb8b7cf355e5db02e8266637e24a5d25 (diff) | |
download | gcc-b29514ee9d0889f3bf368d03db290d36f05f9922.zip gcc-b29514ee9d0889f3bf368d03db290d36f05f9922.tar.gz gcc-b29514ee9d0889f3bf368d03db290d36f05f9922.tar.bz2 |
reload1.c (choose_reload_regs): Also try inheritance when reload_in is a stack slot of a pseudo...
* reload1.c (choose_reload_regs): Also try inheritance when
reload_in is a stack slot of a pseudo, even if we already got a
reload reg.
From-SVN: r22571
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/reload1.c | 17 |
2 files changed, 19 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c462638..0b9d673 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Thu Sep 24 21:48:51 1998 J"orn Rennecke <amylaar@cygnus.co.uk> + + * reload1.c (choose_reload_regs): Also try inheritance when + reload_in is a stack slot of a pseudo, even if we already got a + reload reg. + Thu Sep 24 21:22:39 1998 J"orn Rennecke <amylaar@cygnus.co.uk> * reload1.c (reload_cse_regs_1): Renamed from reload_cse_regs. diff --git a/gcc/reload1.c b/gcc/reload1.c index 91b7294..bb7aa3f 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -5675,13 +5675,16 @@ choose_reload_regs (insn, avoid_return_reg) && ! reload_secondary_p[r]) continue; - /* If find_reloads chose a to use reload_in or reload_out as a reload + /* If find_reloads chose to use reload_in or reload_out as a reload register, we don't need to chose one. Otherwise, try even if it found one since we might save an insn if we find the value lying - around. */ + around. + Try also when reload_in is a pseudo without a hard reg. */ if (reload_in[r] != 0 && reload_reg_rtx[r] != 0 && (rtx_equal_p (reload_in[r], reload_reg_rtx[r]) - || rtx_equal_p (reload_out[r], reload_reg_rtx[r]))) + || (rtx_equal_p (reload_out[r], reload_reg_rtx[r]) + && GET_CODE (reload_in[r]) != MEM + && true_regnum (reload_in[r]) < FIRST_PSEUDO_REGISTER))) continue; #if 0 /* No longer needed for correct operation. @@ -5827,7 +5830,13 @@ choose_reload_regs (insn, avoid_return_reg) /* Don't really use the inherited spill reg if we need it wider than we've got it. */ || (GET_MODE_SIZE (reload_mode[r]) - > GET_MODE_SIZE (mode))) + > GET_MODE_SIZE (mode)) + /* If find_reloads chose reload_out as reload + register, stay with it - that leaves the + inherited register for subsequent reloads. */ + || (reload_reg_rtx + && rtx_equal_p (reload_out[r], + reload_reg_rtx[r]))) reload_override_in[r] = reg_last_reload_reg[regno]; else { |