This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fix errno math builtins WRT -Os

another minor CSiBE regression comes from fact that we no longer expand
sqrt(var) as sqrtss by default. Instead we do
 res = sqrt(var)
 if (res == NaN)
   fsqrt (var)
this is to set errno.  This is always a loss when optimizing for size.
Fixed thus.

Regtested/bootstrapped x86_64-linux, will commit it later today.


	* builtins.c (expand_builtin_mathfn, expand_builtin_mathfn_2):
	When optimizing for size, do not expand variants with errno
Index: builtins.c
--- builtins.c	(revision 166864)
+++ builtins.c	(working copy)
@@ -2039,7 +2039,8 @@ expand_builtin_mathfn (tree exp, rtx tar
     errno_set = false;
   /* Before working hard, check whether the instruction is available.  */
-  if (optab_handler (builtin_optab, mode) != CODE_FOR_nothing)
+  if (optab_handler (builtin_optab, mode) != CODE_FOR_nothing
+      && (!errno_set || !optimize_insn_for_size_p ()))
       target = gen_reg_rtx (mode);
@@ -2149,6 +2150,9 @@ expand_builtin_mathfn_2 (tree exp, rtx t
   if (! flag_errno_math || ! HONOR_NANS (mode))
     errno_set = false;
+  if (errno_set && optimize_insn_for_size_p ())
+    return 0;
   /* Always stabilize the argument list.  */
   CALL_EXPR_ARG (exp, 0) = arg0 = builtin_save_expr (arg0);
   CALL_EXPR_ARG (exp, 1) = arg1 = builtin_save_expr (arg1);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]