[InstCombine] Add simplifications for div/rem with `i1` operands; PR62607
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 Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D150142
Loading
Please sign in to comment