This is a follow-up to D103280 that eases the use restrictions, so we can handle the motivating case from:
https://llvm.org/PR50055
The loop code is adapted from similar use checks in ExtendUsesToFormExtLoad() and SliceUpLoad(). I did not see an easier way to filter out non-chain uses of load values.
// The only extra users that we are okay with is the exact same cast we are about to create.