(gen_input_reload): Also handle PLUS of a MEM and CONSTANT specially.
authorJim Wilson <wilson@gcc.gnu.org>
Thu, 31 Dec 1992 22:28:54 +0000 (14:28 -0800)
committerJim Wilson <wilson@gcc.gnu.org>
Thu, 31 Dec 1992 22:28:54 +0000 (14:28 -0800)
From-SVN: r3029

gcc/reload1.c

index 6d66504f04a922c9b65f9c15c6aaa021468054c1..3af03a22bf5be4c9e18ec8b767a8042af0c79467 100644 (file)
@@ -5698,9 +5698,10 @@ gen_input_reload (reloadreg, in, before_insn)
      register that didn't get a hard register.  In that case we can just
      call emit_move_insn.
 
-     We can also be asked to reload a PLUS that adds either two registers or
-     a register and a constant or MEM.  This can occur during frame pointer
-     elimination.  That case if handled by trying to emit a single insn
+     We can also be asked to reload a PLUS that adds either two registers, or
+     a register and a constant or MEM, or a MEM and a constant.  This can
+     occur during frame pointer elimination and while reloading addresses.
+     This case is handled by trying to emit a single insn
      to perform the add.  If it is not valid, we use a two insn sequence.
 
      Finally, we could be called to handle an 'o' constraint by putting
@@ -5719,16 +5720,18 @@ gen_input_reload (reloadreg, in, before_insn)
      ??? At some point, this whole thing needs to be rethought.  */
 
   if (GET_CODE (in) == PLUS
-      && GET_CODE (XEXP (in, 0)) == REG
-      && (GET_CODE (XEXP (in, 1)) == REG
-         || CONSTANT_P (XEXP (in, 1))
-         || GET_CODE (XEXP (in, 1)) == MEM))
+      && ((GET_CODE (XEXP (in, 0)) == REG
+          && (GET_CODE (XEXP (in, 1)) == REG
+              || CONSTANT_P (XEXP (in, 1))
+              || GET_CODE (XEXP (in, 1)) == MEM))
+         || (GET_CODE (XEXP (in, 0)) == MEM
+             && CONSTANT_P (XEXP (in, 1)))))
     {
       /* We need to compute the sum of what is either a register and a
-        constant, a register and memory, or a hard register and a pseudo
-        register and put it into the reload register.  The best possible way
-        of doing this is if the machine has a three-operand ADD insn that
-        accepts the required operands.
+        constant, a register and memory, a hard register and a pseudo
+        register, or memory and a constant and put it into the reload
+        register.  The best possible way of doing this is if the machine
+        has a three-operand ADD insn that accepts the required operands.
 
         The simplest approach is to try to generate such an insn and see if it
         is recognized and matches its constraints.  If so, it can be used.