Fix PR tree-optimization/15979 Fix PR tree-optimization/15981
2004-06-13 Daniel Berlin <dberlin@dberlin.org> Fix PR tree-optimization/15979 Fix PR tree-optimization/15981 * tree-ssa-pre.c (insert_aux): Fix faulty logic so that we don't try to insert values undefined along some path. From-SVN: r83076
This commit is contained in:
parent
bd85b0cba6
commit
ce25943a4d
2 changed files with 26 additions and 5 deletions
|
@ -1,3 +1,10 @@
|
|||
2004-06-13 Daniel Berlin <dberlin@dberlin.org>
|
||||
|
||||
Fix PR tree-optimization/15979
|
||||
Fix PR tree-optimization/15981
|
||||
* tree-ssa-pre.c (insert_aux): Fix faulty logic so that we don't
|
||||
try to insert values undefined along some path.
|
||||
|
||||
2004-06-13 Daniel Berlin <dberlin@dberlin.org>
|
||||
|
||||
* tree-ssa-pre.c (add_to_value): is_gimple_min_invariant things
|
||||
|
|
|
@ -1279,6 +1279,8 @@ insert_aux (basic_block block)
|
|||
edge pred;
|
||||
basic_block bprime;
|
||||
tree eprime;
|
||||
bool cant_insert = false;
|
||||
|
||||
val = get_value_handle (node->expr);
|
||||
if (set_contains_value (PHI_GEN (block), val))
|
||||
continue;
|
||||
|
@ -1288,9 +1290,8 @@ insert_aux (basic_block block)
|
|||
fprintf (dump_file, "Found fully redundant value\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
avail = xcalloc (last_basic_block, sizeof (tree));
|
||||
|
||||
avail = xcalloc (last_basic_block, sizeof (tree));
|
||||
for (pred = block->pred;
|
||||
pred;
|
||||
pred = pred->pred_next)
|
||||
|
@ -1301,8 +1302,21 @@ insert_aux (basic_block block)
|
|||
eprime = phi_translate (node->expr,
|
||||
ANTIC_IN (block),
|
||||
bprime, block);
|
||||
|
||||
/* eprime will generally only be NULL if the
|
||||
value of the expression, translated
|
||||
through the PHI for this predecessor, is
|
||||
undefined. If that is the case, we can't
|
||||
make the expression fully redundant,
|
||||
because its value is undefined along a
|
||||
predecessor path. We can thus break out
|
||||
early because it doesn't matter what the
|
||||
rest of the results are. */
|
||||
if (eprime == NULL)
|
||||
continue;
|
||||
{
|
||||
cant_insert = true;
|
||||
break;
|
||||
}
|
||||
|
||||
vprime = get_value_handle (eprime);
|
||||
if (!vprime)
|
||||
|
@ -1328,7 +1342,7 @@ insert_aux (basic_block block)
|
|||
}
|
||||
}
|
||||
|
||||
if (!all_same && by_some)
|
||||
if (!cant_insert && !all_same && by_some)
|
||||
{
|
||||
tree temp;
|
||||
tree type = TREE_TYPE (avail[block->pred->src->index]);
|
||||
|
|
Loading…
Add table
Reference in a new issue