Commit 3002e160 by Jim Wilson

(gen_input_reload): Also handle PLUS of a MEM and CONSTANT specially.

From-SVN: r3029
parent c3eebffb
...@@ -5698,9 +5698,10 @@ gen_input_reload (reloadreg, in, before_insn) ...@@ -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 register that didn't get a hard register. In that case we can just
call emit_move_insn. call emit_move_insn.
We can also be asked to reload a PLUS that adds either two registers or 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 a register and a constant or MEM, or a MEM and a constant. This can
elimination. That case if handled by trying to emit a single insn 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. 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 Finally, we could be called to handle an 'o' constraint by putting
...@@ -5719,16 +5720,18 @@ gen_input_reload (reloadreg, in, before_insn) ...@@ -5719,16 +5720,18 @@ gen_input_reload (reloadreg, in, before_insn)
??? At some point, this whole thing needs to be rethought. */ ??? At some point, this whole thing needs to be rethought. */
if (GET_CODE (in) == PLUS if (GET_CODE (in) == PLUS
&& GET_CODE (XEXP (in, 0)) == REG && ((GET_CODE (XEXP (in, 0)) == REG
&& (GET_CODE (XEXP (in, 1)) == REG && (GET_CODE (XEXP (in, 1)) == REG
|| CONSTANT_P (XEXP (in, 1)) || CONSTANT_P (XEXP (in, 1))
|| GET_CODE (XEXP (in, 1)) == MEM)) || 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 /* 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 constant, a register and memory, a hard register and a pseudo
register and put it into the reload register. The best possible way register, or memory and a constant and put it into the reload
of doing this is if the machine has a three-operand ADD insn that register. The best possible way of doing this is if the machine
accepts the required operands. 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 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. is recognized and matches its constraints. If so, it can be used.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment