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

--- Comment #4 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-03-23 
10:19:53 UTC ---
Created attachment 26966
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26966
patch

No, in fact, generating the _prologue_ loop adjusts the original PHI node from

  openad_symbol_188_2 = PHI <0(2), openad_symbol_188_42(4)>

to

  openad_symbol_188_2 = PHI <openad_symbol_188_105(17),
openad_symbol_188_42(4)>

and we _do_ analyze that original loop PHI.  But now fail to.

One solution would be to delay peeling for the prologue loop after we peeled
the epilogue loop - but that has quite some fallout.  Another solution would
be to save the scalar evolution result, but we explicitely free it after
the first peeling (because obviously while the evolution part of
openad_symbol_188_2 is still correct, it's initial value is not).

So the correct thing seems to be to preserve the evolution part and simply
take the initial value from the PHI operand.

Reply via email to