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.