Commit a7fd196c by Jim Wilson

(gen_input_reload): Handle PLUS with MEM operand

exactly the same as a PLUS with a REG operand.

From-SVN: r5549
parent d9771f62
...@@ -6404,11 +6404,11 @@ gen_input_reload (reloadreg, in, opnum, type) ...@@ -6404,11 +6404,11 @@ gen_input_reload (reloadreg, in, opnum, type)
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 a register or a MEM to
a register and a constant or MEM, or a MEM and a constant. This can another register, constant or MEM. This can occur during frame pointer
occur during frame pointer elimination and while reloading addresses. elimination and while reloading addresses. This case is handled by
This case is handled by trying to emit a single insn trying to emit a single insn to perform the add. If it is not valid,
to perform the add. If it is not valid, we use a two insn sequence. 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
an address into a register. In that case, we first try to do this an address into a register. In that case, we first try to do this
...@@ -6426,16 +6426,14 @@ gen_input_reload (reloadreg, in, opnum, type) ...@@ -6426,16 +6426,14 @@ gen_input_reload (reloadreg, in, opnum, type)
??? 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, 0)) == MEM)
|| CONSTANT_P (XEXP (in, 1)) && (GET_CODE (XEXP (in, 1)) == REG
|| GET_CODE (XEXP (in, 1)) == MEM)) || CONSTANT_P (XEXP (in, 1))
|| (GET_CODE (XEXP (in, 0)) == MEM || GET_CODE (XEXP (in, 1)) == 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 a register or a MEM and another
constant, a register and memory, a hard register and a pseudo register, constant, or MEM, and put it into the reload
register, or memory and a constant and put it into the reload
register. The best possible way of doing this is if the machine register. The best possible way of doing this is if the machine
has a three-operand ADD insn that accepts the required operands. has a three-operand ADD insn that accepts the required operands.
......
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