aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Lehotsky <lehotsky@tiac.net>2001-01-10 02:34:14 +0000
committerAlan Lehotsky <alehotsky@gcc.gnu.org>2001-01-09 21:34:14 -0500
commit4971426b43884c12761691e9017828512483e7be (patch)
treea7d4908b19444ce690db058c95b6b1ac87e5b736
parentfa44a93614f595ad511c5e1540bf83bbfbbb52b1 (diff)
downloadgcc-4971426b43884c12761691e9017828512483e7be.zip
gcc-4971426b43884c12761691e9017828512483e7be.tar.gz
gcc-4971426b43884c12761691e9017828512483e7be.tar.bz2
*** empty log message ***
From-SVN: r38849
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/reload.c10
2 files changed, 12 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3a8aea6..dcadbdc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2001-01-09 Alan Lehotsky <lehotsky@tiac.net>
+
+ * reload.c (find_reloads_address): Check for eliminable registers
+ when substituting a constant expression for a pseudo.
+
2001-01-09 Joseph S. Myers <jsm28@cam.ac.uk>
* c-common.c (enum format_type): Add format_type_error.
diff --git a/gcc/reload.c b/gcc/reload.c
index 11e33f0..533c28c9 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -4487,10 +4487,14 @@ find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels, insn)
{
regno = REGNO (ad);
- if (reg_equiv_constant[regno] != 0
- && strict_memory_address_p (mode, reg_equiv_constant[regno]))
+ /* If the register is equivalent to an invariant expression, substitute
+ the invariant, and eliminate any eliminable register references. */
+ tem = reg_equiv_constant[regno];
+ if (tem != 0
+ && (tem = eliminate_regs (tem, mode, insn))
+ && strict_memory_address_p (mode, tem))
{
- *loc = ad = reg_equiv_constant[regno];
+ *loc = ad = tem;
return 0;
}