When feeding non-SSA names to range_on_edge we degrade to a
non-contextual query even though range_on_exits handling suggests
that we can do better. The following does what it does in
range_on_edge directly, passing the edge source as 'bbend'
argument to get_tree_range if the edge source has a single
successor (as will be the case for queries from niter analysis).
Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.
OK? The remainder of the series makes use of this, I'll hold of
that a bit for followup work.
Thanks,
Richard.
* gimple-range.cc (gimple_ranger::range_on_edge): Pass
the source block as 'bbend' to get_tree_range when
it has a single successor.
---
gcc/gimple-range.cc | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc
index e91eeb455f1..942bf8bf0a5 100644
--- a/gcc/gimple-range.cc
+++ b/gcc/gimple-range.cc
@@ -252,7 +252,8 @@ gimple_ranger::range_on_edge (vrange &r, edge e, tree name)
bool res = true;
if (!gimple_range_ssa_p (name))
- res = get_tree_range (r, name, NULL);
+ res = get_tree_range (r, name, NULL, NULL,
+ single_succ_p (e->src) ? e->src : NULL);
else
{
range_on_exit (r, e->src, name);
--
2.51.0