1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-optimized" } */
3
4 typedef __INT16_TYPE__ int16_t;
5 typedef __INT32_TYPE__ int32_t;
6 typedef __UINT16_TYPE__ uint16_t;
7 typedef __UINT32_TYPE__ uint32_t;
8
9 #define MAGIC (~ (uint32_t) 0 / 2 + 1)
10
11 int
12 f_i16_i16 (int16_t x, int16_t y)
13 {
14 return x + MAGIC < y + MAGIC;
15 }
16
17 int
18 f_i16_i32 (int16_t x, int32_t y)
19 {
20 return x + MAGIC < y + MAGIC;
21 }
22
23 int
24 f_i32_i32 (int32_t x, int32_t y)
25 {
26 return x + MAGIC < y + MAGIC;
27 }
28
29 int
30 f_u32_i32 (uint32_t x, int32_t y)
31 {
32 return x + MAGIC < y + MAGIC;
33 }
34
35 int
36 f_u32_u32 (uint32_t x, uint32_t y)
37 {
38 return x + MAGIC < y + MAGIC;
39 }
40
41 int
42 f_i32_i32_sub (int32_t x, int32_t y)
43 {
44 return x - MAGIC < y - MAGIC;
45 }
46
47 /* The addition/subtraction of constants should be optimized away. */
48 /* { dg-final { scan-tree-dump-not " \\+ " "optimized"} } */
49 /* { dg-final { scan-tree-dump-not " \\- " "optimized"} } */