diff options
author | David Green <david.green@arm.com> | 2021-11-04 09:24:27 +0000 |
---|---|---|
committer | David Green <david.green@arm.com> | 2021-11-04 09:24:27 +0000 |
commit | 1e5f814302f8c24bdcc6f79623b86bd32231278f (patch) | |
tree | c07a79dbf1b39f6f62c343cc63112a9cd91b5eaa /llvm/tools/llvm-objdump/llvm-objdump.cpp | |
parent | 341cc1b4113223352c99199f7c26ea7329d00fb7 (diff) | |
download | llvm-1e5f814302f8c24bdcc6f79623b86bd32231278f.zip llvm-1e5f814302f8c24bdcc6f79623b86bd32231278f.tar.gz llvm-1e5f814302f8c24bdcc6f79623b86bd32231278f.tar.bz2 |
[InstCombine] Fix infinite recursion in ashr/xor vector fold.
The added test has poison lanes due to the vector shuffle. This can
cause an infinite loop of combines in instcombine where it folds
xor(ashr, -1) -> select (icmp slt 0), -1, 0 -> sext (icmp slt 0) -> xor(ashr, -1).
We usually prevent this by checking that the xor constant is not -1,
but with vectors some of the lanes may be -1, some may be poison. So
this changes the way we detect that from "!C1->isAllOnesValue()" to
"!match(C1, m_AllOnes())", which is more able to detect that some of the
lanes are poison.
Fixes PR52397
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
0 files changed, 0 insertions, 0 deletions