diff options
author | Roger Sayle <roger@eyesopen.com> | 2006-03-28 19:38:28 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2006-03-28 19:38:28 +0000 |
commit | 5ac6066999aa237c43921072b397f98b497d7706 (patch) | |
tree | 02625edb085b22a09fb9fbbdff1c623e6ea4b7c4 | |
parent | b6313dcf9644cd51faa48c45da06afcd42751b3e (diff) | |
download | gcc-5ac6066999aa237c43921072b397f98b497d7706.zip gcc-5ac6066999aa237c43921072b397f98b497d7706.tar.gz gcc-5ac6066999aa237c43921072b397f98b497d7706.tar.bz2 |
expr.c (emit_group_store): Only create a new pseudo reg if the quantity it needs to hold isn't already a...
* expr.c (emit_group_store): Only create a new pseudo reg if the
quantity it needs to hold isn't already a suitable pseudo.
From-SVN: r112469
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/expr.c | 12 |
2 files changed, 14 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 09e625a..58952cd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-03-28 Roger Sayle <roger@eyesopen.com> + + * expr.c (emit_group_store): Only create a new pseudo reg if the + quantity it needs to hold isn't already a suitable pseudo. + 2006-03-28 Jeff Law <law@redhat.com> * timevar.def (TV_TREE_PHI_CPROP): New timevar. @@ -1890,8 +1890,13 @@ emit_group_store (rtx orig_dst, rtx src, tree type ATTRIBUTE_UNUSED, int ssize) for (i = start; i < XVECLEN (src, 0); i++) { rtx reg = XEXP (XVECEXP (src, 0, i), 0); - tmps[i] = gen_reg_rtx (GET_MODE (reg)); - emit_move_insn (tmps[i], reg); + if (!REG_P (reg) || REGNO (reg) < FIRST_PSEUDO_REGISTER) + { + tmps[i] = gen_reg_rtx (GET_MODE (reg)); + emit_move_insn (tmps[i], reg); + } + else + tmps[i] = reg; } /* If we won't be storing directly into memory, protect the real destination @@ -1918,7 +1923,8 @@ emit_group_store (rtx orig_dst, rtx src, tree type ATTRIBUTE_UNUSED, int ssize) } else if (!MEM_P (dst) && GET_CODE (dst) != CONCAT) { - dst = gen_reg_rtx (GET_MODE (orig_dst)); + if (!REG_P (dst) || REGNO (dst) < FIRST_PSEUDO_REGISTER) + dst = gen_reg_rtx (GET_MODE (orig_dst)); /* Make life a bit easier for combine. */ emit_move_insn (dst, CONST0_RTX (GET_MODE (orig_dst))); } |