*** empty log message ***
authoralehotsky <alehotsky@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Jan 2001 02:34:14 +0000 (02:34 +0000)
committeralehotsky <alehotsky@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Jan 2001 02:34:14 +0000 (02:34 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38849 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/reload.c

index 3a8aea6..dcadbdc 100644 (file)
@@ -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.
index 11e33f0..533c28c 100644 (file)
@@ -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;
        }