libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / tree-ssa / log_ident.c
blob80528beb723861a4011249b1d78950b868b78850
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -ffast-math" } */
3 /* { dg-require-effective-target c99_runtime } */
5 extern void link_error(void);
7 #define T(TYPE, C_TY, FNAME) \
8 void f_##FNAME##_1 (TYPE a) \
9 { \
10 TYPE t1 = 1.0##C_TY / a; \
11 TYPE t2 = __builtin_##FNAME (t1); \
12 TYPE t3 = __builtin_##FNAME (a); \
13 TYPE t4 = -t3; \
14 if (t2 != t4) \
15 link_error (); \
16 } \
17 void f_##FNAME##_2 (TYPE a) \
18 { \
19 TYPE t1 = 2.0##C_TY / a; \
20 TYPE t2 = __builtin_##FNAME (t1); \
21 TYPE t3 = __builtin_##FNAME (2.0); \
22 TYPE t4 = __builtin_##FNAME (a); \
23 TYPE t5 = t3 - t4; \
24 if (t2 != t5) \
25 link_error (); \
26 } \
27 void f_##FNAME##_3 (TYPE a, TYPE b) \
28 { \
29 TYPE t1 = __builtin_##FNAME (a); \
30 TYPE t2 = __builtin_##FNAME (b); \
31 TYPE t3 = t1 + t2; \
32 TYPE t4 = a * b; \
33 TYPE t5 = __builtin_##FNAME (t4); \
34 if (t3 != t5) \
35 link_error (); \
36 } \
37 void f_##FNAME##_4 (TYPE a, TYPE b) \
38 { \
39 TYPE t1 = __builtin_##FNAME (a); \
40 TYPE t2 = __builtin_##FNAME (b); \
41 TYPE t3 = t1 - t2; \
42 TYPE t4 = a / b; \
43 TYPE t5 = __builtin_##FNAME (t4); \
44 if (t3 != t5) \
45 link_error (); \
48 #define TEST_LOGS(TYPE, C_TY, F_TY) \
49 T (TYPE, C_TY, log##F_TY) \
50 T (TYPE, C_TY, log2##F_TY) \
51 T (TYPE, C_TY, log10##F_TY)
54 TEST_LOGS (double, , )
55 TEST_LOGS (float, f, f)
56 TEST_LOGS (long double, L, l)