emit-rtl.c (set_unique_reg_note): Discard notes with side effects.
authorRichard Sandiford <rdsandiford@googlemail.com>
Wed, 27 Aug 2014 21:23:03 +0000 (21:23 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 27 Aug 2014 21:23:03 +0000 (21:23 +0000)
gcc/
* emit-rtl.c (set_unique_reg_note): Discard notes with side effects.

From-SVN: r214609

gcc/ChangeLog
gcc/emit-rtl.c

index 4f4c2f8d473124f45b4565ab17cb882ad460f743..2666b243f8c34218cc99c92372aef176b92d9699 100644 (file)
@@ -1,3 +1,7 @@
+2014-08-27  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * emit-rtl.c (set_unique_reg_note): Discard notes with side effects.
+
 2014-08-27  David Malcolm  <dmalcolm@redhat.com>
 
        * rtl.h (JUMP_LABEL_AS_INSN): New.
index 6cfaef6342a5de2137a0c94bd27456dc375572c9..9abe56ed7a733e35041ff84e9c877dd078a65074 100644 (file)
@@ -5181,6 +5181,14 @@ set_unique_reg_note (rtx insn, enum reg_note kind, rtx datum)
         It serves no useful purpose and breaks eliminate_regs.  */
       if (GET_CODE (datum) == ASM_OPERANDS)
        return NULL_RTX;
+
+      /* Notes with side effects are dangerous.  Even if the side-effect
+        initially mirrors one in PATTERN (INSN), later optimizations
+        might alter the way that the final register value is calculated
+        and so move or alter the side-effect in some way.  The note would
+        then no longer be a valid substitution for SET_SRC.  */
+      if (side_effects_p (datum))
+       return NULL_RTX;
       break;
 
     default: