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

--- Comment #4 from chenglulu <chenglulu at loongson dot cn> ---
(In reply to Jakub Jelinek from comment #3)
> Ah, that seems like a bug in the recip pass.
> Before that we have
>   # RANGE [frange] float [1.0e+0 (0x0.8p+1), 4.294967296e+9 (0x0.8p+33)]
>   _4 = (float) _3;
>   # RANGE [frange] float [1.0e+0 (0x0.8p+1), 6.5536e+4 (0x0.8p+17)]
>   _5 = sqrtf (_4);
>   # RANGE [frange] float [7.62939453125e-6 (0x0.8p-16), 5.0e-1 (0x0.8p+0)]
>   _6 = 5.0e-1 / _5;
> which is I think correct, 1.0 + unsigned int is [1.0, 0x1.p+32] and its
> square root is [1.0, 0x1.p+16].
> But the recip pass reuses SSA_NAMEs (generally a bad idea) and keeps the
> ranges, so

I also think this is a bad idea.

Reply via email to