| /* Check that eliminable compare-instructions are eliminated. */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2" } */ |
| /* { dg-final { scan-assembler-not "\tcmp|\ttest" } } */ |
| |
| #ifndef t |
| #define t short int |
| #endif |
| #ifndef t2 |
| #define t2 int |
| #endif |
| |
| #define eq_op(x) ((x) == 0) |
| #define ne_op(x) ((x) != 0) |
| #define gt_op(x) ((x) > 0) |
| #define gtu_op(x) ((x) > 0) |
| #define lt_op(x) ((x) < 0) |
| #define ltu_op(x) ((x) < 0) |
| #define ge_op(x) ((x) >= 0) |
| #define geu_op(x) ((x) >= 0) |
| #define le_op(x) ((x) <= 0) |
| #define leu_op(x) ((x) <= 0) |
| |
| #define f(n, T, T2) \ |
| T2 f ## n(T *a, T *b, T2 *d) \ |
| { \ |
| T2 c = *a; \ |
| *d = c; \ |
| *b = n ## _op (c); \ |
| return c; \ |
| } |
| |
| f(eq, t, t2) |
| f(ne, t, t2) |
| f(gt, t, t2) |
| f(gtu, unsigned t, unsigned t2) |
| f(lt, t, t2) |
| #if 0 |
| f(ltu, unsigned t, unsigned t2) |
| #endif |
| f(ge, t, t2) |
| #if 0 |
| f(geu, t, t2) |
| #endif |
| f(le, t, t2) |
| f(leu, t, t2) |