|
Revision tags: llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2 |
|
| #
d01aec4c |
| 01-Aug-2023 |
Nikita Popov <npopov@redhat.com> |
[InstCombine] Set dead phi inputs to poison in more cases
Set phi inputs to poison whenever we find a dead edge (either during initial worklist population or the main InstCombine run), instead of on
[InstCombine] Set dead phi inputs to poison in more cases
Set phi inputs to poison whenever we find a dead edge (either during initial worklist population or the main InstCombine run), instead of only doing this for successors of dead blocks.
This means that the phi operand is set to poison even if for critical edges without an intermediate block.
There are quite a few test changes, because the pattern is fairly common in vectorizer output, for cases where we know the vectorized loop will be entered.
show more ...
|
|
Revision tags: llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4 |
|
| #
ab1b42ac |
| 13-May-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[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 w
[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
show more ...
|