aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload1.c
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2001-01-13 20:18:20 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2001-01-13 20:18:20 +0000
commit086fef9e5a18ec2b4cdb75fefd63faca168a3a4c (patch)
tree850b537fb5a0732212fcd82fbbcbe591dde3abbb /gcc/reload1.c
parentca79429a53c4344eb62049cf84b332aa32596924 (diff)
downloadgcc-086fef9e5a18ec2b4cdb75fefd63faca168a3a4c.zip
gcc-086fef9e5a18ec2b4cdb75fefd63faca168a3a4c.tar.gz
gcc-086fef9e5a18ec2b4cdb75fefd63faca168a3a4c.tar.bz2
reload1.c (replace_pseudos_in_call_usage): Use reg_equiv_constant and reg_equiv_address, and don't try regno_reg_rtx first.
* reload1.c (replace_pseudos_in_call_usage): Use reg_equiv_constant and reg_equiv_address, and don't try regno_reg_rtx first. From-SVN: r38991
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 a9da6dd..47e1eb4 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 ();