* cse.c (cse_insn): Emit BARRIER after unconditional jump.
authorGraham Stott <grahams@redhat.com>
Wed, 7 Nov 2001 12:57:17 +0000 (12:57 +0000)
committerGraham Stott <grahams@gcc.gnu.org>
Wed, 7 Nov 2001 12:57:17 +0000 (12:57 +0000)
From-SVN: r46824

gcc/ChangeLog
gcc/cse.c

index fcac3da9a70e0e0ddf257e4ca2cc228746a732db..ed6baecf279ad926fd6579d2855ac06808c69cd3 100644 (file)
@@ -1,3 +1,7 @@
+2001-11-07  Graham Stott  <grahams@redhat.com>
+
+       * cse.c (cse_insn): Emit BARRIER after unconditional jump.
+
 Wed Nov  7 13:33:34 CET 2001  Jan Hubicka  <jh@suse.cz>
 
        * expmed.c (expand_mult): Force operand to register before computing
index ad6c62030fe33ba9716d94335675b4d8c3ce6358..e0c5fb03d62b3afe816977cab330823a0de630a2 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -5767,6 +5767,11 @@ cse_insn (insn, libcall_insn)
         be a conditional or computed branch.  */
       else if (dest == pc_rtx && GET_CODE (src) == LABEL_REF)
        {
+         /* Now emit a BARRIER after the unconditional jump.  */
+         if (NEXT_INSN (insn) == 0
+             || GET_CODE (NEXT_INSN (insn)) != BARRIER)
+           emit_barrier_after (insn);
+
          /* We reemit the jump in as many cases as possible just in
             case the form of an unconditional jump is significantly
             different than a computed jump or conditional jump.
@@ -5777,20 +5782,23 @@ cse_insn (insn, libcall_insn)
          if (n_sets == 1)
            {
              rtx new = emit_jump_insn_before (gen_jump (XEXP (src, 0)), insn);
+
              JUMP_LABEL (new) = XEXP (src, 0);
              LABEL_NUSES (XEXP (src, 0))++;
              insn = new;
+
+             /* Now emit a BARRIER after the unconditional jump.  */
+             if (NEXT_INSN (insn) == 0
+                 || GET_CODE (NEXT_INSN (insn)) != BARRIER)
+               emit_barrier_after (insn);
            }
          else
            INSN_CODE (insn) = -1;
 
          never_reached_warning (insn);
 
-         /* Now emit a BARRIER after the unconditional jump.  Do not bother
-            deleting any unreachable code, let jump/flow do that.  */
-         if (NEXT_INSN (insn) != 0
-             && GET_CODE (NEXT_INSN (insn)) != BARRIER)
-           emit_barrier_after (insn);
+         /* Do not bother deleting any unreachable code,
+            let jump/flow do that.  */
 
          cse_jumps_altered = 1;
          sets[i].rtl = 0;