OSDN Git Service

* regmove.c (copy_src_to_dest): Don't copy if that requires
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Sep 1998 06:49:57 +0000 (06:49 +0000)
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Sep 1998 06:49:57 +0000 (06:49 +0000)
(a) new register(s).

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@22448 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/regmove.c

index ddb36b3..dcd0e88 100644 (file)
@@ -1,3 +1,8 @@
+Wed Sep 16 14:47:43 1998  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * regmove.c (copy_src_to_dest): Don't copy if that requires
+       (a) new register(s).
+
 Wed Sep 16 01:29:12 1998  Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
 
        * global.c (reg_allocno): Now static.
index 8df75e5..d8dec1f 100644 (file)
@@ -617,14 +617,25 @@ copy_src_to_dest (insn, src, dest, loop_depth)
       && GET_CODE (dest) == REG
       && REG_LIVE_LENGTH (REGNO (dest)) > 0
       && (set = single_set (insn)) != NULL_RTX
-      && !reg_mentioned_p (dest, SET_SRC (set))
-      && validate_replace_rtx (src, dest, insn))
+      && !reg_mentioned_p (dest, SET_SRC (set)))
     {
+      int old_num_regs = reg_rtx_no;
+
       /* Generate the src->dest move.  */
       start_sequence ();
       emit_move_insn (dest, src);
       seq = gen_sequence ();
       end_sequence ();
+      /* If this sequence uses new registers, we may not use it.  */
+      if (old_num_regs != reg_rtx_no
+         || ! validate_replace_rtx (src, dest, insn))
+       {
+         /* We have to restore reg_rtx_no to its old value, lest
+            recompute_reg_usage will try to compute the usage of the
+            new regs, yet reg_n_info is not valid for them.  */
+         reg_rtx_no = old_num_regs;
+         return;
+       }
       emit_insn_before (seq, insn);
       move_insn = PREV_INSN (insn);
       p_move_notes = &REG_NOTES (move_insn);