]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
expr.c (emit_group_store): Only create a new pseudo reg if the quantity it needs...
authorRoger Sayle <roger@eyesopen.com>
Tue, 28 Mar 2006 19:38:28 +0000 (19:38 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Tue, 28 Mar 2006 19:38:28 +0000 (19:38 +0000)
* 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

gcc/ChangeLog
gcc/expr.c

index 09e625a15ff4b3b6e74d01ef5b081763bc306699..58952cdebd01272ce9ed6cdba63d173a74f08a98 100644 (file)
@@ -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.
index 2d5c359e13926cdcfaf714af8e0ec780c1976730..f579e27c865dc03f4760821603752d3c53049a25 100644 (file)
@@ -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)));
     }