- split get_pairidx_for_regidx(), always called with constant parameter
[libfirm] / ir / be / test / localopts.c
1 /*$ -fno-inline $*/
2 #include <stdio.h>
3 #include <math.h>
4
5 #define CONST 42
6
7 int mul0(int x)
8 {
9         return -x * CONST;
10 }
11
12 int mul1(int x, int y)
13 {
14         return -x * -y;
15 }
16
17 int mul2(int x, int y, int z)
18 {
19         return -x * (y - z);
20 }
21
22 int mul3(int x, int y, int z)
23 {
24         return (x - y) * z;
25 }
26
27 int sub0(int x, int y, int z)
28 {
29         return x - (y - z);
30 }
31
32 int sub1(int x, int y)
33 {
34         return x - (y * CONST);
35 }
36
37 int sub2(int x, int y)
38 {
39         return x - -y;
40 }
41
42 int sub3(int x, int y)
43 {
44         return -x - y;
45 }
46
47 int sub4(int x) {
48         return 6 - ~x;
49 }
50
51 int addmul(int x, int y)
52 {
53
54 }
55
56 int cmp1(int x, int y) {
57         return -x == -y;
58 }
59
60 int cmp2(int x, int y) {
61         return -x != -y;
62 }
63
64 int cmp3(int x, int y) {
65         return ~x == ~y;
66 }
67
68 int cmp4(int x, int y) {
69         return ~x != ~y;
70 }
71
72 int cmp5(int x, int y, int z) {
73         return x + z == z + y;
74 }
75
76 int cmp6(int x, int y, int z) {
77         return x + z != y + z;
78 }
79
80 int cmp7(int x, int y, int z) {
81         return x - z == y - z;
82 }
83
84 int cmp8(int x, int y, int z) {
85         return z -x != z - y;
86 }
87
88 int cmp9(int x) {
89         return -x == 3;
90 }
91
92 int cmp10(int x) {
93         return -x != 3;
94 }
95
96 int cmp11(int x, int y) {
97         return x - y != x;
98 }
99
100 int cmp12(int x, int y) {
101         return x + y == x && y + x == y;
102 }
103
104 int and1(int a, int b) {
105         return (a|b)&a;
106 }
107
108 int and2(int a, int b) {
109         return (a|b) & ~(a&b);
110 }
111
112 int and3(int a) {
113         return (a & 2) == 2;
114 }
115
116 int and4(int a) {
117         return (a & 2) == 4;
118 }
119
120 int and5(int a) {
121         return (a & 2) != 4;
122 }
123
124 int or1(int a) {
125         return (a | 2) != 0;
126 }
127
128 int or2(int a) {
129         return (a | 7) == 0;
130 }
131
132 int add1(int x) {
133         return x + ~x;
134 }
135
136 int shr1(int x) {
137         return -(x >> 31);
138 }
139
140 int shrs1(unsigned x) {
141         return -(x >> 31);
142 }
143
144 int demorgan1(int a, int b) {
145         return (~a) & (~b);
146 }
147
148 int demorgan2(int a, int b) {
149         return (~a) | (~b);
150 }
151
152 int eor1(int a, int b) {
153         return a & (a ^ b);
154 }
155
156 int shl1(int a) {
157         return (a << 3) == (5<<3);
158 }
159
160 int shl2(int a) {
161         return (a << 3) == 41;
162 }
163
164 int shr2(unsigned int a) {
165         return (a >> 3) == 5;
166 }
167
168 int shr3(unsigned int a) {
169         return (a >> 3) == (1 << 29);
170 }
171
172 int shrs2(int a) {
173         return (a >> 3) == 5;
174 }
175
176 int shrs3(int a) {
177         return (a >> 3) == -5;
178 }
179
180 int shrs4(int a) {
181         return (a >> 3) == (1 << 29);
182 }
183
184 int conv1(signed char a) {
185         return (int)a < 0;
186 }
187
188 int conv2(unsigned char a) {
189         return (int)a > 0;
190 }
191
192 int conv3(signed char a) {
193         return (unsigned)a != 0;
194 }
195
196 int phi1(int x) {
197         int a = x ? 23 : 42;
198         int b = x ? 42 : 23;
199         return a + b;
200 }
201
202 int phi2(int x) {
203         int a = x ? 16 : 8;
204         int b = x ? 4  : 2;
205         return a / b;
206 }
207
208 int phi3(int x) {
209         int a = x ? 5 : 9;
210         int b = x ? 2 : 4;
211         return a % b;
212 }
213
214 int phi4(int x) {
215         int a = x ? 5 : 9;
216         int b = x ? 2 : 4;
217         return (a / b) + (a % b);
218 }
219
220 int abs1(int x) {
221         return abs(-x);
222 }
223
224 int main(void)
225 {
226 #define TU(func,x,expect) \
227         printf("%s(%d) = %d (should be %d)\n", #func, x, func(x), expect);
228 #define TB(func,x,y,expect) \
229         printf("%s(%d,%d) = %d (should be %d)\n", #func, x, y, func(x,y), expect);
230 #define TT(func,x,y,z,expect) \
231         printf("%s(%d,%d,%d) = %d (should be %d)\n", #func, x, y, z, func(x,y,z), expect);
232
233         TU(mul0, 3, -126);
234         TB(mul1, 20, 3, 60);
235         TT(mul2, 9, 2, 5, 27);
236         TT(mul3, 5, 2, 9, 27);
237         TT(sub0, 42, 17, 59, 84);
238         TB(sub1, 23, 17, -691);
239         TB(sub2, 42, 17, 59);
240         TB(sub3, 42, 17, -59);
241         TU(sub4, 42, 49);
242         TB(cmp1, 42, 17, 0);
243         TB(cmp2, 42, 17, 1);
244         TB(cmp3, 42, 17, 0);
245         TB(cmp4, 42, 17, 1);
246         TT(cmp5, 42, 17, -4, 0);
247         TT(cmp6, 42, 17, -4, 1);
248         TT(cmp7, 42, 17, -4, 0);
249         TT(cmp8, 42, 17, -4, 1);
250         TU(cmp9, -3, 1);
251         TU(cmp10, -3, 0);
252         TB(cmp11, 5, 5, 1);
253         TB(cmp11, 42, 0, 0);
254         TB(cmp12, 0, 0, 1);
255         TB(cmp12, 42, 5, 0);
256         TB(cmp12, 5, 5, 0);
257         TB(and1, 42, 17, 42);
258         TB(and2, 42, 17, 42^17);
259         TU(and3, 34, 1);
260         TU(add1, -3, -1);
261         TU(shr1, -3, 1);
262         TU(shrs1, -3, -1);
263         TB(demorgan1, 42, 17, ~(42|17));
264         TB(demorgan2, 42, 17, ~(42&17));
265         TB(eor1, 42, 44, 42&~44);
266         TU(shl1, 5, 1);
267         TU(shl1, 6, 0);
268         TU(shl2, 5, 0);
269         TU(shr2, 5<<3, 1);
270         TU(shr2, 6<<3, 0);
271         TU(shr3, 5, 0);
272         TU(shrs2, 5<<3, 1);
273         TU(shrs2, 6<<3, 0);
274         TU(shrs3, -5<<3, 1);
275         TU(shrs3, -6<<3, 0);
276         TU(shrs4, 5, 0);
277         TU(conv1, 3, 0);
278         TU(conv2, 3, 1);
279         TU(conv3, 3, 1);
280         TU(and4, 7, 0);
281         TU(and5, 7, 1);
282         TU(or1, 7, 1);
283         TU(or2, 7, 0);
284         TU(phi1, 1, 65);
285         TU(phi2, 1, 4);
286         TU(phi3, 1, 1);
287         TU(phi4, 1, 3);
288         TU(abs1, 1, 1);
289 }