From 312c3e5f39899e07c7f73e6687b8eeca1d6363cd Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Sun, 19 Oct 2014 08:32:32 +0000 Subject: InstCombine: (sub (or A B) (xor A B)) --> (and A B) The following implements the transformation: (sub (or A B) (xor A B)) --> (and A B). Patch by Ankur Garg! Differential Revision: http://reviews.llvm.org/D5719 llvm-svn: 220163 --- llvm/test/Transforms/InstCombine/sub.ll | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'llvm/test/Transforms') diff --git a/llvm/test/Transforms/InstCombine/sub.ll b/llvm/test/Transforms/InstCombine/sub.ll index 1d1bedc0a7b..95a61b1747c 100644 --- a/llvm/test/Transforms/InstCombine/sub.ll +++ b/llvm/test/Transforms/InstCombine/sub.ll @@ -530,3 +530,13 @@ define i32 @test44(i32 %x) { ; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 %x, -32768 ; CHECK: ret i32 [[ADD]] } + +define i32 @test45(i32 %x, i32 %y) { + %or = or i32 %x, %y + %xor = xor i32 %x, %y + %sub = sub i32 %or, %xor + ret i32 %sub +; CHECK-LABEL: @test45( +; CHECK-NEXT: %sub = and i32 %x, %y +; CHECK: ret i32 %sub +} -- cgit v1.2.3