------- Comment #21 from rguenther at suse dot de 2006-05-17 15:06 ------- Subject: Re: [4.1/4.2 regression] VRP miscompilation of simple loop
On Wed, 17 May 2006, rakdver at gcc dot gnu dot org wrote: > > > ------- Comment #14 from rakdver at gcc dot gnu dot org 2006-05-17 13:40 > ------- > (In reply to comment #12) > > Ok, the patch fixes this PR, but not PR26719. > > > > Index: tree-chrec.c > > =================================================================== > > --- tree-chrec.c (revision 113852) > > +++ tree-chrec.c (working copy) > > @@ -1150,7 +1150,7 @@ chrec_convert (tree type, tree chrec, tr > > 1, 2, ..., 127, -128, ... The result should not be > > {(schar)1, +, (schar)1}_x, but instead, we should keep the > > conversion: (schar) {(uchar)1, +, (uchar)1}_x. */ > > - if (scev_probably_wraps_p (type, base, step, at_stmt, loop, > > + if (scev_probably_wraps_p (ct, base, step, at_stmt, loop, > > &dummy, &dummy)) > > goto failed_to_convert; > > > > > > although I think the idea of the fix is OK, you must be more careful -- > scev_probably_wraps_p does computations with base and step in type, > so you cannot just pass another type to it. Currently we do that - base, step are of type ct (chrec_type (chrec)), while we pass type, which is signed(!) char here. I.e. scev_probably_wraps_p computes completely bogus values - the canonical type is ct, not type (I guess this was just a typo). > The problem with fold_convert is that currently it is a patch over patch; it > checks for overflows twice (once using scev_probably_wraps_p and once again > in convert_step_widening), but neither of the checks is exactly what is > needed. > I recall having this fixed once (perhaps on killloop branch), I will check > whether I can find the patch. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27639