------- Comment #7 from rguenth at gcc dot gnu dot org 2008-10-18 12:43 ------- This is because the implementation of __muldc3 uses
return x + I * y; which if built with -O0 results in a call to __muldc3 ... because this is what complex lowering at -O0 produces: <bb 2>: D.1235 = COMPLEX_EXPR <x, 0.0>; D.1236 = COMPLEX_EXPR <y, 0.0>; D.1241 = REALPART_EXPR <D.1236>; D.1242 = IMAGPART_EXPR <D.1236>; D.1237 = __muldc3 (D.1241, D.1242, 0.0, 1.0e+0); D.1243 = REALPART_EXPR <D.1235>; D.1244 = IMAGPART_EXPR <D.1235>; D.1245 = REALPART_EXPR <D.1237>; D.1246 = IMAGPART_EXPR <D.1237>; D.1247 = D.1243 + D.1245; D.1248 = D.1244 + D.1246; D.1238 = COMPLEX_EXPR <D.1247, D.1248>; <retval> = D.1238; return <retval>; That said - you shouldn't build libgcc itself without optimization. Still I see a missed optimization in that we do not fold COMPLEX_EXPR <x, 0.0> + COMPLEX_EXPR <y, 0.0> * __complex__ (0.0, 1.0e+0); I thought I added this capability. And I did: /* Fold z * +-I to __complex__ (-+__imag z, +-__real z). This is not the same for NaNs or if signed zeros are involved. */ if (!HONOR_NANS (TYPE_MODE (TREE_TYPE (arg0))) && !HONOR_SIGNED_ZEROS (TYPE_MODE (TREE_TYPE (arg0))) && COMPLEX_FLOAT_TYPE_P (TREE_TYPE (arg0)) && TREE_CODE (arg1) == COMPLEX_CST && real_zerop (TREE_REALPART (arg1))) The question is whether the standard requires actual complex multiplication carried out for y * I, as it seems to allow an imaginary type used for I as well. A probably better writing of the return statement is CTYPE res; __real res = x; __imag res = y; return res; which should be valid, as the NaN cases are checked earlier. Joseph? -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jsm28 at gcc dot gnu dot org Severity|normal |enhancement Status|UNCONFIRMED |NEW Component|c |middle-end Ever Confirmed|0 |1 Keywords| |build, missed-optimization Last reconfirmed|0000-00-00 00:00:00 |2008-10-18 12:43:35 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37850