From 04600a47224b1ff85c6fb870218b51969cceff21 Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Wed, 28 Jul 2021 08:30:02 -0400 Subject: [PATCH] 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. --- gcc/gimple-range-gori.cc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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)) { -- 2.47.2