* cse.c (cse_insn): Don't lose REG_NON_LOCAL_GOTO note.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 16 Feb 2004 09:39:54 +0000 (09:39 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 16 Feb 2004 09:39:54 +0000 (09:39 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@77877 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cse.c

index d0d6d79..49ae020 100644 (file)
@@ -1,3 +1,7 @@
+2004-02-16  Richard Henderson  <rth@redhat.com>
+
+       * cse.c (cse_insn): Don't lose REG_NON_LOCAL_GOTO note.
+
 2004-02-15  Kazu Hirata  <kazu@cs.umass.edu>
 
        * config/h8300/h8300.md: Remove unnecessary parallels from
index 55fe072..4262f4d 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -5719,10 +5719,20 @@ cse_insn (rtx insn, rtx libcall_insn)
             and hope for the best.  */
          if (n_sets == 1)
            {
-             rtx new = emit_jump_insn_after (gen_jump (XEXP (src, 0)), insn);
+             rtx new, note;
 
+             new = emit_jump_insn_after (gen_jump (XEXP (src, 0)), insn);
              JUMP_LABEL (new) = XEXP (src, 0);
              LABEL_NUSES (XEXP (src, 0))++;
+
+             /* Make sure to copy over REG_NON_LOCAL_GOTO.  */
+             note = find_reg_note (insn, REG_NON_LOCAL_GOTO, 0);
+             if (note)
+               {
+                 XEXP (note, 1) = NULL_RTX;
+                 REG_NOTES (new) = note;
+               }
+
              delete_insn (insn);
              insn = new;