Ughhh, you're right. Thanks for spotting this. I'm testing the attached patch and will commit if it passes tests. Aldy On Tue, Apr 30, 2024 at 9:46 AM Richard Biener wrote: > > On Sun, Apr 28, 2024 at 9:07 PM Aldy Hernandez wrote: > > > > Fix some Value_Range's that we know ahead of time will be only > > integers. This avoids using the polymorphic Value_Range unnecessarily > > But isn't Value_Range a variable-size irange but int_range<2> doesn't > support more than two sub-ranges? > > So it doesn't look obvious that this isn't actually a regression? > > Richard. > > > gcc/ChangeLog: > > > > * gimple-ssa-warn-access.cc (check_nul_terminated_array): Make Value_Range an int_range. > > (memmodel_to_uhwi): Same > > * tree-ssa-loop-niter.cc (refine_value_range_using_guard): Same. > > (determine_value_range): Same. > > (infer_loop_bounds_from_signedness): Same. > > (scev_var_range_cant_overflow): Same. > > --- > > gcc/gimple-ssa-warn-access.cc | 4 ++-- > > gcc/tree-ssa-loop-niter.cc | 12 ++++++------ > > 2 files changed, 8 insertions(+), 8 deletions(-) > > > > diff --git a/gcc/gimple-ssa-warn-access.cc b/gcc/gimple-ssa-warn-access.cc > > index dedaae27b31..450c1caa765 100644 > > --- a/gcc/gimple-ssa-warn-access.cc > > +++ b/gcc/gimple-ssa-warn-access.cc > > @@ -330,7 +330,7 @@ check_nul_terminated_array (GimpleOrTree expr, tree src, tree bound) > > wide_int bndrng[2]; > > if (bound) > > { > > - Value_Range r (TREE_TYPE (bound)); > > + int_range<2> r (TREE_TYPE (bound)); > > > > get_range_query (cfun)->range_of_expr (r, bound); > > > > @@ -2816,7 +2816,7 @@ memmodel_to_uhwi (tree ord, gimple *stmt, unsigned HOST_WIDE_INT *cstval) > > { > > /* Use the range query to determine constant values in the absence > > of constant propagation (such as at -O0). */ > > - Value_Range rng (TREE_TYPE (ord)); > > + int_range<2> rng (TREE_TYPE (ord)); > > if (!get_range_query (cfun)->range_of_expr (rng, ord, stmt) > > || !rng.singleton_p (&ord)) > > return false; > > diff --git a/gcc/tree-ssa-loop-niter.cc b/gcc/tree-ssa-loop-niter.cc > > index c6d010f6d89..cbc9dbc5a1f 100644 > > --- a/gcc/tree-ssa-loop-niter.cc > > +++ b/gcc/tree-ssa-loop-niter.cc > > @@ -214,7 +214,7 @@ refine_value_range_using_guard (tree type, tree var, > > get_type_static_bounds (type, mint, maxt); > > mpz_init (minc1); > > mpz_init (maxc1); > > - Value_Range r (TREE_TYPE (varc1)); > > + int_range<2> r (TREE_TYPE (varc1)); > > /* Setup range information for varc1. */ > > if (integer_zerop (varc1)) > > { > > @@ -368,7 +368,7 @@ determine_value_range (class loop *loop, tree type, tree var, mpz_t off, > > gphi_iterator gsi; > > > > /* Either for VAR itself... */ > > - Value_Range var_range (TREE_TYPE (var)); > > + int_range<2> var_range (TREE_TYPE (var)); > > get_range_query (cfun)->range_of_expr (var_range, var); > > if (var_range.varying_p () || var_range.undefined_p ()) > > rtype = VR_VARYING; > > @@ -382,7 +382,7 @@ determine_value_range (class loop *loop, tree type, tree var, mpz_t off, > > > > /* Or for PHI results in loop->header where VAR is used as > > PHI argument from the loop preheader edge. */ > > - Value_Range phi_range (TREE_TYPE (var)); > > + int_range<2> phi_range (TREE_TYPE (var)); > > for (gsi = gsi_start_phis (loop->header); !gsi_end_p (gsi); gsi_next (&gsi)) > > { > > gphi *phi = gsi.phi (); > > @@ -408,7 +408,7 @@ determine_value_range (class loop *loop, tree type, tree var, mpz_t off, > > involved. */ > > if (wi::gt_p (minv, maxv, sgn)) > > { > > - Value_Range vr (TREE_TYPE (var)); > > + int_range<2> vr (TREE_TYPE (var)); > > get_range_query (cfun)->range_of_expr (vr, var); > > if (vr.varying_p () || vr.undefined_p ()) > > rtype = VR_VARYING; > > @@ -4367,7 +4367,7 @@ infer_loop_bounds_from_signedness (class loop *loop, gimple *stmt) > > > > low = lower_bound_in_type (type, type); > > high = upper_bound_in_type (type, type); > > - Value_Range r (TREE_TYPE (def)); > > + int_range<2> r (TREE_TYPE (def)); > > get_range_query (cfun)->range_of_expr (r, def); > > if (!r.varying_p () && !r.undefined_p ()) > > { > > @@ -5426,7 +5426,7 @@ scev_var_range_cant_overflow (tree var, tree step, class loop *loop) > > if (!def_bb || !dominated_by_p (CDI_DOMINATORS, loop->latch, def_bb)) > > return false; > > > > - Value_Range r (TREE_TYPE (var)); > > + int_range<2> r (TREE_TYPE (var)); > > get_range_query (cfun)->range_of_expr (r, var); > > if (r.varying_p () || r.undefined_p ()) > > return false; > > -- > > 2.44.0 > > >