http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54634



--- Comment #4 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-09-20 
12:26:53 UTC ---

We split



  <bb 89>:

  # s2_207 = PHI <0.0(88), s2_524(91)>

  # prephitmp_1456 = PHI <0(88), k.76_530(91)>

  _496 = prephitmp_1456 * -2;

  _1535 = lx_355 + _496;

  D.3330 = _1535;

  _1533 = binomial (&j, &k);

  _517 = binomial (&ma, &D.3330);

  _518 = _1533 * _517;

  _520 = _518 * 0.0;

  s2_524 = _520 + s2_207;

  D.3330 ={v} {CLOBBER};

  k.76_530 = prephitmp_1456 + 1;

  k = k.76_530;

  if (j.72_383 == prephitmp_1456)

    goto <bb 90>;

  else

    goto <bb 91>;



into bogus pieces:



  <bb 204>:

  # prephitmp_1664 = PHI <k.76_1674(205), 0(88)>

  _1665 = prephitmp_1664 * -2;

  _1666 = lx_355 + _1665;

  D.3330 = _1666;

  D.3330 ={v} {CLOBBER};

  k.76_1674 = prephitmp_1664 + 1;

  if (j.72_383 == prephitmp_1664)

    goto <bb 206>;

  else

    goto <bb 205>;



split for the store D.3330 (huh, well ...), but somehow lost the

binomial call here.



  <bb 207>:

  # prephitmp_1678 = PHI <k.76_1688(208), 0(206)>

  k.76_1688 = prephitmp_1678 + 1;

  k = k.76_1688;

  if (j.72_383 == prephitmp_1678)

    goto <bb 209>;

  else

    goto <bb 208>;



well ... likewise.



  <bb 89>:

  # s2_207 = PHI <0.0(209), s2_524(91)>

  # prephitmp_1456 = PHI <0(209), k.76_530(91)>

  _1533 = binomial (&j, &k);

  _517 = binomial (&ma, &D.3330);

  _518 = _1533 * _517;

  _520 = _518 * 0.0;

  s2_524 = _520 + s2_207;

  k.76_530 = prephitmp_1456 + 1;

  if (j.72_383 == prephitmp_1456)

    goto <bb 90>;

  else

    goto <bb 91>;



finally all the calls.  Investigating some more.



Ah, binomial () is pure.  The RDG is bogus, it does not consider

calls that merely read unknown memory.  That is because

get_references_in_stmt handles calls by returning true/false only ...

in this case it doesn't add any data references.



So it's a very old problem that bites us now.



*sigh*

Reply via email to