blob: 24d8f69a4b2dbb476987bec9471a2a66dc1aaf89 [file] [log] [blame]
Chris Lattner679da032002-05-06 17:00:47 +00001; This test makes sure that these instructions are properly eliminated.
2;
3
Chris Lattnerf9b9af02002-08-14 17:37:04 +00004; RUN: if as < %s | opt -instcombine -die | dis | grep xor
Chris Lattner679da032002-05-06 17:00:47 +00005; RUN: then exit 1
6; RUN: else exit 0
7; RUN: fi
8
9implementation
10
Chris Lattnere9e7ab52002-08-20 17:07:02 +000011int %test1(int %A) {
12 %B = xor int %A, -1
13 %C = xor int %B, -1
Chris Lattner679da032002-05-06 17:00:47 +000014 ret int %C
15}
16
Chris Lattnerf75c3332002-08-21 17:11:18 +000017bool %test2(int %A, int %B) {
18 %cond = setle int %A, %B ; Can change into setge
19 %Ret = xor bool %cond, true
20 ret bool %Ret
21}
Chris Lattnerad1e0532002-08-23 18:31:18 +000022
23
24; Test that demorgans law can be instcombined
25int %test3(int %A, int %B) {
26 %a = xor int %A, -1
27 %b = xor int %B, -1
28 %c = and int %a, %b
29 %d = xor int %c, -1
30 ret int %d
31}
Chris Lattnerf7a83852003-03-10 23:13:32 +000032
33; Test that demorgens law can work with constants
34int %test4(int %A, int %B) {
35 %a = xor int %A, -1
36 %c = and int %a, 5 ; 5 = ~c2
37 %d = xor int %c, -1
38 ret int %d
39}
40
41; test the mirror of demorgans law...
42int %test5(int %A, int %B) {
43 %a = xor int %A, -1
44 %b = xor int %B, -1
45 %c = or int %a, %b
46 %d = xor int %c, -1
47 ret int %d
48}