[PATCH] Constant folding for cabs and fabs (take 2)

Richard Henderson rth@redhat.com
Fri Jun 6 05:10:00 GMT 2003


> 	* fold-const.c (fold <ABS_EXPR>):  Re-fold the result of folding
> 	fabs(-x) into fabs(x).  Use tree_expr_nonnegative_p to determine
> 	when the ABS_EXPR (fabs or abs) is not required.
>   	(tree_expr_nonnegative_p): Move the logic that sqrt and exp are
> 	always nonnegative from fold to here.  Additionally, cabs and fabs
> 	are always non-negative, and pow and atan are non-negative if
> 	their first argument is non-negative.
> 
> 	* builtins.c (fold_builtin_cabs): New function to fold cabs{,f,l}.
> 	Evaluate cabs of a constant at compile-time.  Convert cabs of a
> 	non-complex argument into fabs.  Convert cabs(z) into
> 	sqrt(z.r*z.r + z.i*z.i) at the tree-level with -ffast-math or
> 	-funsafe-math-optimizations or -ffast-math.
> 	(fold_builtin): Convert BUILT_IN_FABS{,F,L} into an ABS_EXPR.
> 	Fold BUILT_IN_CABS{,F,L} using fold_builtin_cabs.
> 
> 	* gcc.dg/builtins-2.c: Add some more tests.
> 	* gcc.dg/builtins-18.c: New test case.
> 	* gcc.dg/builtins-19.c: New test case.

Ok.


r~



More information about the Gcc-patches mailing list