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:
Daniel Berlin 2004-06-14 01:27:57 +00:00 committed by Daniel Berlin
parent bd85b0cba6
commit ce25943a4d
2 changed files with 26 additions and 5 deletions

View file

@ -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

View file

@ -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]);