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



--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> 2013-01-07 
13:50:03 UTC ---

Followup, because of PR55888.  We have



  <bb 11>:

  # c_21 = PHI <p_66(18), p_67(3)>

  # p_41 = PHI <p_66(18), p_67(3)>

  a.1_42 = a;

  goto <bb 5>;



  <bb 5>:

  # c_57 = PHI <c_1(16), c_21(11)>

  # a.1_63 = PHI <a.1_25(16), a.1_42(11)>

  # p_65 = PHI <p_30(16), p_41(11)>

  *c_57 = 0;



and when PHI-translating p_65 we end up with p_41 (or c_21 value-ized).  But

AVAIL_OUT of BB 11 is:



debug[0] := { c_12(D) (0014), p_32(D) (0027), g.0_11 (0013), c_21 (0033),

a.1_42 (0034) }



thus contains _only_ c_21 (well, exactly one expression per value - it is

a value set after all).  And clean via valid_in_sets does



    case NAME:

      return bitmap_set_contains_expr (AVAIL_OUT (block), expr);



thus checks for the expression availability.  That looks bogus to me.

Instead we should verify if there is a leader for the NAME in AVAIL_OUT.

Reply via email to