This fixes PR33357 where LVI recursed infinitely when used on dead blocks.
Now instead of the previous simple check where we just deemed a block dead
if it had no predecessors we now flush DDT and use DT to determine if
a block is really reachable from entry before processing it.
I do not think this will be accepted by the community. The performance implications are non-trivial (around 1-4%) when this is called on almost every basic block. It's the primary reason I had to write the DeferredDominance class.