OSDN Git Service

2004-10-23 Daniel Berlin <dberlin@dberlin.org>
[pf3gnuchains/gcc-fork.git] / gcc / cse.c
index ca577c5..431ae70 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -5395,6 +5395,11 @@ cse_insn (rtx insn, rtx libcall_insn)
                  || (GET_CODE (trial) == LABEL_REF
                      && ! condjump_p (insn))))
            {
+             /* Don't substitute non-local labels, this confuses CFG.  */
+             if (GET_CODE (trial) == LABEL_REF
+                 && LABEL_REF_NONLOCAL_P (trial))
+               continue;
+
              SET_SRC (sets[i].rtl) = trial;
              cse_jumps_altered = 1;
              break;
@@ -6701,8 +6706,6 @@ cse_main (rtx f, int nregs, FILE *file)
        INSN_CUID (insn) = i;
     }
 
-  ggc_push_context ();
-
   /* Loop over basic blocks.
      Compute the maximum number of qty's needed for each basic block
      (which is 2 for each SET).  */
@@ -6768,8 +6771,6 @@ cse_main (rtx f, int nregs, FILE *file)
 #endif
     }
 
-  ggc_pop_context ();
-
   if (max_elements_made < n_elements_made)
     max_elements_made = n_elements_made;