From: Andrew MacLeod Date: Wed, 28 Jul 2021 12:30:02 +0000 (-0400) Subject: Return undefined on edges which are not executed. X-Git-Tag: basepoints/gcc-13~5745 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=04600a47224b1ff85c6fb870218b51969cceff21;p=thirdparty%2Fgcc.git 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. --- diff --git a/gcc/gimple-range-gori.cc b/gcc/gimple-range-gori.cc index 17032acf8d7f..c124b3c1ce49 100644 --- a/gcc/gimple-range-gori.cc +++ b/gcc/gimple-range-gori.cc @@ -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 (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)) {