diff options
author | Denis Chertykov <denisc@overta.ru> | 2000-04-21 21:00:09 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2000-04-21 15:00:09 -0600 |
commit | aad2919faeeb4582f3b0dd3299f19e40c863950a (patch) | |
tree | 7da6d45e941b2f15fb6a1e2b07bec9d557863d23 | |
parent | 7f6e0fe6f740608da3702edb676ec323b7264bef (diff) | |
download | gcc-aad2919faeeb4582f3b0dd3299f19e40c863950a.zip gcc-aad2919faeeb4582f3b0dd3299f19e40c863950a.tar.gz gcc-aad2919faeeb4582f3b0dd3299f19e40c863950a.tar.bz2 |
reload.c (find_equiv_reg): Checks all valueno and regno regs as a call-clobbered regs.
* reload.c (find_equiv_reg): Checks all valueno and regno regs
as a call-clobbered regs.
From-SVN: r33320
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/reload.c | 27 |
2 files changed, 22 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index de52979..008a523 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Fri Apr 21 14:58:29 2000 Denis Chertykov <denisc@overta.ru> + + * reload.c (find_equiv_reg): Checks all valueno and regno regs + as a call-clobbered regs. + Fri Apr 21 13:30:26 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * rtl.c: Use NOTE_INSN_REPEATED_LINE_NUMBER and NOTE_INSN_RANGE_BEG. diff --git a/gcc/reload.c b/gcc/reload.c index 128af48..80df0e4 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -6160,16 +6160,23 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode) /* Don't trust the conversion past a function call if either of the two is in a call-clobbered register, or memory. */ - if (GET_CODE (p) == CALL_INSN - && ((regno >= 0 && regno < FIRST_PSEUDO_REGISTER - && call_used_regs[regno]) - || - (valueno >= 0 && valueno < FIRST_PSEUDO_REGISTER - && call_used_regs[valueno]) - || - goal_mem - || need_stable_sp)) - return 0; + if (GET_CODE (p) == CALL_INSN) + { + int i; + + if (goal_mem || need_stable_sp) + return 0; + + if (regno >= 0 && regno < FIRST_PSEUDO_REGISTER) + for (i = 0; i < nregs; ++i) + if (call_used_regs[regno + i]) + return 0; + + if (valueno >= 0 && valueno < FIRST_PSEUDO_REGISTER) + for (i = 0; i < valuenregs; ++i) + if (call_used_regs[valueno + i]) + return 0; + } #ifdef NON_SAVING_SETJMP if (NON_SAVING_SETJMP && GET_CODE (p) == NOTE |