[PATCH] D114882: [PatternMatch] create and use matcher for 'not' that excludes undef elements

Sanjay Patel via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 1 08:49:39 PST 2021


spatel added inline comments.


================
Comment at: llvm/include/llvm/IR/PatternMatch.h:2295-2298
+    if (m_Xor(m_Value(X), m_APIntForbidUndef(C)).match(V) && C->isAllOnes())
+      return Val.match(X);
+    if (m_Xor(m_APIntForbidUndef(C), m_Value(X)).match(V) && C->isAllOnes())
+      return Val.match(X);
----------------
lebedev.ri wrote:
> ?
That's how I originally implemented it. :)

But that mismatched on the unit test that I created. In that test, the other operand is a zero constant with no undefs. So the commutative matcher matched the zero constant in that example as `C` and then failed the subsequent `isAllOnes` check.

It seems unlikely that we'd see something like that (should get constant-folded before we see it) in the optimizer, but it's still possible in general usage?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D114882/new/

https://reviews.llvm.org/D114882



More information about the llvm-commits mailing list