Bug was introduced in: https://reviews.llvm.org/D157807
The prior logic assumed that the information from the knownbits
returned from analyzing the icmp and its operands in the context
basicblock would be consistent.
This is not necessarily the case if we are analyzing deadcode.
For example with (icmp sgt (select cond, 0, 1), -1). If we take
knownbits for the select using knownbits from the operator, we will
know the signbit is zero. If we are analyzing a not-taken from based
on the icmp (deadcode), we will also "know" that the select must
be negative (signbit is one). This will result in a conflict in
knownbits.
The fix is to just give up on analying the phi-node if its deadcode. We 1) don't want to waste time continuing to analyze it and 2) will be removing it (and its dependencies) later.
Please reduce this to a single pass invocation.