diff options
author | J"orn Rennecke <amylaar@cygnus.co.uk> | 2000-03-03 14:20:28 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2000-03-03 14:20:28 +0000 |
commit | 6ce7e0f931732023c34bf3e467e79770edc8307a (patch) | |
tree | 623d4e9845aae5662a37e5da4a7ef1e2631dd37c | |
parent | 661cb0b76f2c83d6cc45e063cd55dc74fb823bb7 (diff) | |
download | gcc-6ce7e0f931732023c34bf3e467e79770edc8307a.zip gcc-6ce7e0f931732023c34bf3e467e79770edc8307a.tar.gz gcc-6ce7e0f931732023c34bf3e467e79770edc8307a.tar.bz2 |
reload1.c (reload_combine_note_use): Handle return register USEs.
* reload1.c (reload_combine_note_use): Handle return register USEs.
REG case: Handle multi-hard-register hard regs.
From-SVN: r32310
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/reload1.c | 26 |
2 files changed, 31 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2517dcb..1d51311 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Fri Mar 3 12:49:28 2000 J"orn Rennecke <amylaar@cygnus.co.uk> + + * reload1.c (reload_combine_note_use): Handle return register USEs. + REG case: Handle multi-hard-register hard regs. + Fri Mar 3 07:38:34 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * md.texi: Document use of '*' in insn pattern name. diff --git a/gcc/reload1.c b/gcc/reload1.c index c4fe640..e91cf6f 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -9253,6 +9253,21 @@ reload_combine_note_use (xp, insn) } break; + case USE: + /* If this is the USE of a return value, we can't change it. */ + if (GET_CODE (XEXP (x, 0)) == REG && REG_FUNCTION_VALUE_P (XEXP (x, 0))) + { + /* Mark the return register as used in an unknown fashion. */ + rtx reg = XEXP (x, 0); + int regno = REGNO (reg); + int nregs = HARD_REGNO_NREGS (regno, GET_MODE (reg)); + + while (--nregs >= 0) + reg_state[regno + nregs].use_index = -1; + return; + } + break; + case CLOBBER: if (GET_CODE (SET_DEST (x)) == REG) return; @@ -9269,12 +9284,23 @@ reload_combine_note_use (xp, insn) { int regno = REGNO (x); int use_index; + int nregs; /* Some spurious USEs of pseudo registers might remain. Just ignore them. */ if (regno >= FIRST_PSEUDO_REGISTER) return; + nregs = HARD_REGNO_NREGS (regno, GET_MODE (x)); + + /* We can't substitute into multi-hard-reg uses. */ + if (nregs > 1) + { + while (--nregs >= 0) + reg_state[regno + nregs].use_index = -1; + return; + } + /* If this register is already used in some unknown fashion, we can't do anything. If we decrement the index from zero to -1, we can't store more |