]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
jump.c (jump_optimize): Initialize mappings from INSN_UID to EH region if...
authorJeffrey A Law <law@cygnus.com>
Fri, 30 Oct 1998 23:41:35 +0000 (23:41 +0000)
committerJeff Law <law@gcc.gnu.org>
Fri, 30 Oct 1998 23:41:35 +0000 (16:41 -0700)
* 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.

From-SVN: r23462

gcc/ChangeLog
gcc/jump.c

index 0a9cf10039d30a2c6e10097c7bbdf25f85cb2649..52b97012556ff9f8cc4bfef1058df6ef8d2b35a6 100644 (file)
@@ -1,3 +1,10 @@
+Sat Oct 31 00:40:05 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.
+
 Fri Oct 30 00:54:25 1998  Peter Jakubek <pjak@snafu.de>
 
        * m68k.h (INDIRECTABLE_1_ADDRESS_P): Fix thinko.
index dfc4ae64c3e16b5fb096a18bc1f9d83e7ff5f726..ad728a0b5137d75aaa5bafad6b9eedcc8a1ce9ba 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;)
@@ -2708,6 +2714,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. 
+
+        ??? This is only necessary if i1 or i2 can throw an exception.  */
+      if (flag_exceptions
+         && !in_same_eh_region (i1, i2))
+       break;
+
       p1 = PATTERN (i1);
       p2 = PATTERN (i2);