https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90231

--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to bin cheng from comment #7)
> The orignal iv needs to be represented in debug bind stmt is:
>  64 IV struct:
>  65   SSA_NAME:     i_18
>  66   Type: int
>  67   Base: 0
>  68   Step: 1
>  69   Biv:  Y
>  70   Overflowness wrto loop niter: No-overflow
> 
> While the possible candidate is:
> 185 Candidate 8:
> 186   Var befor: ivtmp.11
> 187   Var after: ivtmp.11
> 188   Incr POS: before exit test
> 189   IV struct:
> 190     Type:       unsigned long
> 191     Base:       (unsigned long) dst_10(D)
> 192     Step:       4
> 193     Object:     (void *) dst_10(D)
> 194     Biv:        N
> 195     Overflowness wrto loop niter:       Overflow
> 
> Strictly speaking, with above information, we can't compute i_18 using
> ivtmp.11 correctly in all cases, because ivtmp.11 could overflow.  Of
> course, the overflow-ness in this case could be improved, thus solve the
> problem.  Or there is another method: we can do the computation anyway, it
> may give wrong value in some cases, but we are in debug stmt, value which is
> correct in most cases is better than optimized away, sensible?

Actually we do know that ivtmp.11 doesn't overflow.

Since we can express the use of i in dst[i] by the new IV we can express
i in terms of the new IV at the point of its original use as well, I see
no way the transform isn't bijective.  The complication here is just
that we have to undo the 'use in dst[i]' effect somehow, but for simple
cases or rewrite_use_* this should be doable.

And no, debug info that is sometimes incorrect isn't preferable to
<optimized out>.

> Thanks,
> bin

Reply via email to