Well, arbitrarily allowing everything caused some -Wnonnull
regressions. I've changed the check to !r.zero_p() && !r.nonzero_p(),
as the only reasonable ranges for pointers besides varying/undefined
are zero and non-zero.
Attached is the final version of the patch I have pushed.
Tested on x86-64
As I mentioned when I pushed the patch in this thread, I have run into
cases where a pointer has a non-varying range, but it includes 0. The
varying check causes no further refinements to be done. The previous
cases I had seen were in follow-up threader work, so I was delaying
pushing this until