This is generally handled already in early CSE.
If a specialized pipeline is used, however, its possible for i1
operand with known-zero denominator to slip through. Generally the
known-zero denominator is caught and poison is returned, but if it is
indirect enough (known zero through a phi node) we can miss this case
in InstructionSimplify and then miss handling i1. This is because
i1 is current handled with the following check:
`if(Known.countMinLeadingZeros() == Known.getBitWidth() - 1)`
which only works on the assumption we don't know the denominator to be
zero. If we know the denominator to be zero, this check fails:
https://github.com/llvm/llvm-project/issues/62607
This patch simply adds an explicit if(Known.isZero) return poison;
which fixes the issue.
Alive2 Link for tests:
https://alive2.llvm.org/ce/z/VTw54n
Can we remove this? I think this might also be covered by KnownBits::isZero() check now.