/* { dg-do compile } */ /* { dg-options "-O2 -fdump-tree-optimized" } */ typedef __INT16_TYPE__ int16_t; typedef __INT32_TYPE__ int32_t; typedef __UINT16_TYPE__ uint16_t; typedef __UINT32_TYPE__ uint32_t; #define MAGIC (~ (uint32_t) 0 / 2 + 1) int f_i16_i16 (int16_t x, int16_t y) { return x + MAGIC < y + MAGIC; } int f_i16_i32 (int16_t x, int32_t y) { return x + MAGIC < y + MAGIC; } int f_i32_i32 (int32_t x, int32_t y) { return x + MAGIC < y + MAGIC; } int f_u32_i32 (uint32_t x, int32_t y) { return x + MAGIC < y + MAGIC; } int f_u32_u32 (uint32_t x, uint32_t y) { return x + MAGIC < y + MAGIC; } int f_i32_i32_sub (int32_t x, int32_t y) { return x - MAGIC < y - MAGIC; } /* The addition/subtraction of constants should be optimized away. */ /* { dg-final { scan-tree-dump-not " \\+ " "optimized"} } */ /* { dg-final { scan-tree-dump-not " \\- " "optimized"} } */