extended boolopts test
[libfirm] / ir / be / test / boolopts.c
1 /*$ -fno-inline $*/
2 #include <limits.h>
3 #include <stdio.h>
4
5 int f(int a, int b)
6 {
7         return a < 0 & b < 0;
8 }
9
10 int f2(short a, short b)
11 {
12         return a < b && b < a;
13 }
14
15 int f3(short a, short b)
16 {
17         return a < b && b > a;
18 }
19
20 int f4(short a, short b, short c)
21 {
22         return (a <= c) & (b <= c);
23 }
24
25 int g(unsigned a, unsigned b)
26 {
27         return ((a >> 12) | 5) & ((b >> 12) | 5);
28 }
29
30 int g2(unsigned a, unsigned b)
31 {
32         return (a & 5) | (b & 5);
33 }
34
35 int g3(int a, int b, int z)
36 {
37         return (a | z) & (b | z);
38 }
39
40 int af(int a)
41 {
42         return (a ? 1 : 0) && !a;
43 }
44
45 int at(int a)
46 {
47         return (a ? 1 : 0) || !a;
48 }
49
50 int c(int a, int b)
51 {
52         return a < b || a == b;
53 }
54
55 int c2(int a, int b)
56 {
57         return a < b && a <= b;
58 }
59
60 int c3(int a, int b)
61 {
62         return a < b || a >= b;
63 }
64
65 int c4(int a, int b)
66 {
67         return a < b ^ a <= b;
68 }
69
70 int main()
71 {
72 #define UOP(func,val,should_be) { printf("%s(%d) -> %d (should be %d)\n", #func, val, func(val), should_be); }
73 #define BOP(func,val1,val2,should_be) { printf("%s(%d,%d) -> %d (should be %d)\n", #func, val1, val2, func(val1,val2), should_be); }
74 #define TOP(func,val1,val2,val3,should_be) { printf("%s(%d,%d,%d) -> %d (should be %d)\n", #func, val1, val2, val3, func(val1,val2,val3), should_be); }
75         BOP(f, 0, 0, 0);
76         BOP(f, -1, 0, 0);
77         BOP(f, 0, -42, 0);
78         BOP(f, -1, 1, 0);
79         BOP(f, -42, -23, 1);
80         BOP(f, 13, -1, 0);
81         BOP(f, -1, -1, 1);
82         BOP(f, INT_MIN, INT_MIN, 1);
83         BOP(f, INT_MIN, -1, 1);
84         BOP(f, -1, INT_MIN, 1);
85
86         BOP(f2, 0, 0, 0);
87         BOP(f2, -1, 0, 0);
88         BOP(f2, 0, -42, 0);
89         BOP(f2, -1, 1, 0);
90         BOP(f2, -42, -23, 0);
91         BOP(f2, 13, -1, 0);
92         BOP(f2, -1, -1, 0);
93         BOP(f2, SHRT_MIN, SHRT_MIN, 0);
94         BOP(f2, SHRT_MIN, -1, 0);
95         BOP(f2, -1, SHRT_MIN, 0);
96
97         BOP(f3, 0, 0, 0);
98         BOP(f3, -1, 0, 1);
99         BOP(f3, 0, -42, 0);
100         BOP(f3, -1, 1, 1);
101         BOP(f3, -42, -23, 1);
102         BOP(f3, 13, -1, 0);
103         BOP(f3, -1, -1, 0);
104         BOP(f3, SHRT_MIN, SHRT_MIN, 0);
105         BOP(f3, SHRT_MIN, -1, 1);
106         BOP(f3, -1, SHRT_MIN, 0);
107
108         TOP(f4, 1, 2, 3, 1);
109         TOP(f4, -1, -2, -3, 0);
110         TOP(f4, SHRT_MIN, SHRT_MIN, -1, 1);
111         TOP(f4, SHRT_MIN, SHRT_MIN, SHRT_MIN, 1);
112         TOP(f4, SHRT_MAX, SHRT_MIN, SHRT_MAX, 1);
113         TOP(f4, SHRT_MIN, SHRT_MIN, SHRT_MAX, 1);
114         TOP(f4, 13, 42, SHRT_MAX, 1);
115         TOP(f4, 0, 0, 0, 1);
116         TOP(f4, 1, 1, 1, 1);
117
118         BOP(g, UINT_MAX, UINT_MAX, 1048575);
119         BOP(g, 0, 0, 5);
120         BOP(g, 12345, 54321, 5);
121
122         BOP(g2, UINT_MAX, UINT_MAX, 5);
123         BOP(g2, 0, 0, 0);
124         BOP(g2, 12345, 54321, 1);
125
126         TOP(g3, 1, 2, 3, 3);
127         TOP(g3, -1, -2, -3, -1);
128         TOP(g3, INT_MIN, INT_MIN, -1, -1);
129         TOP(g3, INT_MIN, INT_MIN, INT_MIN, INT_MIN);
130         TOP(g3, INT_MAX, INT_MIN, INT_MAX, INT_MAX);
131         TOP(g3, INT_MIN, INT_MIN, INT_MAX, -1);
132         TOP(g3, 13, 42, INT_MAX, INT_MAX);
133         TOP(g3, 0, 0, 0, 0);
134         TOP(g3, 1, 1, 1, 1);
135
136         UOP(af, 0, 0);
137         UOP(af, 1, 0);
138         UOP(af, 42, 0);
139         UOP(af, -1, 0);
140
141         UOP(at, 0, 1);
142         UOP(at, 1, 1);
143         UOP(at, 42, 1);
144         UOP(at, -1, 1);
145
146         BOP(c, 0, 0, 0);
147         BOP(c, -1, 0, 0);
148         BOP(c, 0, -42, 0);
149         BOP(c, -1, 1, 0);
150         BOP(c, -42, -23, 0);
151         BOP(c, 13, -1, 0);
152         BOP(c, -1, -1, 0);
153         BOP(c, SHRT_MIN, SHRT_MIN, 0);
154         BOP(c, SHRT_MIN, -1, 0);
155         BOP(c, -1, SHRT_MIN, 0);
156
157         BOP(c2, 0, 0, 0);
158         BOP(c2, -1, 0, 0);
159         BOP(c2, 0, -42, 0);
160         BOP(c2, -1, 1, 0);
161         BOP(c2, -42, -23, 0);
162         BOP(c2, 13, -1, 0);
163         BOP(c2, -1, -1, 0);
164         BOP(c2, SHRT_MIN, SHRT_MIN, 0);
165         BOP(c2, SHRT_MIN, -1, 0);
166         BOP(c2, -1, SHRT_MIN, 0);
167
168         BOP(c3, 0, 0, 0);
169         BOP(c3, -1, 0, 0);
170         BOP(c3, 0, -42, 0);
171         BOP(c3, -1, 1, 0);
172         BOP(c3, -42, -23, 0);
173         BOP(c3, 13, -1, 0);
174         BOP(c3, -1, -1, 0);
175         BOP(c3, SHRT_MIN, SHRT_MIN, 0);
176         BOP(c3, SHRT_MIN, -1, 0);
177         BOP(c3, -1, SHRT_MIN, 0);
178
179         BOP(c4, 0, 0, 0);
180         BOP(c4, -1, 0, 0);
181         BOP(c4, 0, -42, 0);
182         BOP(c4, -1, 1, 0);
183         BOP(c4, -42, -23, 0);
184         BOP(c4, 13, -1, 0);
185         BOP(c4, -1, -1, 0);
186         BOP(c4, SHRT_MIN, SHRT_MIN, 0);
187         BOP(c4, SHRT_MIN, -1, 0);
188         BOP(c4, -1, SHRT_MIN, 0);
189
190         return 0;
191 }