Currently, DecomposeGEP bails out on the whole decomposition if it encounters a scalable GEP type anywhere. However, it is fine to to still analyze other GEPs that we look through before hitting the scalable GEP. This does means that the decomposed GEP base is no longer required to be the same as the underlying object. However, I don't believe this property is necessary for correctness anymore.
This allows us to compute slightly more precise aliasing results for GEP chains containing scalable vectors, though my primary interest here is simplifying the code.