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

Jaydeep Chauhan via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 30 03:31:32 PDT 2020


Jac1494 updated this revision to Diff 295229.
Jac1494 added a comment.

Separate review created for test cases. (https://reviews.llvm.org/D88551)


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

https://reviews.llvm.org/D86395

Files:
  llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp


Index: llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
===================================================================
--- llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
+++ llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
@@ -3381,6 +3381,10 @@
       match(Op1, m_Not(m_Specific(A))))
     return BinaryOperator::CreateNot(Builder.CreateAnd(A, B));
 
+  // (~A & B) ^ A  -->   (A | B) -- There are 4 commuted variants.
+  if (match(&I, m_c_Xor(m_c_And(m_Not(m_Value(A)), m_Value(B)), m_Deferred(A))))
+    return BinaryOperator::CreateOr(A, B);
+
   // (A | B) ^ (A | C) --> (B ^ C) & ~A -- There are 4 commuted variants.
   // TODO: Loosen one-use restriction if common operand is a constant.
   Value *D;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D86395.295229.patch
Type: text/x-patch
Size: 737 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200930/2199f6dd/attachment.bin>


More information about the llvm-commits mailing list