OSDN Git Service

[PatternMatch, InstSimplify] enhance m_AllOnes() to ignore undef elements in vectors
authorSanjay Patel <spatel@rotateright.com>
Sun, 18 Feb 2018 18:05:08 +0000 (18:05 +0000)
committerSanjay Patel <spatel@rotateright.com>
Sun, 18 Feb 2018 18:05:08 +0000 (18:05 +0000)
commit5563781f3f7529d5650e47dc2561c8820ab6c402
treef46d0eccc81537393525e47c0390dbbf38a61bcd
parent142011a54be7b517926dbd43f1ec55c10f8b2da8
[PatternMatch, InstSimplify] enhance m_AllOnes() to ignore undef elements in vectors

Loosening the matcher definition reveals a subtle bug in InstSimplify (we should not
assume that because an operand constant matches that it's safe to return it as a result).

So I'm making that change here too (that diff could be independent, but I'm not sure how
to reveal it before the matcher change).

This also seems like a good reason to *not* include matchers that capture the value.
We don't want to encourage the potential misstep of propagating undef values when it's
not allowed/intended.

I didn't include the capture variant option here or in the related rL325437 (m_One),
but it already exists for other constant matchers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@325466 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/IR/PatternMatch.h
lib/Analysis/InstructionSimplify.cpp
test/Transforms/InstSimplify/or.ll
test/Transforms/InstSimplify/shr-nop.ll