------- Comment #9 from rguenth at gcc dot gnu dot org 2010-01-30 16:06 ------- (In reply to comment #6) > The interesting thing is that the empty loop is not removed by > the control-dependent DCE pass that follows the 2nd VRP. > > This happens because > > > <bb 3>: > if (obj_7(D) != 0B) > goto <bb 5>; > else > goto <bb 4>; > > <bb 4>: > # i_36 = PHI <0(3)> > > <bb 10>: > # i_25 = PHI <i_36(4), i_35(12)> > i_35 = i_25 + 1; > if (i_35 != num_6(D)) > goto <bb 12>; > else > goto <bb 8>; > > <bb 12>: > goto <bb 10>; > > ... > > <bb 7>: > Invalid sum of incoming frequencies 6888, should be 7735 > # s_2 = PHI <s_19(6), s_23(11)> > i_20 = i_18 + 1; > if (i_20 != num_6(D)) > goto <bb 13>; > else > goto <bb 8>; > > ... > > <bb 8>: > # s_3 = PHI <s_2(7), 0(10)> > > > the PHI node defining s_3 marks the controlling statement necessary > which in turn marks the loop necessary. Now the question is if this > is an inherent limitation of CD-DCE or if the controlling stmt > should be that in BB3 instead (the immediate common dominator of > bb7 and bb10 is bb3). Steven? You implemented that CD-DCE stuff?
-> PR42906 -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42720