setcc of booleans should always be eliminated
[oota-llvm.git] / test / Transforms / InstCombine / set.ll
1 ; This test makes sure that these instructions are properly eliminated.
2 ;
3
4 ; RUN: if as < %s | opt -instcombine | dis | grep set
5 ; RUN: then exit 1
6 ; RUN: else exit 0
7 ; RUN: fi
8
9 %X = uninitialized global int
10
11 bool "test1"(int %A) {
12         %B = seteq int %A, %A
13         %C = seteq int* %X, null   ; Never true
14         %D = and bool %B, %C
15         ret bool %D
16 }
17
18 bool "test2"(int %A) {
19         %B = setne int %A, %A
20         %C = setne int* %X, null   ; Never false
21         %D = or bool %B, %C
22         ret bool %D
23 }
24
25 bool "test3"(int %A) {
26         %B = setlt int %A, %A
27         ret bool %B
28 }
29
30 bool "test4"(int %A) {
31         %B = setgt int %A, %A
32         ret bool %B
33 }
34
35 bool "test5"(int %A) {
36         %B = setle int %A, %A
37         ret bool %B
38 }
39
40 bool "test6"(int %A) {
41         %B = setge int %A, %A
42         ret bool %B
43 }
44
45 bool "test7"(uint %A) {
46         %B = setge uint %A, 0  ; true
47         ret bool %B
48 }
49
50 bool "test8"(uint %A) {
51         %B = setlt uint %A, 0  ; false
52         ret bool %B
53 }
54
55 ;; test operations on boolean values these should all be eliminated$a
56 bool %test9(bool %A) {
57         %B = setlt bool %A, false ; false
58         ret bool %B
59 }
60 bool %test10(bool %A) {
61         %B = setgt bool %A, true  ; false
62         ret bool %B
63 }
64 bool %test11(bool %A) {
65         %B = setle bool %A, true ; true
66         ret bool %B
67 }
68 bool %test12(bool %A) {
69         %B = setge bool %A, false  ; true
70         ret bool %B
71 }
72 bool %test13(bool %A, bool %B) {
73         %C = setge bool %A, %B       ; A | ~B
74         ret bool %C
75 }
76 bool %test14(bool %A, bool %B) {
77         %C = seteq bool %A, %B  ; ~(A ^ B)
78         ret bool %C
79 }
80