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);
}
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
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);