diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ifcvt.c | 9 |
2 files changed, 14 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b6e2a47..3e663b3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 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. * config/alpha/alpha.md (movsi_fix): Fix typo in pattern name. diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c index 652814e..a5494b8 100644 --- a/gcc/ifcvt.c +++ b/gcc/ifcvt.c @@ -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. */ |