ifcvt.c (dead_or_predicable): Don't move code if eh regions would be disrupted.
authorRichard Henderson <rth@redhat.com>
Sun, 18 Feb 2001 20:06:51 +0000 (12:06 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Sun, 18 Feb 2001 20:06:51 +0000 (12:06 -0800)
        * ifcvt.c (dead_or_predicable): Don't move code if eh regions
        would be disrupted.

From-SVN: r39843

gcc/ChangeLog
gcc/ifcvt.c

index b6e2a47e6aec28b4f8163acac575f9e75b869564..3e663b3b9b47a702adb126c2308cd873d7692ba1 100644 (file)
@@ -1,3 +1,8 @@
+2001-02-18  Richard Henderson  <rth@redhat.com>
+
+       * ifcvt.c (dead_or_predicable): Don't move code if eh regions
+       would be disrupted.
+
 2001-02-18  Richard Henderson  <rth@redhat.com>
 
        * config/ns32k/ns32k.h (ADJSP): Upcase arguments.
index 652814e4b39853e239dbd38f2b1b93013365fdc4..a5494b85f6f49f21beed90cc83c084e224aca40a 100644 (file)
@@ -1855,6 +1855,15 @@ dead_or_predicable (test_bb, merge_bb, other_bb, new_dest, reversep)
 {
   rtx head, end, jump, earliest, old_dest;
 
+  /* No code movement can occur if we'd be scrogging EH regions.
+     Within MERGE_BB, ensure that we've not got stray EH_BEG or EH_END
+     notes within the block.  Between the blocks, checking that the end
+     region numbers match ensures that we won't disrupt the nesting
+     between regions.  */
+  if (merge_bb->eh_beg != merge_bb->eh_end
+      || merge_bb->eh_end != test_bb->eh_end)
+    return FALSE;
+
   jump = test_bb->end;
 
   /* Find the extent of the real code in the merge block.  */