InstSimplify uses computeKnownBits() to prove that the low bits of a shifted-left value are zeros. Therefore, a cmp with constant with low set bits must be true or false.
In the normal case, it's safe for InstCombine to assert that, but computeKnownBits() bails out when confronted with poison (undef?):
// If there is conflict between Known.Zero and Known.One, this must be an // overflowing left shift, so the shift result is undefined. Clear Known // bits so that other code could propagate this undef.
...so I don't think InstCombine can assert as much we'd like. We have to check preconditions at runtime instead.