------- 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