diff options
author | aoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-01-13 20:18:20 +0000 |
---|---|---|
committer | aoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-01-13 20:18:20 +0000 |
commit | aada3aa9433404927c0b50e0ab3a79d337b2054b (patch) | |
tree | 850b537fb5a0732212fcd82fbbcbe591dde3abbb /gcc/reload1.c | |
parent | 9acc7238db25f229ea9bbf8d9c888c0520c538a6 (diff) | |
download | gcc-aada3aa9433404927c0b50e0ab3a79d337b2054b.tar.gz |
* reload1.c (replace_pseudos_in_call_usage): Use
reg_equiv_constant and reg_equiv_address, and don't try
regno_reg_rtx first.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38991 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r-- | gcc/reload1.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c index a9da6dd5a7f..47e1eb4f532 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -601,7 +601,9 @@ replace_pseudos_in_call_usage (loc, mem_mode, usage) code = GET_CODE (x); if (code == REG) { - if (REGNO (x) < FIRST_PSEUDO_REGISTER) + int regno = REGNO (x); + + if (regno < FIRST_PSEUDO_REGISTER) return; x = eliminate_regs (x, mem_mode, usage); @@ -612,10 +614,15 @@ replace_pseudos_in_call_usage (loc, mem_mode, usage) return; } - if (reg_renumber [REGNO (x)] < 0) - *loc = regno_reg_rtx[REGNO (x)]; - else if (reg_equiv_mem[REGNO (x)]) - *loc = reg_equiv_mem[REGNO (x)]; + if (reg_equiv_constant[regno]) + *loc = reg_equiv_constant[regno]; + else if (reg_equiv_mem[regno]) + *loc = reg_equiv_mem[regno]; + else if (reg_equiv_address[regno]) + *loc = gen_rtx_MEM (GET_MODE (x), reg_equiv_address[regno]); + else if (GET_CODE (regno_reg_rtx[regno]) != REG + || REGNO (regno_reg_rtx[regno]) != regno) + *loc = regno_reg_rtx[regno]; else abort (); |