From a74f89437c99dcbd50184991b46ced8757ad943e Mon Sep 17 00:00:00 2001 From: Aldy Hernandez Date: Mon, 6 May 2019 12:48:30 +0000 Subject: Dumb down MAX/MIN of pointers when comparing ranger and VRP operations. From-SVN: r270909 --- gcc/tree-vrp.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'gcc') diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 3747f7d..aeac6a4 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -1702,6 +1702,19 @@ ranger_fold (value_range_base *vr, enum tree_code code, vr->set_undefined (); return; } + // MAX/MIN of pointers in VRP dumbs everything down to + // NULL/NON_NULL/VARYING. The ranger, because it has sub-ranges, + // can sometimes get slightly better ranges. For now, dumb down the + // ranger result so it compares with VRP. + if (flag_ranges_mode == RANGES_CHECKING + && (code == MAX_EXPR || code == MIN_EXPR) + && POINTER_TYPE_P (res.type ()) + && !res.zero_p () + && !res.non_zero_p ()) + { + vr->set_varying (); + return; + } *vr = irange_to_value_range (res); } -- cgit v1.1