X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Ftest%2Flocalopts.c;h=2851d10705b8c087377323ff9b6e44acd38fccbd;hb=93da909d12b7bec51aa36ee5f05966c331f90fb9;hp=6a10aad118867588fa448aedbe842c32d5830bec;hpb=df3c852efae95feb78a9f47aa28945fffbf9964e;p=libfirm diff --git a/ir/be/test/localopts.c b/ir/be/test/localopts.c index 6a10aad11..2851d1070 100644 --- a/ir/be/test/localopts.c +++ b/ir/be/test/localopts.c @@ -1,5 +1,6 @@ /*$ -fno-inline $*/ #include +#include #define CONST 42 @@ -47,6 +48,11 @@ int sub4(int x) { return 6 - ~x; } +int addmul(int x, int y) +{ + +} + int cmp1(int x, int y) { return -x == -y; } @@ -87,6 +93,14 @@ int cmp10(int x) { return -x != 3; } +int cmp11(int x, int y) { + return x - y != x; +} + +int cmp12(int x, int y) { + return x + y == x && y + x == y; +} + int and1(int a, int b) { return (a|b)&a; } @@ -95,10 +109,118 @@ int and2(int a, int b) { return (a|b) & ~(a&b); } +int and3(int a) { + return (a & 2) == 2; +} + +int and4(int a) { + return (a & 2) == 4; +} + +int and5(int a) { + return (a & 2) != 4; +} + +int or1(int a) { + return (a | 2) != 0; +} + +int or2(int a) { + return (a | 7) == 0; +} + int add1(int x) { return x + ~x; } +int shr1(int x) { + return -(x >> 31); +} + +int shrs1(unsigned x) { + return -(x >> 31); +} + +int demorgan1(int a, int b) { + return (~a) & (~b); +} + +int demorgan2(int a, int b) { + return (~a) | (~b); +} + +int eor1(int a, int b) { + return a & (a ^ b); +} + +int shl1(int a) { + return (a << 3) == (5<<3); +} + +int shl2(int a) { + return (a << 3) == 41; +} + +int shr2(unsigned int a) { + return (a >> 3) == 5; +} + +int shr3(unsigned int a) { + return (a >> 3) == (1 << 29); +} + +int shrs2(int a) { + return (a >> 3) == 5; +} + +int shrs3(int a) { + return (a >> 3) == -5; +} + +int shrs4(int a) { + return (a >> 3) == (1 << 29); +} + +int conv1(signed char a) { + return (int)a < 0; +} + +int conv2(unsigned char a) { + return (int)a > 0; +} + +int conv3(signed char a) { + return (unsigned)a != 0; +} + +int phi1(int x) { + int a = x ? 23 : 42; + int b = x ? 42 : 23; + return a + b; +} + +int phi2(int x) { + int a = x ? 16 : 8; + int b = x ? 4 : 2; + return a / b; +} + +int phi3(int x) { + int a = x ? 5 : 9; + int b = x ? 2 : 4; + return a % b; +} + +int phi4(int x) { + int a = x ? 5 : 9; + int b = x ? 2 : 4; + return (a / b) + (a % b); +} + +int abs1(int x) { + return abs(-x); +} + int main(void) { #define TU(func,x,expect) \ @@ -127,7 +249,41 @@ int main(void) TT(cmp8, 42, 17, -4, 1); TU(cmp9, -3, 1); TU(cmp10, -3, 0); + TB(cmp11, 5, 5, 1); + TB(cmp11, 42, 0, 0); + TB(cmp12, 0, 0, 1); + TB(cmp12, 42, 5, 0); + TB(cmp12, 5, 5, 0); TB(and1, 42, 17, 42); TB(and2, 42, 17, 42^17); + TU(and3, 34, 1); TU(add1, -3, -1); + TU(shr1, -3, 1); + TU(shrs1, -3, -1); + TB(demorgan1, 42, 17, ~(42|17)); + TB(demorgan2, 42, 17, ~(42&17)); + TB(eor1, 42, 44, 42&~44); + TU(shl1, 5, 1); + TU(shl1, 6, 0); + TU(shl2, 5, 0); + TU(shr2, 5<<3, 1); + TU(shr2, 6<<3, 0); + TU(shr3, 5, 0); + TU(shrs2, 5<<3, 1); + TU(shrs2, 6<<3, 0); + TU(shrs3, -5<<3, 1); + TU(shrs3, -6<<3, 0); + TU(shrs4, 5, 0); + TU(conv1, 3, 0); + TU(conv2, 3, 1); + TU(conv3, 3, 1); + TU(and4, 7, 0); + TU(and5, 7, 1); + TU(or1, 7, 1); + TU(or2, 7, 0); + TU(phi1, 1, 65); + TU(phi2, 1, 4); + TU(phi3, 1, 1); + TU(phi4, 1, 3); + TU(abs1, 1, 1); }