The basic idea here is that if we have an expression, we can't find a predicate which proves facts about that expression outside the region in which that expression is defined. We can find facts about sub-expressions, but the current logic doesn't let us leverage those. (Note that applyLoopGuards does build facts about sub-expressions and then lazily apply them, so we can't do the same there. In theory at least.)
The one exception is that a trivially unreachable block currently implies all conditions and we loose that. I'm honestly not sure how interesting that is given simplify-cfg and friends will rip the code away wholesale.
The motivation here is to improve compile time. @nikic Do you see any positive impact from this? If not, I'll abandon as the complexity is not worth it on it's own.
nit