On Sat, 2025-07-19 at 16:22 +0200, Paul Chaignon wrote: > This patch updates the range refinement logic in the reg_bound test to > match the new logic from the previous commit. Without this change, tests > would fail because we end with more precise ranges than the tests > expect. > > Signed-off-by: Paul Chaignon <paul.chaignon@xxxxxxxxx> > --- Acked-by: Eduard Zingerman <eddyz87@xxxxxxxxx> > .../testing/selftests/bpf/prog_tests/reg_bounds.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/tools/testing/selftests/bpf/prog_tests/reg_bounds.c b/tools/testing/selftests/bpf/prog_tests/reg_bounds.c > index 39d42271cc46..e261b0e872db 100644 > --- a/tools/testing/selftests/bpf/prog_tests/reg_bounds.c > +++ b/tools/testing/selftests/bpf/prog_tests/reg_bounds.c > @@ -465,6 +465,20 @@ static struct range range_refine(enum num_t x_t, struct range x, enum num_t y_t, > return range_improve(x_t, x, x_swap); > } > > + if (!t_is_32(x_t) && !t_is_32(y_t) && x_t != y_t) { Nit: I'd swap x and y if necessary, to avoid a second branch. > + if (x_t == S64 && x.a > x.b) { > + if (x.b < y.a && x.a <= y.b) > + return range(x_t, x.a, y.b); > + if (x.a > y.b && x.b >= y.a) > + return range(x_t, y.a, x.b); > + } else if (x_t == U64 && y.a > y.b) { > + if (y.b < x.a && y.a <= x.b) > + return range(x_t, y.a, x.b); > + if (y.a > x.b && y.b >= x.a) > + return range(x_t, x.a, y.b); Nit: here returned type us U64, while above it is S64, I don't think it matters but having same type in both branches would be less confusing. > + } > + } > + > /* otherwise, plain range cast and intersection works */ > return range_improve(x_t, x, y_cast); > }