https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61139
--- Comment #5 from rguenther at suse dot de <rguenther at suse dot de> --- On Thu, 10 Dec 2015, kugan at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61139 > > kugan at gcc dot gnu.org changed: > > What |Removed |Added > ---------------------------------------------------------------------------- > Status|RESOLVED |NEW > Resolution|DUPLICATE |--- > > --- Comment #4 from kugan at gcc dot gnu.org --- > After handling float, still seeing difference in asm. diff of .199t.resx now > looks: > > -;; Function void mirror(float&, float) (_Z6mirrorRff, funcdef_no=0, > decl_uid=2704, cgraph_uid=0, symbol_order=0) > +;; Function void mirror(float&, float) (_Z6mirrorRff, funcdef_no=0, > decl_uid=2472, cgraph_uid=0, symbol_order=0) > > void mirror(float&, float) (float & x, float w) > { > float _3; > float _6; > - float reassocmul_9; > + float _8; > > <bb 2>: > _3 = *x_2(D); > - reassocmul_9 = w_4(D) * 2.0e+0; > - _6 = reassocmul_9 - _3; > + _8 = -_3; > + _6 = w_4(D) * 2.0e+0 + _8; > *x_2(D) = _6; > return; > > @@ -18,18 +18,18 @@ > > > > -;; Function void mirror2(float&, float) (_Z7mirror2Rff, funcdef_no=1, > decl_uid=2708, cgraph_uid=1, symbol_order=1) > +;; Function void mirror2(float&, float) (_Z7mirror2Rff, funcdef_no=1, > decl_uid=2476, cgraph_uid=1, symbol_order=1) > > void mirror2(float&, float) (float & x, float w) > { > - float _2; > float _5; > float _6; > + float _8; > > <bb 2>: > - _2 = w_1(D) * 2.0e+0; > _5 = *x_4(D); > - _6 = _2 - _5; > + _8 = -_5; > + _6 = w_1(D) * 2.0e+0 + _8; > *x_4(D) = _6; > return; But the GIMPLE looks good to me - should use fmsub.