Added statev to sql transform script
[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 main()
51 {
52 #define UOP(func,val,should_be) { printf("%s(%d) -> %d (should be %d)\n", #func, val, func(val), should_be); }
53 #define BOP(func,val1,val2,should_be) { printf("%s(%d,%d) -> %d (should be %d)\n", #func, val1, val2, func(val1,val2), should_be); }
54 #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); }
55         BOP(f, 0, 0, 0);
56         BOP(f, -1, 0, 0);
57         BOP(f, 0, -42, 0);
58         BOP(f, -1, 1, 0);
59         BOP(f, -42, -23, 1);
60         BOP(f, 13, -1, 0);
61         BOP(f, -1, -1, 1);
62         BOP(f, INT_MIN, INT_MIN, 1);
63         BOP(f, INT_MIN, -1, 1);
64         BOP(f, -1, INT_MIN, 1);
65
66         BOP(f2, 0, 0, 0);
67         BOP(f2, -1, 0, 0);
68         BOP(f2, 0, -42, 0);
69         BOP(f2, -1, 1, 0);
70         BOP(f2, -42, -23, 0);
71         BOP(f2, 13, -1, 0);
72         BOP(f2, -1, -1, 0);
73         BOP(f2, SHRT_MIN, SHRT_MIN, 0);
74         BOP(f2, SHRT_MIN, -1, 0);
75         BOP(f2, -1, SHRT_MIN, 0);
76
77         BOP(f3, 0, 0, 0);
78         BOP(f3, -1, 0, 1);
79         BOP(f3, 0, -42, 0);
80         BOP(f3, -1, 1, 1);
81         BOP(f3, -42, -23, 1);
82         BOP(f3, 13, -1, 0);
83         BOP(f3, -1, -1, 0);
84         BOP(f3, SHRT_MIN, SHRT_MIN, 0);
85         BOP(f3, SHRT_MIN, -1, 1);
86         BOP(f3, -1, SHRT_MIN, 0);
87
88         TOP(f4, 1, 2, 3, 1);
89         TOP(f4, -1, -2, -3, 0);
90         TOP(f4, SHRT_MIN, SHRT_MIN, -1, 1);
91         TOP(f4, SHRT_MIN, SHRT_MIN, SHRT_MIN, 1);
92         TOP(f4, SHRT_MAX, SHRT_MIN, SHRT_MAX, 1);
93         TOP(f4, SHRT_MIN, SHRT_MIN, SHRT_MAX, 1);
94         TOP(f4, 13, 42, SHRT_MAX, 1);
95         TOP(f4, 0, 0, 0, 1);
96         TOP(f4, 1, 1, 1, 1);
97
98         BOP(g, UINT_MAX, UINT_MAX, 1048575);
99         BOP(g, 0, 0, 5);
100         BOP(g, 12345, 54321, 5);
101
102         BOP(g2, UINT_MAX, UINT_MAX, 5);
103         BOP(g2, 0, 0, 0);
104         BOP(g2, 12345, 54321, 1);
105
106         TOP(g3, 1, 2, 3, 3);
107         TOP(g3, -1, -2, -3, -1);
108         TOP(g3, INT_MIN, INT_MIN, -1, -1);
109         TOP(g3, INT_MIN, INT_MIN, INT_MIN, INT_MIN);
110         TOP(g3, INT_MAX, INT_MIN, INT_MAX, INT_MAX);
111         TOP(g3, INT_MIN, INT_MIN, INT_MAX, -1);
112         TOP(g3, 13, 42, INT_MAX, INT_MAX);
113         TOP(g3, 0, 0, 0, 0);
114         TOP(g3, 1, 1, 1, 1);
115
116         UOP(af, 0, 0);
117         UOP(af, 1, 0);
118         UOP(af, 42, 0);
119         UOP(af, -1, 0);
120
121         UOP(at, 0, 1);
122         UOP(at, 1, 1);
123         UOP(at, 42, 1);
124         UOP(at, -1, 1);
125         return 0;
126 }