------- Additional Comments From rakdver at atrey dot karlin dot mff dot cuni
dot cz 2005-05-22 22:15 -------
Subject: Re: missed optimization due with const function and pulling out of
loops
> > ------- Additional Comments From rakdver at atrey dot karlin dot mff dot
> > cuni dot cz 2005-05-22 21:50 -------
> > Subject: Re: missed optimization due with const function and pulling out
> > of loops
> >
> > > const is different from pure, const cannot read from memory.
> >
> > this is something that have been discussed many times; some people like
> > the definition with "behaves like if" (that enables you for example to
> > cache or precompute the results of the function) more, and it is used in
> > several existing programs. Anyway, the argument that the function may
> > be costly is valid regardless of whether you want to strictly enforce
> > the no memory access constraint, or whether you use the more useful
> > definition.
> >
>
> These people are strictly wrong, and will in fact get burned by the new
> pure/const detection (which is better about recursive calls).
>
> We shouldn't let people who have the wrong definition of const get in
> the way of optimization
on the other hand, we should not let the definition make the concept
useless. Being able to make
int something(int i)
{
static int a[100];
if (a[i] == 0)
a[i] = somewhat_slow_computation;
return a[i];
}
const is fairly useful.
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)
}
Thus you would also have to require the const function to be total.
Making const still more and more useless.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21712