summaryrefslogtreecommitdiff
path: root/gcc/reload1.c
diff options
context:
space:
mode:
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>2001-01-13 20:18:20 +0000
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>2001-01-13 20:18:20 +0000
commitaada3aa9433404927c0b50e0ab3a79d337b2054b (patch)
tree850b537fb5a0732212fcd82fbbcbe591dde3abbb /gcc/reload1.c
parent9acc7238db25f229ea9bbf8d9c888c0520c538a6 (diff)
downloadgcc-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.c17
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 ();