OSDN Git Service

* gcc.dg/torture/builtin-math-2.c: Add checks for asin, acos,
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / torture / builtin-math-2.c
1 /* Copyright (C) 2006  Free Software Foundation.
2
3    Test things that should block GCC from optimizing compile-time
4    constants passed to a builtin transcendental function.
5
6    Origin: Kaveh R. Ghazi,  October 22, 2006.  */
7
8 /* { dg-do compile } */
9 /* { dg-options "-fdump-tree-original" } */
10
11 extern void foof (float);
12 extern void foo (double);
13 extern void fool (long double);
14
15 void bar()
16 {
17   /* An argument of NaN is not evaluated at compile-time.  */
18   foof (__builtin_exp2f (__builtin_nanf("")));
19   foo (__builtin_exp2 (__builtin_nan("")));
20   fool (__builtin_exp2l (__builtin_nanl("")));
21
22   /* An argument of Inf/-Inf is not evaluated at compile-time.  */
23   foof (__builtin_exp2f (__builtin_inff()));
24   foo (__builtin_exp2 (__builtin_inf()));
25   fool (__builtin_exp2l (__builtin_infl()));
26   foof (__builtin_exp2f (-__builtin_inff()));
27   foo (__builtin_exp2 (-__builtin_inf()));
28   fool (__builtin_exp2l (-__builtin_infl()));
29
30   /* Result overflows MPFR, which in version 2.2.x has 30 exponent bits.  */
31   foof (__builtin_exp2f (0x1p50F));
32   foo (__builtin_exp2 (0x1p50));
33   fool (__builtin_exp2l (0x1p50L));
34   /* Result underflows MPFR, which in version 2.2.x has 30 exponent bits.  */
35   foof (__builtin_exp2f (-0x1p50F));
36   foo (__builtin_exp2 (-0x1p50));
37   fool (__builtin_exp2l (-0x1p50L));
38
39   /* Result overflows GCC's REAL_VALUE_TYPE, which has 26 exponent bits.  */
40   foof (__builtin_exp2f (0x1p28F));
41   foo (__builtin_exp2 (0x1p28));
42   fool (__builtin_exp2l (0x1p28L));
43   /* Result underflows GCC's REAL_VALUE_TYPE, which has 26 exponent bits.  */
44   foof (__builtin_exp2f (-0x1p28F));
45   foo (__builtin_exp2 (-0x1p28));
46   fool (__builtin_exp2l (-0x1p28L));
47
48   /* Result overflows (even an extended) C double's mode.  */
49   foof (__builtin_exp2f (0x1p24F));
50   foo (__builtin_exp2 (0x1p24));
51   fool (__builtin_exp2l (0x1p24L));
52   /* Result underflows (even an extended) C double's mode.  */
53   foof (__builtin_exp2f (-0x1p24F));
54   foo (__builtin_exp2 (-0x1p24));
55   fool (__builtin_exp2l (-0x1p24L));
56
57   /* Ensure that normal arguments/results are folded.  */
58   foof (__builtin_exp2f (1.5F));
59   foo (__builtin_exp2 (1.5));
60   fool (__builtin_exp2l (1.5L));
61   foof (__builtin_exp2f (-1.5F));
62   foo (__builtin_exp2 (-1.5));
63   fool (__builtin_exp2l (-1.5L));
64
65   /* The asin arg must be [-1 ... 1] inclusive.  */
66   foof (__builtin_asinf (-1.5F));
67   foof (__builtin_asinf (1.5F));
68   foo (__builtin_asin (-1.5));
69   foo (__builtin_asin (1.5));
70   fool (__builtin_asinl (-1.5L));
71   fool (__builtin_asinl (1.5L));
72
73   /* The acos arg must be [-1 ... 1] inclusive.  */
74   foof (__builtin_acosf (-1.5F));
75   foof (__builtin_acosf (1.5F));
76   foo (__builtin_acos (-1.5));
77   foo (__builtin_acos (1.5));
78   fool (__builtin_acosl (-1.5L));
79   fool (__builtin_acosl (1.5L));
80
81   /* The acosh arg must be [1 ... Inf] inclusive.  */
82   foof (__builtin_acoshf (0.5F));
83   foo (__builtin_acosh (0.5));
84   fool (__builtin_acoshl (0.5L));
85
86   /* The atanh arg must be [-1 ... 1] exclusive.  */
87   foof (__builtin_atanhf (-1.0F));
88   foof (__builtin_atanhf (1.0F));
89   foo (__builtin_atanh (-1.0));
90   foo (__builtin_atanh (1.0));
91   fool (__builtin_atanhl (-1.0L));
92   fool (__builtin_atanhl (1.0L));
93 }
94
95 /* { dg-final { scan-tree-dump-times "exp2 " 9 "original" } } */
96 /* { dg-final { scan-tree-dump-times "exp2f" 9 "original" } } */
97 /* { dg-final { scan-tree-dump-times "exp2l" 9 "original" } } */
98 /* { dg-final { scan-tree-dump-times "asin " 2 "original" } } */
99 /* { dg-final { scan-tree-dump-times "asinf" 2 "original" } } */
100 /* { dg-final { scan-tree-dump-times "asinl" 2 "original" } } */
101 /* { dg-final { scan-tree-dump-times "acos " 2 "original" } } */
102 /* { dg-final { scan-tree-dump-times "acosf" 2 "original" } } */
103 /* { dg-final { scan-tree-dump-times "acosl" 2 "original" } } */
104 /* { dg-final { scan-tree-dump-times "acosh " 1 "original" } } */
105 /* { dg-final { scan-tree-dump-times "acoshf" 1 "original" } } */
106 /* { dg-final { scan-tree-dump-times "acoshl" 1 "original" } } */
107 /* { dg-final { scan-tree-dump-times "atanh " 2 "original" } } */
108 /* { dg-final { scan-tree-dump-times "atanhf" 2 "original" } } */
109 /* { dg-final { scan-tree-dump-times "atanhl" 2 "original" } } */
110 /* { dg-final { cleanup-tree-dump "original" } } */