Avoid calling range_from_dom when dominator is already resolved.

range_from_dom makes a recursive call to resolve the immediate dominator
when there are multiple incoming edges to a block.  This is not necessary
when the dominator already has an on-entry cache value.

	PR tree-optimization/106234
	* gimple-range-cache.cc (ranger_cache::range_from_dom): Check dominator
	cache value before recursively resolving it.
This commit is contained in:
Andrew MacLeod 2022-07-08 13:30:49 -04:00
parent c3ed9e0d6e
commit 12a9b98ac5

View file

@ -1359,10 +1359,11 @@ ranger_cache::range_from_dom (vrange &r, tree name, basic_block start_bb,
m_workback.quick_push (prev_bb);
else if (mode == RFD_FILL)
{
// Multiple incoming edges, so recursively satisfy this block,
// store the range, then calculate the incoming range for PREV_BB.
if (def_bb != bb)
// Multiple incoming edges, so recursively satisfy this block
// if it doesn't already have a value, and store the range.
if (!m_on_entry.bb_range_p (name, bb) && def_bb != bb)
{
// If the dominator has not been set, look it up.
range_from_dom (r, name, bb, RFD_FILL);
// If the range can't be store, don't try to accumulate
// the range in PREV_BB due to excessive recalculations.