llvm/test/Transforms/InstCombine/apint-xor2.ll
Dan Gohman f2f6ce65b7 Change tests from "opt %s" to "opt < %s" so that opt doesn't see the
input filename so that opt doesn't print the input filename in the
output so that grep lines in the tests don't unintentionally match
strings in the input filename.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81537 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-11 18:01:28 +00:00

52 lines
1.2 KiB
LLVM

; This test makes sure that xor instructions are properly eliminated.
; This test is for Integer BitWidth > 64 && BitWidth <= 1024.
; RUN: opt < %s -instcombine -S | not grep {xor }
; END.
define i447 @test1(i447 %A, i447 %B) {
;; (A & C1)^(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0
%A1 = and i447 %A, 70368744177664
%B1 = and i447 %B, 70368744177663
%C1 = xor i447 %A1, %B1
ret i447 %C1
}
define i1005 @test2(i1005 %x) {
%tmp.2 = xor i1005 %x, 0
ret i1005 %tmp.2
}
define i123 @test3(i123 %x) {
%tmp.2 = xor i123 %x, %x
ret i123 %tmp.2
}
define i737 @test4(i737 %x) {
; x ^ ~x == -1
%NotX = xor i737 -1, %x
%B = xor i737 %x, %NotX
ret i737 %B
}
define i700 @test5(i700 %A) {
;; (A|B)^B == A & (~B)
%t1 = or i700 %A, 288230376151711743
%r = xor i700 %t1, 288230376151711743
ret i700 %r
}
define i77 @test6(i77 %A) {
%t1 = xor i77 %A, 23
%r = xor i77 %t1, 23
ret i77 %r
}
define i1023 @test7(i1023 %A) {
;; (A | C1) ^ C2 -> (A | C1) & ~C2 iff (C1&C2) == C2
%B1 = or i1023 %A, 70368744177663
%C1 = xor i1023 %B1, 703687463
ret i1023 %C1
}