OSDN Git Service

* jump.c (jump_optimize): Initialize mappings from INSN_UID to
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 31 Oct 1998 11:32:02 +0000 (11:32 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 31 Oct 1998 11:32:02 +0000 (11:32 +0000)
        EH region if exceptions are enabled and we're performing cross
        jump optimizations.
        (find_cross_jump): Exit loop if the insns are in different EH regions.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@23475 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/jump.c

index 248bf0e..4b89ef3 100644 (file)
@@ -1,3 +1,10 @@
+Sat Oct 31 12:30:02 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * jump.c (jump_optimize): Initialize mappings from INSN_UID to
+       EH region if exceptions are enabled and we're performing cross
+       jump optimizations.
+       (find_cross_jump): Exit loop if the insns are in different EH regions.
+
 Sat Oct 31 10:02:48 1998  Mark Mitchell  <mark@markmitchell.com>
 
        * dwarf2out.c (output_call_frame_info): Use
index 9748fb2..18696ec 100644 (file)
@@ -182,6 +182,12 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
 
   max_uid++;
 
+  /* If we are performing cross jump optimizations, then initialize
+     tables mapping UIDs to EH regions to avoid incorrect movement
+     of insns from one EH region to another.  */
+  if (flag_exceptions && cross_jump)
+    init_insn_eh_region (f, max_uid);
+
   /* Delete insns following barriers, up to next label.  */
 
   for (insn = f; insn;)
@@ -2715,6 +2721,13 @@ find_cross_jump (e1, e2, minimum, f1, f2)
       if (i2 == 0 || GET_CODE (i1) != GET_CODE (i2))
        break;
 
+      /* Avoid moving insns across EH regions if either of the insns
+        can throw.  */
+      if (flag_exceptions
+         && (asynchronous_exceptions || GET_CODE (i1) == CALL_INSN)
+         && !in_same_eh_region (i1, i2))
+       break;
+
       p1 = PATTERN (i1);
       p2 = PATTERN (i2);