function.c (instantiate_virtual_regs_in_insn): Call force_reg inside start_sequence...
authorJoseph Myers <joseph@codesourcery.com>
Sat, 25 Nov 2006 13:21:43 +0000 (13:21 +0000)
committerJoseph Myers <jsm28@gcc.gnu.org>
Sat, 25 Nov 2006 13:21:43 +0000 (13:21 +0000)
* function.c (instantiate_virtual_regs_in_insn): Call force_reg
inside start_sequence / end_sequence pair.

From-SVN: r119192

gcc/ChangeLog
gcc/function.c

index 7e2e0db..30e59fc 100644 (file)
@@ -1,3 +1,8 @@
+2006-11-25  Joseph Myers  <joseph@codesourcery.com>
+
+       * function.c (instantiate_virtual_regs_in_insn): Call force_reg
+       inside start_sequence / end_sequence pair.
+
 2006-11-25  Steven Bosscher  <steven@gcc.gnu.org>
 
        * jump.c (mark_all_labels): Work in cfglayout mode.
index a27d8cb..78dfe81 100644 (file)
@@ -1529,7 +1529,14 @@ instantiate_virtual_regs_in_insn (rtx insn)
         Validate the new value vs the insn predicate.  Note that
         asm insns will have insn_code -1 here.  */
       if (!safe_insn_predicate (insn_code, i, x))
-       x = force_reg (insn_data[insn_code].operand[i].mode, x);
+       {
+         start_sequence ();
+         x = force_reg (insn_data[insn_code].operand[i].mode, x);
+         seq = get_insns ();
+         end_sequence ();
+         if (seq)
+           emit_insn_before (seq, insn);
+       }
 
       *recog_data.operand_loc[i] = recog_data.operand[i] = x;
       any_change = true;