gcse.c (compute_pre_data): Kill trapping expressions in destination blocks of abnormal edges.

* gcse.c (compute_pre_data): Kill trapping expressions in
        destination blocks of abnormal edges.

From-SVN: r38068
This commit is contained in:
Michael Matz 2000-12-06 18:45:31 +00:00 committed by Richard Henderson
parent 8954e858e6
commit b614171efe
2 changed files with 33 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2000-12-06 Michael Matz <matzmich@cs.tu-berlin.de>
* gcse.c (compute_pre_data): Kill trapping expressions in
destination blocks of abnormal edges.
2000-12-05 Richard Sandiford <r.sandiford@redhat.com>
* config/mn10300/mn10300.c (mn10300_print_reg_list): Added.

View File

@ -4157,11 +4157,24 @@ free_pre_mem ()
static void
compute_pre_data ()
{
sbitmap trapping_expr;
int i;
unsigned int ui;
compute_local_properties (transp, comp, antloc, 0);
sbitmap_vector_zero (ae_kill, n_basic_blocks);
/* Collect expressions which might trap. */
trapping_expr = sbitmap_alloc (n_exprs);
sbitmap_zero (trapping_expr);
for (ui = 0; ui < expr_hash_table_size; ui++)
{
struct expr *e;
for (e = expr_hash_table[ui]; e != NULL; e = e->next_same_hash)
if (may_trap_p (e->expr))
SET_BIT (trapping_expr, e->bitmap_index);
}
/* Compute ae_kill for each basic block using:
~(TRANSP | COMP)
@ -4170,6 +4183,20 @@ compute_pre_data ()
for (i = 0; i < n_basic_blocks; i++)
{
edge e;
/* If the current block is the destination of an abnormal edge, we
kill all trapping expressions because we won't be able to properly
place the instruction on the edge. So make them neither
anticipatable nor transparent. This is fairly conservative. */
for (e = BASIC_BLOCK (i)->pred; e ; e = e->pred_next)
if (e->flags & EDGE_ABNORMAL)
{
sbitmap_difference (antloc[i], antloc[i], trapping_expr);
sbitmap_difference (transp[i], transp[i], trapping_expr);
break;
}
sbitmap_a_or_b (ae_kill[i], transp[i], comp[i]);
sbitmap_not (ae_kill[i], ae_kill[i]);
}
@ -4180,6 +4207,7 @@ compute_pre_data ()
antloc = NULL;
free (ae_kill);
ae_kill = NULL;
free (trapping_expr);
}
/* PRE utilities */