From 8408add00a690046ddbc3e5d9d19c6b640444f65 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 10 Mar 2003 23:52:54 +0000 Subject: [PATCH] Add optimizations: - (A & C1)+(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0 - (A & C1)^(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5741 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Transforms/InstCombine/add.ll | 6 ++++++ test/Transforms/InstCombine/and.ll | 1 + test/Transforms/InstCombine/or.ll | 10 +++++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/test/Transforms/InstCombine/add.ll b/test/Transforms/InstCombine/add.ll index 19fa6261cdd..4043a7f9c35 100644 --- a/test/Transforms/InstCombine/add.ll +++ b/test/Transforms/InstCombine/add.ll @@ -51,3 +51,9 @@ int %test7(int %A) { ret int %C } +int %test8(int %A, int %B) { ; (A & C1)+(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0 + %A1 = and int %A, 7 + %B1 = and int %B, 128 + %C = add int %A1, %B1 + ret int %C +} diff --git a/test/Transforms/InstCombine/and.ll b/test/Transforms/InstCombine/and.ll index 03b67f57b6e..269b33c285a 100644 --- a/test/Transforms/InstCombine/and.ll +++ b/test/Transforms/InstCombine/and.ll @@ -49,3 +49,4 @@ ubyte %test8(ubyte %A) { ; AND associates %C = and ubyte %B, 4 ret ubyte %C } + diff --git a/test/Transforms/InstCombine/or.ll b/test/Transforms/InstCombine/or.ll index 7ffd3461bc6..ec28e20ad3f 100644 --- a/test/Transforms/InstCombine/or.ll +++ b/test/Transforms/InstCombine/or.ll @@ -1,7 +1,7 @@ ; This test makes sure that these instructions are properly eliminated. ; -; RUN: if as < %s | opt -instcombine | dis | grep or\ +; RUN: if as < %s | opt -instcombine | dis | grep -v '%OROK = or' | grep or\ ; RUN: then exit 1 ; RUN: else exit 0 ; RUN: fi @@ -91,3 +91,11 @@ ubyte %test15(ubyte %A) { %C = xor ubyte %B, 17 ret ubyte %C } + +int %test16(int %A, int %B) { ; (A & C1)^(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0 + %A1 = and int %A, 7 + %B1 = and int %B, 128 + %OROK = xor int %A1, %B1 + ret int %OROK +} +