------- Comment #6 from rguenther at suse dot de 2007-11-22 09:35 ------- Subject: Re: [4.3 Regression] SCCVN breaks gettext
On Thu, 22 Nov 2007, dberlin at dberlin dot org wrote: > ------- Comment #4 from dberlin at gcc dot gnu dot org 2007-11-22 04:48 > ------- > Subject: Re: [4.3 Regression] SCCVN breaks gettext > > The real problem seems to me, at least unless you guys haven't pasted > that part of the trace, that nitems_19 isn't part of the SCC but > should be. By the time iteration of the SCC finishes, we should have > discovered that nitems_19 does not have the value 0. The SCC looks complete. The IL before FRE is <bb 2>: <bb 3>: # nitems_21 = PHI <0(2), nitems_20(9)> <bb 4>: # nitems_1 = PHI <nitems_21(3), nitems_1(4)> D.1574_5 = hash_find_entry (&list); if (D.1574_5 == 0) goto <bb 5>; else goto <bb 4>; <bb 5>: list.0_6 = list; D.1576_7 = *list.0_6; len2_8 = (size_t) D.1576_7; new_max_9 = nitems_1 + len2_8; if (new_max_9 != len2_8) goto <bb 10>; else goto <bb 6>; <bb 6>: dest_10 = foo (new_max_9); goto <bb 8>; <bb 7>: destptr_15 = destptr_3 + 8; <bb 8>: # destptr_3 = PHI <dest_10(6), destptr_15(7)> # len2_2 = PHI <len2_8(6), len2_14(7)> len2_14 = len2_2 + 0x0ffffffffffffffff; if (len2_2 != 0) goto <bb 7>; else goto <bb 9>; <bb 9>: destptr.2_16 = (long int) destptr_3; dest.3_17 = (long int) dest_10; D.1581_18 = destptr.2_16 - dest.3_17; D.1582_19 = D.1581_18 /[ex] 8; nitems_20 = (size_t) D.1582_19; goto <bb 3>; <bb 10>: return 0; and the offending SCC contains: SCC consists of: nitems_21 nitems_1 new_max_9 dest_10 destptr_3 destptr.2_16 dest.3_17 D.1581_18 D.1582_19 nitems_20 destptr_15 where it goes wrong is in the 2nd iteration where it doesn't figure that destptr_3 != dest_10. Note that I also don't believe arbitrary wrong information in the optimistic table can ever lead to always correct information with a new table in just one iteration. Because in our case we set the value number of nitems_20 to zero (and thus the VN of nitems_21), so even with the correct tables we start (and thus never change) with nitems_21 == 0. Richard. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34176