[PATCH] D86363: InstCombine transform pattern "(A ^ B) | ~(A | B) -> ~(A & B)" added

Dávid Bolvanský via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 21 12:41:03 PDT 2020


xbolva00 added subscribers: spatel, xbolva00.
xbolva00 added inline comments.


================
Comment at: llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp:2699
+  if (match(Op0, m_Xor(m_Value(A), m_Value(B))))
+    if (match(Op1, m_Not(m_Or(m_Value(A), m_Value(B)))))
+      return BinaryOperator::CreateNot(Builder.CreateAnd(A, B));
----------------
m_Specific ?


================
Comment at: llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp:2703
   // (A ^ B) | ((B ^ C) ^ A) -> (A ^ B) | C
   if (match(Op0, m_Xor(m_Value(A), m_Value(B))))
     if (match(Op1, m_Xor(m_Xor(m_Specific(B), m_Value(C)), m_Specific(A))))
----------------
Does this work for commuted case? @spatel


================
Comment at: llvm/test/Transforms/InstCombine/or-and.ll:13
+  %6 = or i32 %3, %5
+  ret i32 %6
+}
----------------
Add vector tests


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

https://reviews.llvm.org/D86363



More information about the llvm-commits mailing list