mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 22:46:05 +00:00

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. Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D158960