aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2015-01-26 23:07:54 -0500
committerDJ Delorie <dj@gcc.gnu.org>2015-01-26 23:07:54 -0500
commit1230f784cfacdc877d711e335fdded154263b5fb (patch)
tree54b45df4ce9ddaa17cf5f096b0ad49dd51412d80 /gcc
parent82a0fe9a1d3ab3ed7ce7ed6eb2f7504f1833296b (diff)
downloadgcc-1230f784cfacdc877d711e335fdded154263b5fb.zip
gcc-1230f784cfacdc877d711e335fdded154263b5fb.tar.gz
gcc-1230f784cfacdc877d711e335fdded154263b5fb.tar.bz2
rl78.c (move_elim_pass): Don't optimize away volatile memory references.
* config/rl78/rl78.c (move_elim_pass): Don't optimize away volatile memory references. From-SVN: r220151
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/rl78/rl78.c7
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e44eb73..5add607 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/rl78/rl78.c b/gcc/config/rl78/rl78.c
index ebb25dd..a6d97cd 100644
--- a/gcc/config/rl78/rl78.c
+++ b/gcc/config/rl78/rl78.c
@@ -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",