Commit 4fc78423 by Kaveh R. Ghazi Committed by Kaveh Ghazi

re PR middle-end/29335 (transcendental functions with constant arguments should…

re PR middle-end/29335 (transcendental functions with constant arguments should be resolved at compile-time)

	PR middle-end/29335
	* builtins.c (fold_builtin_sqrt): Use MPFR for constant args.

testsuite:
	* gcc.dg/torture/builtin-math-2.c: Add sqrt cases.
	* gcc.dg/torture/builtin-math-3.c: Likewise.

From-SVN: r121423
parent 677cc14d
2007-01-31 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
PR middle-end/29335
* builtins.c (fold_builtin_sqrt): Use MPFR for constant args.
2007-01-31 Zdenek Dvorak <dvorakz@suse.cz>
* cfgloop.h: Include vec-prim.h.
......
......@@ -7200,21 +7200,14 @@ fold_builtin_sqrt (tree arglist, tree type)
enum built_in_function fcode;
tree arg = TREE_VALUE (arglist);
tree res;
if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
return NULL_TREE;
/* Optimize sqrt of constant value. */
if (TREE_CODE (arg) == REAL_CST
&& !TREE_OVERFLOW (arg))
{
REAL_VALUE_TYPE r, x;
x = TREE_REAL_CST (arg);
if (real_sqrt (&r, TYPE_MODE (type), &x)
|| (!flag_trapping_math && !flag_errno_math))
return build_real (type, r);
}
/* Calculate the result when the argument is a constant. */
if ((res = do_mpfr_arg1 (arg, type, mpfr_sqrt, &dconst0, NULL, true)))
return res;
/* Optimize sqrt(expN(x)) = expN(x*0.5). */
fcode = builtin_mathfn_code (arg);
......
2007-01-31 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcc.dg/torture/builtin-math-2.c: Add sqrt cases.
* gcc.dg/torture/builtin-math-3.c: Likewise.
2007-01-31 Dirk Mueller <dmueller@suse.de>
gcc.dg/Wparentheses-2.c: Update and add new tests.
......@@ -145,6 +145,11 @@ void bar()
fool (__builtin_fmal (__LDBL_MAX__, __LDBL_MAX__, 0.0L));
fool (__builtin_fmal (__LDBL_MAX__, 1.0L, __LDBL_MAX__));
fool (__builtin_fmal (__LDBL_MIN__, __LDBL_MIN__, 0.0L));
/* The sqrt arg must be [0 ... Inf] inclusive. */
TESTIT (sqrt, -0.5);
TESTIT (sqrt, -0.0);
TESTIT (sqrt, 0.0);
}
/* { dg-final { scan-tree-dump-times "exp2 " 9 "original" } } */
......@@ -183,4 +188,7 @@ void bar()
/* { dg-final { scan-tree-dump-times "fma " 3 "original" } } */
/* { dg-final { scan-tree-dump-times "fmaf" 3 "original" } } */
/* { dg-final { scan-tree-dump-times "fmal" 3 "original" } } */
/* { dg-final { scan-tree-dump-times "sqrt " 1 "original" } } */
/* { dg-final { scan-tree-dump-times "sqrtf" 1 "original" } } */
/* { dg-final { scan-tree-dump-times "sqrtl" 1 "original" } } */
/* { dg-final { cleanup-tree-dump "original" } } */
......@@ -363,5 +363,12 @@ int main (void)
if (__builtin_fmal(0.5L,__LDBL_MIN__, __LDBL_MIN__) != __LDBL_MIN__*1.5L)
link_error (__LINE__);
TESTIT (sqrt, -0.0, -0.0); /* sqrt(-0) == -0 */
TESTIT (sqrt, 0.0, 0.0); /* sqrt(0) == 0 */
TESTIT (sqrt, 1.0, 1.0); /* sqrt(1) == 1 */
TESTIT (sqrt, 4.0, 2.0); /* sqrt(4) == 2 */
TESTIT_R (sqrt, 1.5, 1.22, 1.23); /* sqrt(1.5) == 1.224... */
TESTIT_R (sqrt, 2.0, 1.41, 1.42); /* sqrt(2) == 1.414... */
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment