rl78.c (move_elim_pass): Don't optimize away volatile memory references.
authorDJ Delorie <dj@redhat.com>
Tue, 27 Jan 2015 04:07:54 +0000 (23:07 -0500)
committerDJ Delorie <dj@gcc.gnu.org>
Tue, 27 Jan 2015 04:07:54 +0000 (23:07 -0500)
* config/rl78/rl78.c (move_elim_pass): Don't optimize away
volatile memory references.

From-SVN: r220151

gcc/ChangeLog
gcc/config/rl78/rl78.c

index e44eb7360afddd1d3de88586a52532c3361ab5e5..5add60716b072d256fdbf685499b13ccbc89488d 100644 (file)
@@ -1,3 +1,8 @@
+2015-01-26  DJ Delorie  <dj@redhat.com>
+
+       * config/rl78/rl78.c (move_elim_pass): Don't optimize away
+       volatile memory references.
+
 2015-01-26  Oleg Endo  <olegendo@gcc.gnu.org>
 
        PR target/49263
index ebb25dd5c4e16f6d2b26c45729f6ccb15501a394..a6d97cd702122eddc95a13dc7353e01bc778c239 100644 (file)
@@ -222,7 +222,12 @@ move_elim_pass (void)
         can eliminate the second SET.  */
       if (prev
          && rtx_equal_p (SET_DEST (prev), SET_SRC (set))
-         && rtx_equal_p (SET_DEST (set), SET_SRC (prev)))
+         && rtx_equal_p (SET_DEST (set), SET_SRC (prev))
+         /* ... and none of the operands are volatile.  */
+         && ! volatile_refs_p (SET_SRC (prev))
+         && ! volatile_refs_p (SET_DEST (prev))
+         && ! volatile_refs_p (SET_SRC (set))
+         && ! volatile_refs_p (SET_DEST (set)))
        {
          if (dump_file)
            fprintf (dump_file, " Delete insn %d because it is redundant\n",