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

--- Comment #3 from rguenther at suse dot de <rguenther at suse dot de> 
2012-05-24 07:29:52 UTC ---
On Thu, 24 May 2012, jakub at gcc dot gnu.org wrote:

> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53465
> 
> Jakub Jelinek <jakub at gcc dot gnu.org> changed:
> 
>            What    |Removed                     |Added
> ----------------------------------------------------------------------------
>                  CC|                            |jakub at gcc dot gnu.org
> 
> --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-05-24 
> 07:21:28 UTC ---
> We have
>   x_9 = *D.1724_8;
> ...
>   x_16 = ASSERT_EXPR <x_9, x_9 != 0>;
>   D.1726_10 = found_x_2 != 0;
>   D.1727_11 = x_16 <= prev_x_3;
> ...
>   # found_x_2 = PHI <0(2), 1(6)>
>   # prev_x_3 = PHI <prev_x_4(D)(2), x_16(6)>
> ...
>   loop to top
> 
> prev_x_3: ~[0, 0]  EQUIVALENCES: { x_9 } (1 elements)
> prev_x_4(D): UNDEFINED
> x_9: VARYING
> x_16: ~[0, 0]  EQUIVALENCES: { x_9 } (1 elements)
> 
> I think the problem are the equivalences, or their handling.  When we merge on
> PHI UNDEFINED with ~[0, 0] EQUIVALENCES: { x_9 } into the latter, we push the
> equivalence into the next loop iteration where x_9 already can have a 
> different
> value.  I guess either we could drop all equivalences when merging UNDEFINED
> with some range with EQUIVALENCES, or at least those equivalences which don't
> dominate the PHI.  Richard, what do you think?

Yes, I think we need to clear all equivalences in vrp_meet

Reply via email to