------- Comment #5 from jakub at gcc dot gnu dot org  2007-07-03 14:18 -------
The *.pre dump is clearly wrong:
  pretmp.53_53 = *order_p_25(D);

<bb 7>:
  # prephitmp.45_125 = PHI <storetmp.41_94(20), storetmp.41_92(21)>
...
  D.1445_69 = pretmp.53_53;
  storetmp.41_92 = D.1445_69;
  *order_p_25(D) = D.1445_69;
  i_71 = i_2 + 1;
  if (i_2 == D.1401_27)
    goto <bb 11>;
  else
    goto <bb 21>;

<bb 21>:
  goto <bb 7>;

i.e. *order_p won't ever change in the loop.
Before *.pre it was changes correctly:
...
<bb 7>:
  # i_2 = PHI <1(20), i_71(21)>
  D.1421_29 = *order_p_25(D);
...
  D.1439_48 = (*D.1423_32)[D.1438_47];
  D.1440_49 = D.1421_29 + D.1439_48;
  D.1441_64 = D.1435_44 * 2;
  D.1442_65 = D.1441_64 + D.1437_46;
  D.1443_67 = D.1442_65 + D.1434_43;
  D.1444_68 = (*D.1423_32)[D.1443_67];
  D.1445_69 = D.1440_49 - D.1444_68;
  *order_p_25(D) = D.1445_69;
  i_71 = i_2 + 1;
  if (i_2 == D.1401_27)
    goto <bb 11>;
  else
    goto <bb 21>;

<bb 21>:
  goto <bb 7>;


-- 


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

Reply via email to