This generalizes memory access sorting to use SCEVs instead of relying on constant offsets.
I'm not entirely sure my use of SCEV here is sane, both in terms of using the cache (if it's ok to rely on the cache, I can get rid of the map and simplify the whole thing), and in terms of expecting "SCEV.getMinusSCEV(X,Y) returns a constant" to be transitive. @sanjoy , I'll really appreciate feedback on both.
I don't know general LAA conventions, but this contract seem weird -- why not return an error.
[edit: I noticed you've already answered this]