OSDN Git Service

(gen_input_reload): Also handle PLUS of a MEM and CONSTANT specially.
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 31 Dec 1992 22:28:54 +0000 (22:28 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 31 Dec 1992 22:28:54 +0000 (22:28 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@3029 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/reload1.c

index 6d66504..3af03a2 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.