Hello, and ping, please.
Martin On Sun, Nov 16 2025, Martin Jambor wrote: > Hi, > > since the IPA-CP lattices for value ranges cannot hold more values and > don't have any "variable" flag, we initialize them to bottom for > non-local nodes. However, that means we don't make use of known > information gathered in jump functions when the corresponding node is > cloned for some other reason. This patch allows collection of the > information and only does not use them for the original non-local > nodes. > > Bootstrapped, LTO-bootstrapped and tested on x86_64, OK for master? > > Thanks, > > Martin > > > gcc/ChangeLog: > > 2025-11-04 Martin Jambor <[email protected]> > > * ipa-cp.cc (set_all_contains_variable): New parameter > INCLUDE_SIMPLE, make setting bits and vr lattices to bottom > conditional on it. > (initialize_node_lattices): Pass false to the second parameter of > set_all_contains_variable. > (ipcp_store_vr_results): Skip non-local nodes. > --- > gcc/ipa-cp.cc | 21 ++++++++++++++++----- > 1 file changed, 16 insertions(+), 5 deletions(-) > > diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc > index 915d29b4bb2..fcb3123b9ed 100644 > --- a/gcc/ipa-cp.cc > +++ b/gcc/ipa-cp.cc > @@ -1322,17 +1322,23 @@ intersect_argaggs_with (vec<ipa_argagg_value> &elts, > } > > /* Mark bot aggregate and scalar lattices as containing an unknown variable, > - return true is any of them has not been marked as such so far. */ > + return true is any of them has not been marked as such so far. If > + INCLUDE_SIMPLE is true, also set the lattices that can only hold one value > + to bottom. */ > > static inline bool > -set_all_contains_variable (class ipcp_param_lattices *plats) > +set_all_contains_variable (class ipcp_param_lattices *plats, > + bool include_simple = true) > { > bool ret; > ret = plats->itself.set_contains_variable (); > ret |= plats->ctxlat.set_contains_variable (); > ret |= set_agg_lats_contain_variable (plats); > - ret |= plats->bits_lattice.set_to_bottom (); > - ret |= plats->m_value_range.set_to_bottom (); > + if (include_simple) > + { > + ret |= plats->bits_lattice.set_to_bottom (); > + ret |= plats->m_value_range.set_to_bottom (); > + } > return ret; > } > > @@ -1477,7 +1483,7 @@ initialize_node_lattices (struct cgraph_node *node) > { > plats->m_value_range.init (type); > if (variable) > - set_all_contains_variable (plats); > + set_all_contains_variable (plats, false); > } > } > > @@ -6323,6 +6329,11 @@ ipcp_store_vr_results (void) > bool do_vr = true; > bool do_bits = true; > > + /* If the function is not local, the gathered information is only > useful > + for clones. */ > + if (!node->local) > + continue; > + > if (!info || !opt_for_fn (node->decl, flag_ipa_vrp)) > { > if (dump_file) > -- > 2.51.1
