f97a2b6198d5e6632caf9c70712076b5625275af
[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
81 ; These instructions can be turned into cast-to-bool
82 bool %test15(sbyte %A, short %A, int %A, long %A) {
83         %B1 = setne sbyte %A, 0
84         %B2 = seteq short %A, 0
85         %B3 = setne int %A, 0
86         %B4 = seteq long %A, 0
87         %C1 = or bool %B1, %B2
88         %C2 = or bool %B3, %B4
89         %D = or bool %C1, %C2
90         ret bool %D
91 }