------- Comment #7 from dberlin at gcc dot gnu dot org 2007-07-07 20:07 ------- Subject: Re: [4.3 regression]: revision 126369 went into an infinite loop
On 7 Jul 2007 19:35:01 -0000, hjl at lucon dot org <[EMAIL PROTECTED]> wrote: > > > ------- Comment #6 from hjl at lucon dot org 2007-07-07 19:35 ------- > If I revert > > - if (lhsval) > + if (lhsval && vuse_equiv (lhsval, stmt)) > > the regression is gone. I suspected that the original code: > > if (lhsval) > { > set_value_handle (newt, lhsval); > if (!is_gimple_min_invariant (lhsval)) > add_to_value (lhsval, newt); > } > else > { > tree val = vn_lookup_or_add_with_stmt (newt, stmt); > vn_add (lhs, val); > } > > doesnt't handle the case of > > if (lhsval && !vuse_equiv (lhsval, stmt)) > Uh, as it shouldn't. > If I change it to > > --- tree-ssa-pre.c.bad 2007-07-07 08:18:31.000000000 -0700 > +++ tree-ssa-pre.c 2007-07-07 12:33:51.000000000 -0700 > @@ -3362,7 +3362,8 @@ make_values_for_stmt (tree stmt, basic_b > else > { > tree val = vn_lookup_or_add_with_stmt (newt, stmt); > - vn_add (lhs, val); > + if (!lhsval) > + vn_add (lhs, val); > } > > add_to_exp_gen (block, newt); > > my testcase works. Only because you are now assigning different value numbers to things we know to be the same. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32663