This is a WIP, mostly posted for discussion and performance evaluation.
Over in D104322, and D103660, and a couple other related reviews, there's a desire to avoid pointer math in SCEV. For normal (integral) pointers, we can do this by pushing ptrtoint down expression trees, but we don't have that option for non-integral ones. This patch tries to minimally cripple SCEVs ability to reason about non-integrals, while still allowing forward progress on that idea.
The main impact of this is, from what I can tell, hurting the vectorizers ability to version loops and SCEV-AA. Note that handling ptr - int is important, without that we'd also loose LSR and that's a pretty much fatal flaw.
I'd like to see a performance validation of this patch. @mkazantsev, @skatkov - Can either of you help with that?