When invalidating a value, we walk all users of that value and invalidate them as well. This can be very expensive for large use graphs.
However, we only need to invalidate a user U of instruction I if SCEV(U) can depend on SCEV(I). This is not the case if U is an instruction that always produces a SCEVUnknown, such as a load. If the load pointer operand is invalidated, there is no need to invalidate the load result, which is completely unrelated from a SCEV perspective.
This is a decent compile-time improvement in some cases: http://llvm-compile-time-tracker.com/compare.php?from=da4fcb0c0b281746067f92d8804c18dbce4269bd&to=3d7d37d4cc0118af994c70037753358868f25147&stat=instructions:u