------- Additional Comments From rakdver at atrey dot karlin dot mff dot cuni
dot cz 2005-05-22 22:31 -------
Subject: Re: missed optimization due with const function and pulling out of
loops
> > Anyway, moving possibly non-executed const function may cause also
> > other problems. Consider
> >
> > int my_fancy_divide(int x, int z) attribute(const)
> > {
> > return x / z;
> > }
> >
> > while (...)
> > {
> > if (z != 0)
> > x = my_fancy_divide (x,z)
> > }
>
> Uh, this may be const, but you can't move these out anyway because the
> value of the parameters has changed, so i'm not sure what you are going
> for.
I would assume meaning should be clean, once you fix the obvious typo
you noticed.
int my_fancy_divide(int x, int z) attribute(const)
{
return x / z;
}
while (...)
{
if (z != 0)
y = my_fancy_divide (x,z)
}
> const has a very specific definition already. Moving get_type2 out of
> the loop is consistent with that definition.
The definition by no means is formulated precisely, in particular it is
not entirely clear what "reading memory" means.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21712