summaryrefslogtreecommitdiffstats
path: root/gcc/reload1.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1996-09-29 19:56:23 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1996-09-29 19:56:23 +0000
commite54018d3df1e0a107b2fcbbde583587ed6a3585f (patch)
treeb2f4d304619276e2a5b6cb379fd261387456459a /gcc/reload1.c
parent22c53cb4dd3ac944c97adb8046f260176ff652ac (diff)
downloadppe42-gcc-e54018d3df1e0a107b2fcbbde583587ed6a3585f.tar.gz
ppe42-gcc-e54018d3df1e0a107b2fcbbde583587ed6a3585f.zip
(gen_reload): Handle SUBREG in PLUS specially too. Change calls to
emit_move_insn to recursive calls. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@12856 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r--gcc/reload1.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 2e90fdadddb..35c1efd3638 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -6818,8 +6818,10 @@ gen_reload (out, in, opnum, type)
if (GET_CODE (in) == PLUS
&& (GET_CODE (XEXP (in, 0)) == REG
+ || GET_CODE (XEXP (in, 0)) == SUBREG
|| GET_CODE (XEXP (in, 0)) == MEM)
&& (GET_CODE (XEXP (in, 1)) == REG
+ || GET_CODE (XEXP (in, 1)) == SUBREG
|| CONSTANT_P (XEXP (in, 1))
|| GET_CODE (XEXP (in, 1)) == MEM))
{
@@ -6880,12 +6882,12 @@ gen_reload (out, in, opnum, type)
DEFINE_PEEPHOLE should be specified that recognizes the sequence
we emit below. */
- if (CONSTANT_P (op1) || GET_CODE (op1) == MEM
+ if (CONSTANT_P (op1) || GET_CODE (op1) == MEM || GET_CODE (op1) == SUBREG
|| (GET_CODE (op1) == REG
&& REGNO (op1) >= FIRST_PSEUDO_REGISTER))
tem = op0, op0 = op1, op1 = tem;
- emit_insn (gen_move_insn (out, op0));
+ gen_reload (out, op0, opnum, type);
/* If OP0 and OP1 are the same, we can use OUT for OP1.
This fixes a problem on the 32K where the stack pointer cannot
@@ -6913,7 +6915,7 @@ gen_reload (out, in, opnum, type)
delete_insns_since (last);
- emit_insn (gen_move_insn (out, op1));
+ gen_reload (out, op1, opnum, type);
emit_insn (gen_add2_insn (out, op0));
}
@@ -6934,8 +6936,8 @@ gen_reload (out, in, opnum, type)
if (GET_MODE (loc) != GET_MODE (in))
in = gen_rtx (REG, GET_MODE (loc), REGNO (in));
- emit_insn (gen_move_insn (loc, in));
- emit_insn (gen_move_insn (out, loc));
+ gen_reload (loc, in, opnum, type);
+ gen_reload (out, loc, opnum, type);
}
#endif
OpenPOWER on IntegriCloud