Fix r15779 and generalise. Also implement
[libfirm] / ir / be / test / localopts.c
1 /*$ -fno-inline $*/
2 #include <stdio.h>
3
4 #define CONST 42
5
6 int mul0(int x)
7 {
8         return -x * CONST;
9 }
10
11 int mul1(int x, int y)
12 {
13         return -x * -y;
14 }
15
16 int mul2(int x, int y, int z)
17 {
18         return -x * (y - z);
19 }
20
21 int mul3(int x, int y, int z)
22 {
23         return (x - y) * z;
24 }
25
26 int main(void)
27 {
28 #define TU(func,x,expect) \
29         printf("%s(%d) = %d (should be %d)\n", #func, x, func(x), expect);
30 #define TB(func,x,y,expect) \
31         printf("%s(%d,%d) = %d (should be %d)\n", #func, x, y, func(x,y), expect);
32 #define TT(func,x,y,z,expect) \
33         printf("%s(%d,%d,%d) = %d (should be %d)\n", #func, x, y, z, func(x,y,z), expect);
34
35         TU(mul0, 3, -126);
36         TB(mul1, 20, 3, 60);
37         TT(mul2, 9, 2, 5, 27);
38         TT(mul3, 5, 2, 9, 27);
39 }