------- 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