diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/gcse.c | 7 |
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8f3850d..ce6b19a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Wed Oct 7 17:33:39 1998 Richard Henderson <rth@cygnus.com> + + * gcse.c (pre_insert_insn): Tweek to notice that calls do not + always end basic blocks for abnormal edge reasons. + Wed Oct 7 14:40:43 1998 Nick Clifton <nickc@cygnus.com> * config/i386/i386.h: Remove definition of @@ -4376,7 +4376,10 @@ pre_insert_insn (expr, bb) } /* Likewise if the last insn is a call, as will happen in the presence of exception handling. */ - else if (GET_CODE (insn) == CALL_INSN) + /* ??? The flag_exceptions test is not exact. We don't know if we are + actually in an eh region. Fix flow to tell us this. */ + else if (GET_CODE (insn) == CALL_INSN + && (current_function_has_nonlocal_label || flag_exceptions)) { HARD_REG_SET parm_regs; int nparm_regs; @@ -4389,6 +4392,8 @@ pre_insert_insn (expr, bb) /* It should always be the case that we can put these instructions anywhere in the basic block. Check this. */ + /* ??? Well, it would be the case if we'd split all critical edges. + Since we didn't, we may very well abort. */ if (!TEST_BIT (pre_antloc[bb], expr->bitmap_index) && !TEST_BIT (pre_transp[bb], expr->bitmap_index)) abort (); |