diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1996-09-29 15:56:23 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1996-09-29 15:56:23 -0400 |
commit | 5c6b1bd2d3659f9bb8e1dfe133c4b2d12ef03595 (patch) | |
tree | b2f4d304619276e2a5b6cb379fd261387456459a /gcc | |
parent | 0404429725688df26a9f68ee08e3f303efca5628 (diff) | |
download | gcc-5c6b1bd2d3659f9bb8e1dfe133c4b2d12ef03595.zip gcc-5c6b1bd2d3659f9bb8e1dfe133c4b2d12ef03595.tar.gz gcc-5c6b1bd2d3659f9bb8e1dfe133c4b2d12ef03595.tar.bz2 |
(gen_reload): Handle SUBREG in PLUS specially too.
(gen_reload): Handle SUBREG in PLUS specially too. Change calls to
emit_move_insn to recursive calls.
From-SVN: r12856
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/reload1.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c index 2e90fda..35c1efd 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 |