]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: function.c (fixup_var_refs): Save volatile_ok and set to 1.
authorH.J. Lu <hongjiu.lu@intel.com>
Tue, 10 May 2005 21:53:06 +0000 (21:53 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Tue, 10 May 2005 21:53:06 +0000 (21:53 +0000)
Backport from mainline
2004-02-12  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
* function.c (fixup_var_refs): Save volatile_ok and set to 1.
* expr.c (emit_block_move_via_movstr): Save and restore
volatile_ok.

From-SVN: r99543

gcc/ChangeLog
gcc/expr.c
gcc/function.c

index 77de6eb79f60cfad3171d63dba70ebd2aa840e02..360fe4cc33223da9bacad445c247900fa19bf694 100644 (file)
@@ -1,3 +1,11 @@
+2005-05-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from mainline
+       2004-02-12  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+       * function.c (fixup_var_refs): Save volatile_ok and set to 1.
+       * expr.c (emit_block_move_via_movstr): Save and restore
+       volatile_ok.
+
 2005-05-10  Jakub Jelinek  <jakub@redhat.com>
 
        * config/i386/i386.md (sse_mov?fcc* splitters): Add mode to
index fcb5b0c78d68f3d611b0274a23e2f05e3dcd5710..1ce2fa4b793c63645f714550ce91446071c8fcd3 100644 (file)
@@ -1452,6 +1452,7 @@ static bool
 emit_block_move_via_movstr (rtx x, rtx y, rtx size, unsigned int align)
 {
   rtx opalign = GEN_INT (align / BITS_PER_UNIT);
+  int save_volatile_ok = volatile_ok;
   enum machine_mode mode;
 
   /* Since this is a move insn, we don't care about volatility.  */
@@ -1501,7 +1502,7 @@ emit_block_move_via_movstr (rtx x, rtx y, rtx size, unsigned int align)
          if (pat)
            {
              emit_insn (pat);
-             volatile_ok = 0;
+             volatile_ok = save_volatile_ok;
              return true;
            }
          else
@@ -1509,7 +1510,7 @@ emit_block_move_via_movstr (rtx x, rtx y, rtx size, unsigned int align)
        }
     }
 
-  volatile_ok = 0;
+  volatile_ok = save_volatile_ok;
   return false;
 }
 
index 087467cc0cddbbf50b8b5574ba566581fff98af3..206b11ddddeef9ba8eab911ab8f7e03260ff3260 100644 (file)
@@ -1517,6 +1517,7 @@ fixup_var_refs (rtx var, enum machine_mode promoted_mode, int unsignedp,
   rtx first_insn = get_insns ();
   struct sequence_stack *stack = seq_stack;
   tree rtl_exps = rtl_expr_chain;
+  int save_volatile_ok = volatile_ok;
 
   /* If there's a hash table, it must record all uses of VAR.  */
   if (ht)
@@ -1528,6 +1529,9 @@ fixup_var_refs (rtx var, enum machine_mode promoted_mode, int unsignedp,
       return;
     }
 
+  /* Volatile is valid in MEMs because all we're doing in changing the
+     address inside.  */
+  volatile_ok = 1;
   fixup_var_refs_insns (first_insn, var, promoted_mode, unsignedp,
                        stack == 0, may_share);
 
@@ -1555,6 +1559,8 @@ fixup_var_refs (rtx var, enum machine_mode promoted_mode, int unsignedp,
          end_sequence ();
        }
     }
+
+  volatile_ok = save_volatile_ok;
 }
 \f
 /* REPLACEMENTS is a pointer to a list of the struct fixup_replacement and X is