1 /* Check that eliminable compare-instructions are eliminated. */
2 /* { dg-do compile } */
3 /* { dg-options "-O2" } */
4 /* { dg-final { scan-assembler-not "\tcmp|\ttest" } } */
5
6 #ifndef t
7 #define t short int
8 #endif
9 #ifndef t2
10 #define t2 int
11 #endif
12
13 #define eq_op(x) ((x) == 0)
14 #define ne_op(x) ((x) != 0)
15 #define gt_op(x) ((x) > 0)
16 #define gtu_op(x) ((x) > 0)
17 #define lt_op(x) ((x) < 0)
18 #define ltu_op(x) ((x) < 0)
19 #define ge_op(x) ((x) >= 0)
20 #define geu_op(x) ((x) >= 0)
21 #define le_op(x) ((x) <= 0)
22 #define leu_op(x) ((x) <= 0)
23
24 #define f(n, T, T2) \
25 T2 f ## n(T *a, T *b, T2 *d) \
26 { \
27 T2 c = *a; \
28 *d = c; \
29 *b = n ## _op (c); \
30 return c; \
31 }
32
33 f(eq, t, t2)
34 f(ne, t, t2)
35 f(gt, t, t2)
36 f(gtu, unsigned t, unsigned t2)
37 f(lt, t, t2)
38 #if 0
39 f(ltu, unsigned t, unsigned t2)
40 #endif
41 f(ge, t, t2)
42 #if 0
43 f(geu, t, t2)
44 #endif
45 f(le, t, t2)
46 f(leu, t, t2)