; This test makes sure that these instructions are properly eliminated.
;
-; RUN: if as < %s | opt -instcombine -die | dis | grep xor
-; RUN: then exit 1
-; RUN: else exit 0
-; RUN: fi
+; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | not grep xor
implementation
%Ret = xor bool %cond, true
ret bool %Ret
}
+
+
+; Test that demorgans law can be instcombined
+int %test3(int %A, int %B) {
+ %a = xor int %A, -1
+ %b = xor int %B, -1
+ %c = and int %a, %b
+ %d = xor int %c, -1
+ ret int %d
+}
+
+; Test that demorgens law can work with constants
+int %test4(int %A, int %B) {
+ %a = xor int %A, -1
+ %c = and int %a, 5 ; 5 = ~c2
+ %d = xor int %c, -1
+ ret int %d
+}
+
+; test the mirror of demorgans law...
+int %test5(int %A, int %B) {
+ %a = xor int %A, -1
+ %b = xor int %B, -1
+ %c = or int %a, %b
+ %d = xor int %c, -1
+ ret int %d
+}