aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorDenis Chertykov <denisc@overta.ru>2000-04-21 21:00:09 +0000
committerJeff Law <law@gcc.gnu.org>2000-04-21 15:00:09 -0600
commitaad2919faeeb4582f3b0dd3299f19e40c863950a (patch)
tree7da6d45e941b2f15fb6a1e2b07bec9d557863d23 /gcc/reload.c
parent7f6e0fe6f740608da3702edb676ec323b7264bef (diff)
downloadgcc-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
Diffstat (limited to 'gcc/reload.c')
-rw-r--r--gcc/reload.c27
1 files changed, 17 insertions, 10 deletions
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