aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/gcse.c7
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
diff --git a/gcc/gcse.c b/gcc/gcse.c
index 463959d..c77aa33 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -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 ();