summaryrefslogtreecommitdiffstats
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>2006-03-28 19:38:28 +0000
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>2006-03-28 19:38:28 +0000
commit2b4bed8a148e05abd0e26d985a2475d1c022f476 (patch)
tree02625edb085b22a09fb9fbbdff1c623e6ea4b7c4 /gcc/expr.c
parent1ef27f8657e1b9698da89f9eea8fe0389d4a7d42 (diff)
downloadppe42-gcc-2b4bed8a148e05abd0e26d985a2475d1c022f476.tar.gz
ppe42-gcc-2b4bed8a148e05abd0e26d985a2475d1c022f476.zip
* expr.c (emit_group_store): Only create a new pseudo reg if the
quantity it needs to hold isn't already a suitable pseudo. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112469 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 2d5c359e139..f579e27c865 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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)));
}
OpenPOWER on IntegriCloud