This is an alternative to D93974 and D97077. If CtxI is null, then we can still make use of any assumes that are guaranteed to be executed from the entry of the function. This allows us to handle assumes on arguments, for cases where no explicit context instruction is provided.
Relative to D93974 the advantage here is that we only need to do the "guaranteed to execute" check if there are potentially relevant assumes, rather than always doing it. Relative to D97077 the advantage is that this is not SCEV specific, and avoids issues with ephemeral values (i.e., we support assumes directly at the start of the function).
This change has no compile-time impact on CTMark, though that isn't exactly an assume heavy workload.
The unit tests are adopted from D93974.
clang-format: please reformat the code
5 diff lines are omitted. See full path.