mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 00:32:55 +00:00
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:
parent
a4f445b28c
commit
8408add00a
@ -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
|
||||
}
|
||||
|
@ -49,3 +49,4 @@ ubyte %test8(ubyte %A) { ; AND associates
|
||||
%C = and ubyte %B, 4
|
||||
ret ubyte %C
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user