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]

[PATCH] Always expand pow(x,2.0) as x*x

Many thanks to Richard Guenther for pointing out that we weren't
expanding pow(x,2.0) as x*x without -ffast-math.  The issue/mismatch
is that although expand_builtin_pow contains code that checks for
flag_unsafe_math_optimizations and inlines exponents -1, 0, 1, and 2
even when it isn't set, that function doesn't get called if the
flag_unsafe_math_optimizations flag isn't set.  Doh!

The following patch simply shuffles around the code such that we
always call expand_builtin_pow, but that function then doesn't
call expand_builtin_mathfn2 unless its considered safe to do so.

The following patch has been tested on i686-pc-linux-gnu with a
full "make bootstrap", all languages except treelang, and regression
tested with a top-level "make -k check" with no new failures.

Ok for mainline?

2004-01-31  Roger Sayle  <>

	* builtins.c (expand_builtin_pow): If flag_unsafe_math_optimizations
	isn't set, don't call expand_builtin_mathfn_2 to use the pow optab.
	(expand_builtin): Always call expand_builtin_pow.

Index: builtins.c
RCS file: /cvs/gcc/gcc/gcc/builtins.c,v
retrieving revision 1.278
diff -c -3 -p -r1.278 builtins.c
*** builtins.c	23 Jan 2004 16:16:33 -0000	1.278
--- builtins.c	1 Feb 2004 00:20:56 -0000
*************** expand_builtin_pow (tree exp, rtx target
*** 2139,2145 ****
!   return expand_builtin_mathfn_2 (exp, target, NULL_RTX);

  /* Expand expression EXP which is a call to the strlen builtin.  Return 0
--- 2139,2148 ----
!   if (! flag_unsafe_math_optimizations)
!     return NULL_RTX;
!   return expand_builtin_mathfn_2 (exp, target, subtarget);

  /* Expand expression EXP which is a call to the strlen builtin.  Return 0
*************** expand_builtin (tree exp, rtx target, rt
*** 5069,5076 ****
      case BUILT_IN_POW:
      case BUILT_IN_POWF:
      case BUILT_IN_POWL:
-       if (! flag_unsafe_math_optimizations)
- 	break;
        target = expand_builtin_pow (exp, target, subtarget);
        if (target)
  	return target;
--- 5072,5077 ----

Roger Sayle,                         E-mail:
OpenEye Scientific Software,         WWW:
Suite 1107, 3600 Cerrillos Road,     Tel: (+1) 505-473-7385
Santa Fe, New Mexico, 87507.         Fax: (+1) 505-473-0833

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