https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121522
--- Comment #3 from Filip Kastl <pheeck at gcc dot gnu.org> --- >From the transformations that sccopy1 does, this one causes the problem: ;; Function main (main, funcdef_no=3, decl_uid=2989, cgraph_uid=5, symbol_order=4) +Replacing SCC of size 3 int main () { int r; @@ -245,20 +246,19 @@ <bb 3> : # l_27 = PHI <8(2), o_29(5)> # o_28 = PHI <0(2), o_29(5)> - # .MEM_32 = PHI <.MEM_42(D)(2), .MEM_33(5)> v: _2 = 1 / l_27; r_43 = _2 + -805306366; - # VUSE <.MEM_32> + # VUSE <.MEM_42(D)> _4 = j (-3, 30, -4, -4, -4, -4, -4, 32, -4); _5 = _4 + -445113689; _6 = _5 - r_43; - # VUSE <.MEM_32> + # VUSE <.MEM_42(D)> _7 = j (-2, 23, -3, -3, -3, -3, -3, 22, -3); _8 = _7 + -1062535215; _9 = _8 * 2147483647; _10 = _6 + _9; - # VUSE <.MEM_32> + # VUSE <.MEM_42(D)> _11 = j (-1, 1, -2, -2, -2, -2, -2, 1, -2); _12 = _11 + -950633090; _13 = _12 * -1342177282; @@ -275,14 +275,12 @@ <bb 5> : # o_29 = PHI <o_28(3), o_51(7)> - # .MEM_33 = PHI <.MEM_32(3), .MEM_34(7)> // predicted unlikely by goto predictor. goto <bb 3>; [INV] <bb 6> : # o_30 = PHI <o_28(4), o_51(7)> # r_31 = PHI <r_43(4), r_48(7)> - # .MEM_34 = PHI <.MEM_32(4), .MEM_34(7)> w: r_48 = r_31 + 536870911; _24 = _7 + -1062535222; @@ -303,7 +301,7 @@ goto <bb 6>; [INV] <bb 8> : - # VUSE <.MEM_34> + # VUSE <.MEM_42(D)> return 0; } All the removed PHIs (.MEM_32, .MEM_33, .MEM_34) just reference each other. That's the situation the pass was made for. For normal PHIs, this cleanup is ok. Is it not ok for memory PHIs?