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
This commit is contained in:
Chris Lattner 2003-03-10 23:52:54 +00:00
parent a4f445b28c
commit 8408add00a
3 changed files with 16 additions and 1 deletions

View File

@ -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
}

View File

@ -49,3 +49,4 @@ ubyte %test8(ubyte %A) { ; AND associates
%C = and ubyte %B, 4
ret ubyte %C
}

View File

@ -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
}