This is not really ready for review; posted as a proof of concept since the use of SCEV's disposition ties into the discussion on D60093.
The basic idea to this is to be able to unswitch a long chain of range checks on different arrays all in a single invocation of SimpleLoopUnswitch. Right now, we're not able to so since each dominating check we eliminate prevents hoisting of dominated lengths. (Correctly.) If we decide to integrate the InvariantComputation logic from D60093 into SCEV's disposition handling, then we'll be able to prove that an invariant load (which the length would be) would be invariant after hoisting.
We might also be able to do a form of hoisting here using MSSA, but I haven't actually looked into that yet.