[rl78] avoid move-elim on volatile mems
diff mbox

Message ID 201501270407.t0R47xHe017356@greed.delorie.com
State New
Headers show

Commit Message

DJ Delorie Jan. 27, 2015, 4:07 a.m. UTC
See $subj.  Committed.

	* config/rl78/rl78.c (move_elim_pass): Don't optimize away
	volatile memory references.

Patch
diff mbox

Index: config/rl78/rl78.c
===================================================================
--- config/rl78/rl78.c	(revision 220150)
+++ config/rl78/rl78.c	(working copy)
@@ -222,7 +222,12 @@ 
 	 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",