[InstCombine] sub(xor(x, y), or(x, y)) -> neg(and(x, y))
authorDavid Bolvansky <david.bolvansky@gmail.com>
Wed, 4 Sep 2019 18:03:21 +0000 (18:03 +0000)
committerDavid Bolvansky <david.bolvansky@gmail.com>
Wed, 4 Sep 2019 18:03:21 +0000 (18:03 +0000)
commit420cbb6190e97d470ddb12a3136af148a7d5e841
tree7068784d9b40834733e1932e898c4f9da7c45a2e
parent673e5476a817e93440e4b269df8bcb0d4b8aae14
[InstCombine] sub(xor(x, y), or(x, y)) -> neg(and(x, y))

Summary:
```
Name: sub(xor(x, y), or(x, y)) -> neg(and(x, y))
%or = or i32 %y, %x
%xor = xor i32 %x, %y
%sub = sub i32 %xor, %or
  =>
%sub1 = and i32 %x, %y
%sub = sub i32 0, %sub1

Optimization: sub(xor(x, y), or(x, y)) -> neg(and(x, y))
Done: 1
Optimization is correct!
```

https://rise4fun.com/Alive/8OI

Reviewers: lebedev.ri

Reviewed By: lebedev.ri

Subscribers: llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D67188

llvm-svn: 370945
llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
llvm/test/Transforms/InstCombine/sub-xor-or-neg-and.ll