Export global ranges during the VRP block walk.

VRP currently searches the ssa_name list for globals to exported after it
finishes running.  Recent changes have VRP calling a side-effect routine for
each stmt during the walk.  This change simply exports globals as they are
calculated the final time during the walk.

	* gimple-range.cc (gimple_ranger::register_side_effects): First check
	if the DEF should be exported as a global.
	* tree-vrp.cc (rvrp_folder::pre_fold_bb): Process PHI side effects,
	which will export globals.
	(execute_ranger_vrp): Remove call to export_global_ranges.
This commit is contained in:
Andrew MacLeod 2022-02-16 19:59:34 -05:00
parent 602a3161f4
commit af34279921
2 changed files with 25 additions and 1 deletions

View File

@ -458,6 +458,28 @@ gimple_ranger::fold_stmt (gimple_stmt_iterator *gsi, tree (*valueize) (tree))
void
gimple_ranger::register_side_effects (gimple *s)
{
// First, export the LHS if it is a new global range.
tree lhs = gimple_get_lhs (s);
if (lhs)
{
int_range_max tmp;
if (range_of_stmt (tmp, s, lhs) && !tmp.varying_p ()
&& update_global_range (tmp, lhs) && dump_file)
{
value_range vr = tmp;
fprintf (dump_file, "Global Exported: ");
print_generic_expr (dump_file, lhs, TDF_SLIM);
fprintf (dump_file, " = ");
vr.dump (dump_file);
int_range_max same = vr;
if (same != tmp)
{
fprintf (dump_file, " ... irange was : ");
tmp.dump (dump_file);
}
fputc ('\n', dump_file);
}
}
m_cache.block_apply_nonnull (s);
}

View File

@ -4302,6 +4302,9 @@ public:
void pre_fold_bb (basic_block bb) OVERRIDE
{
m_pta->enter (bb);
for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
gsi_next (&gsi))
m_ranger->register_side_effects (gsi.phi ());
}
void post_fold_bb (basic_block bb) OVERRIDE
@ -4345,7 +4348,6 @@ execute_ranger_vrp (struct function *fun, bool warn_array_bounds_p)
gimple_ranger *ranger = enable_ranger (fun);
rvrp_folder folder (ranger);
folder.substitute_and_fold ();
ranger->export_global_ranges ();
if (dump_file && (dump_flags & TDF_DETAILS))
ranger->dump (dump_file);