------- Comment #1 from rguenth at gcc dot gnu dot org 2007-11-21 23:02 ------- If you look at what SCCVN does for the affected SCC then you see that iteration converges to
Setting value number of dest_7 to dest_7 Setting value number of list_23 to list_23 Value numbering destptr_3 stmt = destptr_3 = PHI <dest_7(4), destptr_12(5)> Setting value number of destptr_3 to destptr_3 Value numbering destptr.3_13 stmt = destptr.3_13 = (int) destptr_3; Setting value number of destptr.3_13 to destptr.3_13 Value numbering dest.4_14 stmt = dest.4_14 = (int) dest_7; Setting value number of dest.4_14 to destptr.3_13 Value numbering D.1217_15 stmt = D.1217_15 = destptr.3_13 - dest.4_14; RHS destptr.3_13 - dest.4_14 simplified to 0 has constants 1 ... that is, destptr.3_13 == dest.4_14 -- but, in the final run with the correct table in place we get Setting value number of dest_7 to dest_7 Setting value number of list_23 to list_23 Value numbering destptr_3 stmt = destptr_3 = PHI <dest_7(4), destptr_12(5)> Setting value number of destptr_3 to destptr_3 Value numbering destptr.3_13 stmt = destptr.3_13 = (int) destptr_3; Setting value number of destptr.3_13 to destptr.3_13 Value numbering dest.4_14 stmt = dest.4_14 = (int) dest_7; Setting value number of dest.4_14 to dest.4_14 Value numbering D.1217_15 stmt = D.1217_15 = destptr.3_13 - dest.4_14; Setting value number of D.1217_15 to D.1217_15 increasing the number of iterations doesn't "fix" it. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34176