This is the mail archive of the gcc-bugs@gcc.gnu.org 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]

[Bug middle-end/19953] Special-case real + complex arithmetic operation (-ffast-math)


------- Additional Comments From pinskia at gcc dot gnu dot org  2005-02-28 21:36 -------
For me I get:
  D.1542 = COMPLEX_EXPR <REALPART_EXPR <b> / SR.4, IMAGPART_EXPR <b> / SR.4>;
  D.1541 = D.1542;
  D.1500 = D.1541;
  return (double) REALPART_EXPR <D.1500> + (double) IMAGPART_EXPR <D.1500> < 0.0;

The only problem with this is we don't do SRA or complex propagation so we don't do have just the real 
and imag parts seperated. 

Are you sure that you are doing the correct thing?

Without -fno-cx-limited-range I get:
  SR.4 = a;
  D.1529 = __builtin_powf (SR.4, 2.0e+0);
  return (double) (SR.4 * REALPART_EXPR <b> / D.1529) + (double) (SR.4 * IMAGPART_EXPR <b> / 
D.1529) < 0.0;

Now without -std=c99 -fno-cx-limited-range and -ffast-math, I get what you got there is one thing 
which can be optimizated out at the tree level but that would be PR 20139.
Now -ffast-math I get:
  SR.4 = a;
  D.1612 = __builtin_powf (SR.4, 2.0e+0);
  return (double) (SR.4 * REALPART_EXPR <b> / D.1612) + (double) (SR.4 * IMAGPART_EXPR <b> / 
D.1612) < 0.0;

these all look fine to me.

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19953


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