[Bug c/47892] Fails to vectorize comparison code, if-conversion fails
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Feb 25 10:42:00 GMT 2011
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.
More information about the Gcc-bugs
mailing list