Return undefined on edges which are not executed.
When a branch has been folded, mark any range requests on the unexecutable edge as UNDEFINED. * gimple-range-gori.cc (gori_compute::outgoing_edge_range_p): Check for cond_false and cond_true on branches.
This commit is contained in:
parent
31534ac26e
commit
04600a4722
@ -1104,6 +1104,21 @@ gori_compute::outgoing_edge_range_p (irange &r, edge e, tree name,
|
||||
|
||||
fur_stmt src (stmt, &q);
|
||||
|
||||
// If this edge is never taken, return undefined.
|
||||
gcond *gc = dyn_cast<gcond *> (stmt);
|
||||
if (gc)
|
||||
{
|
||||
if (((e->flags & EDGE_TRUE_VALUE) && gimple_cond_false_p (gc))
|
||||
|| ((e->flags & EDGE_FALSE_VALUE) && gimple_cond_true_p (gc)))
|
||||
{
|
||||
r.set_undefined ();
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
fprintf (dump_file, "Outgoing edge %d->%d unexecutable.\n",
|
||||
e->src->index, e->dest->index);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// If NAME can be calculated on the edge, use that.
|
||||
if (is_export_p (name, e->src))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user