diff options
| author | Suyog Sarda <suyog.sarda@samsung.com> | 2014-07-22 15:37:39 +0000 |
|---|---|---|
| committer | Suyog Sarda <suyog.sarda@samsung.com> | 2014-07-22 15:37:39 +0000 |
| commit | 521237cad6b82e8f8bd340410e275474672838ba (patch) | |
| tree | ed010f97e0d45384d750264f28bc3062e90aaea8 /llvm/test/Transforms | |
| parent | 0d38c3a7266037c0f9c5fe42b661418989474c16 (diff) | |
| download | bcm5719-llvm-521237cad6b82e8f8bd340410e275474672838ba.tar.gz bcm5719-llvm-521237cad6b82e8f8bd340410e275474672838ba.zip | |
This patch implements transform for pattern "(A | B) ^ (~A) -> (A | ~B)".
Patch Credit to Ankit Jain !!
Differential Revision: http://reviews.llvm.org/D4588
llvm-svn: 213662
Diffstat (limited to 'llvm/test/Transforms')
| -rw-r--r-- | llvm/test/Transforms/InstCombine/xor2.ll | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/xor2.ll b/llvm/test/Transforms/InstCombine/xor2.ll index d153e035c89..e7b1b1bbda8 100644 --- a/llvm/test/Transforms/InstCombine/xor2.ll +++ b/llvm/test/Transforms/InstCombine/xor2.ll @@ -82,3 +82,26 @@ define i32 @test6(i32 %x) { ; CHECK: lshr i32 %x, 16 ; CHECK: ret } + + +; (A | B) ^ (~A) -> (A | ~B) +define i32 @test7(i32 %a, i32 %b) #0 { + %or = or i32 %a, %b + %neg = xor i32 %a, -1 + %xor = xor i32 %or, %neg + ret i32 %xor +; CHECK-LABEL: @test7( +; CHECK-NEXT: %1 = xor i32 %b, -1 +; CHECK-NEXT: %xor = or i32 %a, %1 +} + +; (~A) ^ (A | B) -> (A | ~B) +define i32 @test8(i32 %a, i32 %b) #0 { + %neg = xor i32 %a, -1 + %or = or i32 %a, %b + %xor = xor i32 %neg, %or + ret i32 %xor +; CHECK-LABEL: @test8( +; CHECK-NEXT: %1 = xor i32 %b, -1 +; CHECK-NEXT: %xor = or i32 %a, %1 +} |

