http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47892
--- Comment #5 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-02-25 10:37:40 UTC --- PRE makes that better and we have <bb 4>: # i_39 = PHI <i_47(7), 0(3)> D.2691_6 = (long unsigned int) i_39; D.2692_7 = D.2691_6 * 4; D.2693_9 = arr_8(D) + D.2692_7; or_10 = MEM[(float *)D.2693_9]; if (or_10 > 5.2359879016876220703125e-1) goto <bb 5>; else goto <bb 6>; <bb 5>: orig_14 = or_10 * 3.333333432674407958984375e-1; sqr_15 = __builtin_powf (orig_14, 2.0e+0); D.2699_19 = sqr_15 * 2.742018523349543102085590362548828125e-6; D.2700_20 = D.2699_19 + -1.98410343728028237819671630859375e-4; D.2701_21 = D.2700_20 * sqr_15; D.2702_22 = D.2701_21 + 8.333332836627960205078125e-3; D.2703_23 = D.2702_22 * sqr_15; D.2704_24 = D.2703_23 + -1.6666667163372039794921875e-1; D.2705_25 = D.2704_24 * sqr_15; D.2706_26 = D.2705_25 + 1.0e+0; D.2707_27 = D.2706_26 * orig_14; D.2731_72 = __builtin_powf (D.2707_27, 2.0e+0); pretmp.11_75 = D.2731_72 * 4.0e+0; pretmp.11_77 = 2.0e+0 - pretmp.11_75; pretmp.11_81 = pretmp.11_77 + 1.0e+0; pretmp.11_83 = D.2707_27 * pretmp.11_81; <bb 6>: # prephitmp.12_84 = PHI <pretmp.11_83(5), 0.0(4)> MEM[(float *)D.2693_9] = prephitmp.12_84; i_47 = i_39 + 1; if (len_5(D) > i_47) goto <bb 7>; else goto <bb 8>; if-conversion does not handle sqr_15 = __builtin_powf (orig_14, 2.0e+0); which we produce as canonicalization of x * x with -funsafe-math-optimizations.