------- Additional Comments From jakub at gcc dot gnu dot org  2005-02-16 16:58 
-------
Actually, I do see problems in the tree dumps already.
Particularly the trees look ok before LIM and are broken afterwards.
loopinit->lim pseudo diff:

 <L97>:;
   D.16409_250 = &this_125->D.11755._M_impl._M_start;
   __i_251 = D.16409_250;
   D.16417_252 = *__i_251;
   *D.16417_252 = 1;
   this_109 = this_125;
   D.16452_108 = this_109->D.11755._M_impl._M_finish;
   SR.568_107 = D.16452_108;
   D.16460_97 = this_109->D.11755._M_impl._M_start;
   SR.571_93 = D.16460_97;
   if (SR.571_93 == SR.568_107) goto <L142>; else goto <L143>;
 <L143>:;
-<L110>:;
   D.16491_352 = &this_125->D.11755._M_impl._M_finish;
   __i_353 = D.16491_352;
   SR.574_354 = *__i_353;
   D.16499_365 = SR.574_354 - 4B;
   D.16061_377 = *D.16499_365;
+<L110>:;
   if (D.16061_377 != 0) goto <L144>; else goto <L117>;
 <L144>:;
   goto <bb 27> (<L136>);
 <L117>:;
   D.16432_339 = this_125->D.11755._M_impl._M_finish;
   D.16433_340 = D.16432_339 - 4B;
   this_125->D.11755._M_impl._M_finish = D.16433_340;
   this_599 = this_125;
   D.16452_598 = this_599->D.11755._M_impl._M_finish;
   SR.568_596 = D.16452_598;
   D.16460_588 = this_599->D.11755._M_impl._M_start;
   SR.571_587 = D.16460_588;
   if (SR.571_587 == SR.568_596) goto <L145>; else goto <L146>;
 <L146>:;
   goto <bb 20> (<L110>);
 <L145>:;
   goto <bb 27> (<L136>);
 ...
 <L142>:;
 <L136>:;
   return <retval>;
*(*&this->D.11755._M_impl._M_finish - 4B) is hoisted before the loop as
invariant, although it is not (each iteration of the loop decreases
this->D.11755._M_impl._M_finish by 4 bytes).


-- 


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

Reply via email to